{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,19 +1,19 @@\n-Zip file size: 6667242 bytes, number of entries: 480\n+Zip file size: 6682639 bytes, number of entries: 480\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/\n--rw----     2.0 fat    76410 bX stor 70-Jan-01 00:00 META-INF/DEPENDENCIES\n+-rw----     2.0 fat    91262 bX stor 70-Jan-01 00:00 META-INF/DEPENDENCIES\n -rw----     2.0 fat    11358 bX stor 70-Jan-01 00:00 META-INF/LICENSE\n -rw----     2.0 fat      262 bX stor 70-Jan-01 00:00 META-INF/MANIFEST.MF\n -rw----     2.0 fat      160 bX stor 70-Jan-01 00:00 META-INF/NOTICE\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.apache.nifi/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.apache.nifi/nifi-runtime-manifest/\n -rw----     2.0 fat        0 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.nifi/nifi-runtime-manifest/pom.properties\n -rw----     2.0 fat     7223 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.nifi/nifi-runtime-manifest/pom.xml\n--rw----     2.0 fat     1259 bX stor 70-Jan-01 00:00 build.properties\n+-rw----     2.0 fat     1199 bX stor 70-Jan-01 00:00 build.properties\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-airtable-nar/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-airtable-nar/1.27.0/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-airtable-nar/1.27.0/org.apache.nifi.processors.airtable.QueryAirtableTable/\n -rw----     2.0 fat     2722 bX stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-airtable-nar/1.27.0/org.apache.nifi.processors.airtable.QueryAirtableTable/additionalDetails.html\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-ambari-nar/\n@@ -474,9 +474,9 @@\n -rw----     2.0 fat     3375 bX stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-nar/1.27.0/org.apache.nifi.processors.zendesk.GetZendesk/additionalDetails.html\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-nar/1.27.0/org.apache.nifi.processors.zendesk.PutZendeskTicket/\n -rw----     2.0 fat     7289 bX stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-nar/1.27.0/org.apache.nifi.processors.zendesk.PutZendeskTicket/additionalDetails.html\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-services-nar/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-services-nar/1.27.0/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-services-nar/1.27.0/org.apache.nifi.services.zendesk.ZendeskRecordSink/\n -rw----     2.0 fat     7449 bX stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-services-nar/1.27.0/org.apache.nifi.services.zendesk.ZendeskRecordSink/additionalDetails.html\n--rw----     2.0 fat  5304551 bX stor 70-Jan-01 00:00 nifi-runtime-manifest.json\n-480 files, 6528666 bytes uncompressed, 6528666 bytes compressed:  0.0%\n+-rw----     2.0 fat  5305156 bX stor 70-Jan-01 00:00 nifi-runtime-manifest.json\n+480 files, 6544063 bytes uncompressed, 6544063 bytes compressed:  0.0%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -39,25553 +39,25553 @@\n #\n 000063 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 000065   Length              0005 (5)\n 000067   Flags               01 (1) 'Modification'\n 000068   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n 00006C PAYLOAD\n \n-012AE6 DATA DESCRIPTOR       08074B50 (134695760)\n-012AEA CRC                   9DCF049A (2647590042)\n-012AEE Compressed Size       00012A7A (76410)\n-012AF2 Uncompressed Size     00012A7A (76410)\n-\n-012AF6 LOCAL HEADER #3       04034B50 (67324752)\n-012AFA Extract Zip Spec      14 (20) '2.0'\n-012AFB Extract OS            00 (0) 'MS-DOS'\n-012AFC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-012AFE Compression Method    0000 (0) 'Stored'\n-012B00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-012B04 CRC                   00000000 (0)\n-012B08 Compressed Size       00000000 (0)\n-012B0C Uncompressed Size     00000000 (0)\n-012B10 Filename Length       0010 (16)\n-012B12 Extra Length          0009 (9)\n-012B14 Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x12B14: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-012B24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-012B26   Length              0005 (5)\n-012B28   Flags               01 (1) 'Modification'\n-012B29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-012B2D PAYLOAD\n-\n-01578B DATA DESCRIPTOR       08074B50 (134695760)\n-01578F CRC                   86E2B4B4 (2263004340)\n-015793 Compressed Size       00002C5E (11358)\n-015797 Uncompressed Size     00002C5E (11358)\n-\n-01579B LOCAL HEADER #4       04034B50 (67324752)\n-01579F Extract Zip Spec      14 (20) '2.0'\n-0157A0 Extract OS            00 (0) 'MS-DOS'\n-0157A1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0157A3 Compression Method    0000 (0) 'Stored'\n-0157A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0157A9 CRC                   00000000 (0)\n-0157AD Compressed Size       00000000 (0)\n-0157B1 Uncompressed Size     00000000 (0)\n-0157B5 Filename Length       0014 (20)\n-0157B7 Extra Length          0009 (9)\n-0157B9 Filename              'XXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x157B9: Filename 'XXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0157CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0157CF   Length              0005 (5)\n-0157D1   Flags               01 (1) 'Modification'\n-0157D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0157D6 PAYLOAD\n-\n-0158DC DATA DESCRIPTOR       08074B50 (134695760)\n-0158E0 CRC                   05EA707D (99250301)\n-0158E4 Compressed Size       00000106 (262)\n-0158E8 Uncompressed Size     00000106 (262)\n-\n-0158EC LOCAL HEADER #5       04034B50 (67324752)\n-0158F0 Extract Zip Spec      14 (20) '2.0'\n-0158F1 Extract OS            00 (0) 'MS-DOS'\n-0158F2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0158F4 Compression Method    0000 (0) 'Stored'\n-0158F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0158FA CRC                   00000000 (0)\n-0158FE Compressed Size       00000000 (0)\n-015902 Uncompressed Size     00000000 (0)\n-015906 Filename Length       000F (15)\n-015908 Extra Length          0009 (9)\n-01590A Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1590A: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-015919 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01591B   Length              0005 (5)\n-01591D   Flags               01 (1) 'Modification'\n-01591E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-015922 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0164EA DATA DESCRIPTOR       08074B50 (134695760)\n+0164EE CRC                   CCFF255F (3439273311)\n+0164F2 Compressed Size       0001647E (91262)\n+0164F6 Uncompressed Size     0001647E (91262)\n+\n+0164FA LOCAL HEADER #3       04034B50 (67324752)\n+0164FE Extract Zip Spec      14 (20) '2.0'\n+0164FF Extract OS            00 (0) 'MS-DOS'\n+016500 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+016502 Compression Method    0000 (0) 'Stored'\n+016504 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+016508 CRC                   00000000 (0)\n+01650C Compressed Size       00000000 (0)\n+016510 Uncompressed Size     00000000 (0)\n+016514 Filename Length       0010 (16)\n+016516 Extra Length          0009 (9)\n+016518 Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16518: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+016528 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01652A   Length              0005 (5)\n+01652C   Flags               01 (1) 'Modification'\n+01652D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+016531 PAYLOAD\n+\n+01918F DATA DESCRIPTOR       08074B50 (134695760)\n+019193 CRC                   86E2B4B4 (2263004340)\n+019197 Compressed Size       00002C5E (11358)\n+01919B Uncompressed Size     00002C5E (11358)\n+\n+01919F LOCAL HEADER #4       04034B50 (67324752)\n+0191A3 Extract Zip Spec      14 (20) '2.0'\n+0191A4 Extract OS            00 (0) 'MS-DOS'\n+0191A5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0191A7 Compression Method    0000 (0) 'Stored'\n+0191A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0191AD CRC                   00000000 (0)\n+0191B1 Compressed Size       00000000 (0)\n+0191B5 Uncompressed Size     00000000 (0)\n+0191B9 Filename Length       0014 (20)\n+0191BB Extra Length          0009 (9)\n+0191BD Filename              'XXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x191BD: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0191D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0191D3   Length              0005 (5)\n+0191D5   Flags               01 (1) 'Modification'\n+0191D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0191DA PAYLOAD\n+\n+0192E0 DATA DESCRIPTOR       08074B50 (134695760)\n+0192E4 CRC                   05EA707D (99250301)\n+0192E8 Compressed Size       00000106 (262)\n+0192EC Uncompressed Size     00000106 (262)\n+\n+0192F0 LOCAL HEADER #5       04034B50 (67324752)\n+0192F4 Extract Zip Spec      14 (20) '2.0'\n+0192F5 Extract OS            00 (0) 'MS-DOS'\n+0192F6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0192F8 Compression Method    0000 (0) 'Stored'\n+0192FA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0192FE CRC                   00000000 (0)\n+019302 Compressed Size       00000000 (0)\n+019306 Uncompressed Size     00000000 (0)\n+01930A Filename Length       000F (15)\n+01930C Extra Length          0009 (9)\n+01930E Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1930E: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01931D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01931F   Length              0005 (5)\n+019321   Flags               01 (1) 'Modification'\n+019322   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+019326 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-0159C2 DATA DESCRIPTOR       08074B50 (134695760)\n-0159C6 CRC                   91A82808 (2443716616)\n-0159CA Compressed Size       000000A0 (160)\n-0159CE Uncompressed Size     000000A0 (160)\n-\n-0159D2 LOCAL HEADER #6       04034B50 (67324752)\n-0159D6 Extract Zip Spec      14 (20) '2.0'\n-0159D7 Extract OS            00 (0) 'MS-DOS'\n-0159D8 General Purpose Flag  0000 (0)\n-0159DA Compression Method    0000 (0) 'Stored'\n-0159DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0159E0 CRC                   00000000 (0)\n-0159E4 Compressed Size       00000000 (0)\n-0159E8 Uncompressed Size     00000000 (0)\n-0159EC Filename Length       000F (15)\n-0159EE Extra Length          0009 (9)\n-0159F0 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x159F0: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0159FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-015A01   Length              0005 (5)\n-015A03   Flags               01 (1) 'Modification'\n-015A04   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-015A08 LOCAL HEADER #7       04034B50 (67324752)\n-015A0C Extract Zip Spec      14 (20) '2.0'\n-015A0D Extract OS            00 (0) 'MS-DOS'\n-015A0E General Purpose Flag  0000 (0)\n-015A10 Compression Method    0000 (0) 'Stored'\n-015A12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-015A16 CRC                   00000000 (0)\n-015A1A Compressed Size       00000000 (0)\n-015A1E Uncompressed Size     00000000 (0)\n-015A22 Filename Length       001F (31)\n-015A24 Extra Length          0009 (9)\n-015A26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15A26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-015A45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-015A47   Length              0005 (5)\n-015A49   Flags               01 (1) 'Modification'\n-015A4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-015A4E LOCAL HEADER #8       04034B50 (67324752)\n-015A52 Extract Zip Spec      14 (20) '2.0'\n-015A53 Extract OS            00 (0) 'MS-DOS'\n-015A54 General Purpose Flag  0000 (0)\n-015A56 Compression Method    0000 (0) 'Stored'\n-015A58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-015A5C CRC                   00000000 (0)\n-015A60 Compressed Size       00000000 (0)\n-015A64 Uncompressed Size     00000000 (0)\n-015A68 Filename Length       0035 (53)\n-015A6A Extra Length          0009 (9)\n-015A6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15A6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-015AA1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-015AA3   Length              0005 (5)\n-015AA5   Flags               01 (1) 'Modification'\n-015AA6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-015AAA LOCAL HEADER #9       04034B50 (67324752)\n-015AAE Extract Zip Spec      14 (20) '2.0'\n-015AAF Extract OS            00 (0) 'MS-DOS'\n-015AB0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-015AB2 Compression Method    0000 (0) 'Stored'\n-015AB4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-015AB8 CRC                   00000000 (0)\n-015ABC Compressed Size       00000000 (0)\n-015AC0 Uncompressed Size     00000000 (0)\n-015AC4 Filename Length       0043 (67)\n-015AC6 Extra Length          0009 (9)\n-015AC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15AC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-015B0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-015B0D   Length              0005 (5)\n-015B0F   Flags               01 (1) 'Modification'\n-015B10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-015B14 DATA DESCRIPTOR       08074B50 (134695760)\n-015B18 CRC                   00000000 (0)\n-015B1C Compressed Size       00000000 (0)\n-015B20 Uncompressed Size     00000000 (0)\n-\n-015B24 LOCAL HEADER #10      04034B50 (67324752)\n-015B28 Extract Zip Spec      14 (20) '2.0'\n-015B29 Extract OS            00 (0) 'MS-DOS'\n-015B2A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-015B2C Compression Method    0000 (0) 'Stored'\n-015B2E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-015B32 CRC                   00000000 (0)\n-015B36 Compressed Size       00000000 (0)\n-015B3A Uncompressed Size     00000000 (0)\n-015B3E Filename Length       003C (60)\n-015B40 Extra Length          0009 (9)\n-015B42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15B42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-015B7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-015B80   Length              0005 (5)\n-015B82   Flags               01 (1) 'Modification'\n-015B83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-015B87 PAYLOAD\n-\n-0177BE DATA DESCRIPTOR       08074B50 (134695760)\n-0177C2 CRC                   71BCF1C4 (1908208068)\n-0177C6 Compressed Size       00001C37 (7223)\n-0177CA Uncompressed Size     00001C37 (7223)\n-\n-0177CE LOCAL HEADER #11      04034B50 (67324752)\n-0177D2 Extract Zip Spec      14 (20) '2.0'\n-0177D3 Extract OS            00 (0) 'MS-DOS'\n-0177D4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0177D6 Compression Method    0000 (0) 'Stored'\n-0177D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0177DC CRC                   00000000 (0)\n-0177E0 Compressed Size       00000000 (0)\n-0177E4 Uncompressed Size     00000000 (0)\n-0177E8 Filename Length       0010 (16)\n-0177EA Extra Length          0009 (9)\n-0177EC Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x177EC: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0177FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0177FE   Length              0005 (5)\n-017800   Flags               01 (1) 'Modification'\n-017801   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-017805 PAYLOAD\n-\n-017CF0 DATA DESCRIPTOR       08074B50 (134695760)\n-017CF4 CRC                   A0542DCB (2689871307)\n-017CF8 Compressed Size       000004EB (1259)\n-017CFC Uncompressed Size     000004EB (1259)\n-\n-017D00 LOCAL HEADER #12      04034B50 (67324752)\n-017D04 Extract Zip Spec      14 (20) '2.0'\n-017D05 Extract OS            00 (0) 'MS-DOS'\n-017D06 General Purpose Flag  0000 (0)\n-017D08 Compression Method    0000 (0) 'Stored'\n-017D0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-017D0E CRC                   00000000 (0)\n-017D12 Compressed Size       00000000 (0)\n-017D16 Uncompressed Size     00000000 (0)\n-017D1A Filename Length       0005 (5)\n-017D1C Extra Length          0009 (9)\n-017D1E Filename              'XXXXX'\n-#\n-# WARNING: Offset 0x17D1E: Filename 'XXXXX'\n-#          Zero length filename\n-#\n-017D23 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-017D25   Length              0005 (5)\n-017D27   Flags               01 (1) 'Modification'\n-017D28   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-017D2C LOCAL HEADER #13      04034B50 (67324752)\n-017D30 Extract Zip Spec      14 (20) '2.0'\n-017D31 Extract OS            00 (0) 'MS-DOS'\n-017D32 General Purpose Flag  0000 (0)\n-017D34 Compression Method    0000 (0) 'Stored'\n-017D36 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-017D3A CRC                   00000000 (0)\n-017D3E Compressed Size       00000000 (0)\n-017D42 Uncompressed Size     00000000 (0)\n-017D46 Filename Length       0015 (21)\n-017D48 Extra Length          0009 (9)\n-017D4A Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17D4A: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-017D5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-017D61   Length              0005 (5)\n-017D63   Flags               01 (1) 'Modification'\n-017D64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-017D68 LOCAL HEADER #14      04034B50 (67324752)\n-017D6C Extract Zip Spec      14 (20) '2.0'\n-017D6D Extract OS            00 (0) 'MS-DOS'\n-017D6E General Purpose Flag  0000 (0)\n-017D70 Compression Method    0000 (0) 'Stored'\n-017D72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-017D76 CRC                   00000000 (0)\n-017D7A Compressed Size       00000000 (0)\n-017D7E Uncompressed Size     00000000 (0)\n-017D82 Filename Length       0027 (39)\n-017D84 Extra Length          0009 (9)\n-017D86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17D86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-017DAD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-017DAF   Length              0005 (5)\n-017DB1   Flags               01 (1) 'Modification'\n-017DB2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-017DB6 LOCAL HEADER #15      04034B50 (67324752)\n-017DBA Extract Zip Spec      14 (20) '2.0'\n-017DBB Extract OS            00 (0) 'MS-DOS'\n-017DBC General Purpose Flag  0000 (0)\n-017DBE Compression Method    0000 (0) 'Stored'\n-017DC0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-017DC4 CRC                   00000000 (0)\n-017DC8 Compressed Size       00000000 (0)\n-017DCC Uncompressed Size     00000000 (0)\n-017DD0 Filename Length       002E (46)\n-017DD2 Extra Length          0009 (9)\n-017DD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17DD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-017E02 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-017E04   Length              0005 (5)\n-017E06   Flags               01 (1) 'Modification'\n-017E07   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-017E0B LOCAL HEADER #16      04034B50 (67324752)\n-017E0F Extract Zip Spec      14 (20) '2.0'\n-017E10 Extract OS            00 (0) 'MS-DOS'\n-017E11 General Purpose Flag  0000 (0)\n-017E13 Compression Method    0000 (0) 'Stored'\n-017E15 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-017E19 CRC                   00000000 (0)\n-017E1D Compressed Size       00000000 (0)\n-017E21 Uncompressed Size     00000000 (0)\n-017E25 Filename Length       0065 (101)\n-017E27 Extra Length          0009 (9)\n-017E29 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17E29: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-017E8E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-017E90   Length              0005 (5)\n-017E92   Flags               01 (1) 'Modification'\n-017E93   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-017E97 LOCAL HEADER #17      04034B50 (67324752)\n-017E9B Extract Zip Spec      14 (20) '2.0'\n-017E9C Extract OS            00 (0) 'MS-DOS'\n-017E9D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-017E9F Compression Method    0000 (0) 'Stored'\n-017EA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-017EA5 CRC                   00000000 (0)\n-017EA9 Compressed Size       00000000 (0)\n-017EAD Uncompressed Size     00000000 (0)\n-017EB1 Filename Length       007B (123)\n-017EB3 Extra Length          0009 (9)\n-017EB5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17EB5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-017F30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-017F32   Length              0005 (5)\n-017F34   Flags               01 (1) 'Modification'\n-017F35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-017F39 PAYLOAD\n-\n-0189DB DATA DESCRIPTOR       08074B50 (134695760)\n-0189DF CRC                   9CB4EC6B (2629102699)\n-0189E3 Compressed Size       00000AA2 (2722)\n-0189E7 Uncompressed Size     00000AA2 (2722)\n-\n-0189EB LOCAL HEADER #18      04034B50 (67324752)\n-0189EF Extract Zip Spec      14 (20) '2.0'\n-0189F0 Extract OS            00 (0) 'MS-DOS'\n-0189F1 General Purpose Flag  0000 (0)\n-0189F3 Compression Method    0000 (0) 'Stored'\n-0189F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0189F9 CRC                   00000000 (0)\n-0189FD Compressed Size       00000000 (0)\n-018A01 Uncompressed Size     00000000 (0)\n-018A05 Filename Length       0025 (37)\n-018A07 Extra Length          0009 (9)\n-018A09 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18A09: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-018A2E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-018A30   Length              0005 (5)\n-018A32   Flags               01 (1) 'Modification'\n-018A33   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-018A37 LOCAL HEADER #19      04034B50 (67324752)\n-018A3B Extract Zip Spec      14 (20) '2.0'\n-018A3C Extract OS            00 (0) 'MS-DOS'\n-018A3D General Purpose Flag  0000 (0)\n-018A3F Compression Method    0000 (0) 'Stored'\n-018A41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-018A45 CRC                   00000000 (0)\n-018A49 Compressed Size       00000000 (0)\n-018A4D Uncompressed Size     00000000 (0)\n-018A51 Filename Length       002C (44)\n-018A53 Extra Length          0009 (9)\n-018A55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18A55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-018A81 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-018A83   Length              0005 (5)\n-018A85   Flags               01 (1) 'Modification'\n-018A86   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-018A8A LOCAL HEADER #20      04034B50 (67324752)\n-018A8E Extract Zip Spec      14 (20) '2.0'\n-018A8F Extract OS            00 (0) 'MS-DOS'\n-018A90 General Purpose Flag  0000 (0)\n-018A92 Compression Method    0000 (0) 'Stored'\n-018A94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-018A98 CRC                   00000000 (0)\n-018A9C Compressed Size       00000000 (0)\n-018AA0 Uncompressed Size     00000000 (0)\n-018AA4 Filename Length       0061 (97)\n-018AA6 Extra Length          0009 (9)\n-018AA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18AA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-018B09 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-018B0B   Length              0005 (5)\n-018B0D   Flags               01 (1) 'Modification'\n-018B0E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-018B12 LOCAL HEADER #21      04034B50 (67324752)\n-018B16 Extract Zip Spec      14 (20) '2.0'\n-018B17 Extract OS            00 (0) 'MS-DOS'\n-018B18 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-018B1A Compression Method    0000 (0) 'Stored'\n-018B1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-018B20 CRC                   00000000 (0)\n-018B24 Compressed Size       00000000 (0)\n-018B28 Uncompressed Size     00000000 (0)\n-018B2C Filename Length       0077 (119)\n-018B2E Extra Length          0009 (9)\n-018B30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18B30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-018BA7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-018BA9   Length              0005 (5)\n-018BAB   Flags               01 (1) 'Modification'\n-018BAC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-018BB0 PAYLOAD\n-\n-0194F5 DATA DESCRIPTOR       08074B50 (134695760)\n-0194F9 CRC                   1401A9F3 (335653363)\n-0194FD Compressed Size       00000945 (2373)\n-019501 Uncompressed Size     00000945 (2373)\n-\n-019505 LOCAL HEADER #22      04034B50 (67324752)\n-019509 Extract Zip Spec      14 (20) '2.0'\n-01950A Extract OS            00 (0) 'MS-DOS'\n-01950B General Purpose Flag  0000 (0)\n-01950D Compression Method    0000 (0) 'Stored'\n-01950F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-019513 CRC                   00000000 (0)\n-019517 Compressed Size       00000000 (0)\n-01951B Uncompressed Size     00000000 (0)\n-01951F Filename Length       0023 (35)\n-019521 Extra Length          0009 (9)\n-019523 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19523: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-019546 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-019548   Length              0005 (5)\n-01954A   Flags               01 (1) 'Modification'\n-01954B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01954F LOCAL HEADER #23      04034B50 (67324752)\n-019553 Extract Zip Spec      14 (20) '2.0'\n-019554 Extract OS            00 (0) 'MS-DOS'\n-019555 General Purpose Flag  0000 (0)\n-019557 Compression Method    0000 (0) 'Stored'\n-019559 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01955D CRC                   00000000 (0)\n-019561 Compressed Size       00000000 (0)\n-019565 Uncompressed Size     00000000 (0)\n-019569 Filename Length       002A (42)\n-01956B Extra Length          0009 (9)\n-01956D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1956D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-019597 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-019599   Length              0005 (5)\n-01959B   Flags               01 (1) 'Modification'\n-01959C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0195A0 LOCAL HEADER #24      04034B50 (67324752)\n-0195A4 Extract Zip Spec      14 (20) '2.0'\n-0195A5 Extract OS            00 (0) 'MS-DOS'\n-0195A6 General Purpose Flag  0000 (0)\n-0195A8 Compression Method    0000 (0) 'Stored'\n-0195AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0195AE CRC                   00000000 (0)\n-0195B2 Compressed Size       00000000 (0)\n-0195B6 Uncompressed Size     00000000 (0)\n-0195BA Filename Length       0056 (86)\n-0195BC Extra Length          0009 (9)\n-0195BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-019614 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-019616   Length              0005 (5)\n-019618   Flags               01 (1) 'Modification'\n-019619   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01961D LOCAL HEADER #25      04034B50 (67324752)\n-019621 Extract Zip Spec      14 (20) '2.0'\n-019622 Extract OS            00 (0) 'MS-DOS'\n-019623 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-019625 Compression Method    0000 (0) 'Stored'\n-019627 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01962B CRC                   00000000 (0)\n-01962F Compressed Size       00000000 (0)\n-019633 Uncompressed Size     00000000 (0)\n-019637 Filename Length       006C (108)\n-019639 Extra Length          0009 (9)\n-01963B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1963B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0196A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0196A9   Length              0005 (5)\n-0196AB   Flags               01 (1) 'Modification'\n-0196AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0196B0 PAYLOAD\n-\n-01A66F DATA DESCRIPTOR       08074B50 (134695760)\n-01A673 CRC                   445AD7B2 (1146804146)\n-01A677 Compressed Size       00000FBF (4031)\n-01A67B Uncompressed Size     00000FBF (4031)\n-\n-01A67F LOCAL HEADER #26      04034B50 (67324752)\n-01A683 Extract Zip Spec      14 (20) '2.0'\n-01A684 Extract OS            00 (0) 'MS-DOS'\n-01A685 General Purpose Flag  0000 (0)\n-01A687 Compression Method    0000 (0) 'Stored'\n-01A689 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01A68D CRC                   00000000 (0)\n-01A691 Compressed Size       00000000 (0)\n-01A695 Uncompressed Size     00000000 (0)\n-01A699 Filename Length       0056 (86)\n-01A69B Extra Length          0009 (9)\n-01A69D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1A69D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01A6F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01A6F5   Length              0005 (5)\n-01A6F7   Flags               01 (1) 'Modification'\n-01A6F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01A6FC LOCAL HEADER #27      04034B50 (67324752)\n-01A700 Extract Zip Spec      14 (20) '2.0'\n-01A701 Extract OS            00 (0) 'MS-DOS'\n-01A702 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01A704 Compression Method    0000 (0) 'Stored'\n-01A706 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01A70A CRC                   00000000 (0)\n-01A70E Compressed Size       00000000 (0)\n-01A712 Uncompressed Size     00000000 (0)\n-01A716 Filename Length       006C (108)\n-01A718 Extra Length          0009 (9)\n-01A71A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1A71A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01A786 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01A788   Length              0005 (5)\n-01A78A   Flags               01 (1) 'Modification'\n-01A78B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01A78F PAYLOAD\n-\n-01BE6D DATA DESCRIPTOR       08074B50 (134695760)\n-01BE71 CRC                   A2A96EA2 (2729012898)\n-01BE75 Compressed Size       000016DE (5854)\n-01BE79 Uncompressed Size     000016DE (5854)\n-\n-01BE7D LOCAL HEADER #28      04034B50 (67324752)\n-01BE81 Extract Zip Spec      14 (20) '2.0'\n-01BE82 Extract OS            00 (0) 'MS-DOS'\n-01BE83 General Purpose Flag  0000 (0)\n-01BE85 Compression Method    0000 (0) 'Stored'\n-01BE87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01BE8B CRC                   00000000 (0)\n-01BE8F Compressed Size       00000000 (0)\n-01BE93 Uncompressed Size     00000000 (0)\n-01BE97 Filename Length       002F (47)\n-01BE99 Extra Length          0009 (9)\n-01BE9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1BE9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01BECA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01BECC   Length              0005 (5)\n-01BECE   Flags               01 (1) 'Modification'\n-01BECF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01BED3 LOCAL HEADER #29      04034B50 (67324752)\n-01BED7 Extract Zip Spec      14 (20) '2.0'\n-01BED8 Extract OS            00 (0) 'MS-DOS'\n-01BED9 General Purpose Flag  0000 (0)\n-01BEDB Compression Method    0000 (0) 'Stored'\n-01BEDD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01BEE1 CRC                   00000000 (0)\n-01BEE5 Compressed Size       00000000 (0)\n-01BEE9 Uncompressed Size     00000000 (0)\n-01BEED Filename Length       0036 (54)\n-01BEEF Extra Length          0009 (9)\n-01BEF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1BEF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01BF27 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01BF29   Length              0005 (5)\n-01BF2B   Flags               01 (1) 'Modification'\n-01BF2C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01BF30 LOCAL HEADER #30      04034B50 (67324752)\n-01BF34 Extract Zip Spec      14 (20) '2.0'\n-01BF35 Extract OS            00 (0) 'MS-DOS'\n-01BF36 General Purpose Flag  0000 (0)\n-01BF38 Compression Method    0000 (0) 'Stored'\n-01BF3A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01BF3E CRC                   00000000 (0)\n-01BF42 Compressed Size       00000000 (0)\n-01BF46 Uncompressed Size     00000000 (0)\n-01BF4A Filename Length       0066 (102)\n-01BF4C Extra Length          0009 (9)\n-01BF4E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1BF4E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01BFB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01BFB6   Length              0005 (5)\n-01BFB8   Flags               01 (1) 'Modification'\n-01BFB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01BFBD LOCAL HEADER #31      04034B50 (67324752)\n-01BFC1 Extract Zip Spec      14 (20) '2.0'\n-01BFC2 Extract OS            00 (0) 'MS-DOS'\n-01BFC3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01BFC5 Compression Method    0000 (0) 'Stored'\n-01BFC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01BFCB CRC                   00000000 (0)\n-01BFCF Compressed Size       00000000 (0)\n-01BFD3 Uncompressed Size     00000000 (0)\n-01BFD7 Filename Length       007C (124)\n-01BFD9 Extra Length          0009 (9)\n-01BFDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1BFDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01C057 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01C059   Length              0005 (5)\n-01C05B   Flags               01 (1) 'Modification'\n-01C05C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01C060 PAYLOAD\n-\n-01D572 DATA DESCRIPTOR       08074B50 (134695760)\n-01D576 CRC                   7416DF2A (1947655978)\n-01D57A Compressed Size       00001512 (5394)\n-01D57E Uncompressed Size     00001512 (5394)\n-\n-01D582 LOCAL HEADER #32      04034B50 (67324752)\n-01D586 Extract Zip Spec      14 (20) '2.0'\n-01D587 Extract OS            00 (0) 'MS-DOS'\n-01D588 General Purpose Flag  0000 (0)\n-01D58A Compression Method    0000 (0) 'Stored'\n-01D58C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01D590 CRC                   00000000 (0)\n-01D594 Compressed Size       00000000 (0)\n-01D598 Uncompressed Size     00000000 (0)\n-01D59C Filename Length       0022 (34)\n-01D59E Extra Length          0009 (9)\n-01D5A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1D5A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01D5C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01D5C4   Length              0005 (5)\n-01D5C6   Flags               01 (1) 'Modification'\n-01D5C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01D5CB LOCAL HEADER #33      04034B50 (67324752)\n-01D5CF Extract Zip Spec      14 (20) '2.0'\n-01D5D0 Extract OS            00 (0) 'MS-DOS'\n-01D5D1 General Purpose Flag  0000 (0)\n-01D5D3 Compression Method    0000 (0) 'Stored'\n-01D5D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01D5D9 CRC                   00000000 (0)\n-01D5DD Compressed Size       00000000 (0)\n-01D5E1 Uncompressed Size     00000000 (0)\n-01D5E5 Filename Length       0029 (41)\n-01D5E7 Extra Length          0009 (9)\n-01D5E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1D5E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01D612 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01D614   Length              0005 (5)\n-01D616   Flags               01 (1) 'Modification'\n-01D617   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01D61B LOCAL HEADER #34      04034B50 (67324752)\n-01D61F Extract Zip Spec      14 (20) '2.0'\n-01D620 Extract OS            00 (0) 'MS-DOS'\n-01D621 General Purpose Flag  0000 (0)\n-01D623 Compression Method    0000 (0) 'Stored'\n-01D625 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01D629 CRC                   00000000 (0)\n-01D62D Compressed Size       00000000 (0)\n-01D631 Uncompressed Size     00000000 (0)\n-01D635 Filename Length       0063 (99)\n-01D637 Extra Length          0009 (9)\n-01D639 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1D639: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01D69C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01D69E   Length              0005 (5)\n-01D6A0   Flags               01 (1) 'Modification'\n-01D6A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01D6A5 LOCAL HEADER #35      04034B50 (67324752)\n-01D6A9 Extract Zip Spec      14 (20) '2.0'\n-01D6AA Extract OS            00 (0) 'MS-DOS'\n-01D6AB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01D6AD Compression Method    0000 (0) 'Stored'\n-01D6AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01D6B3 CRC                   00000000 (0)\n-01D6B7 Compressed Size       00000000 (0)\n-01D6BB Uncompressed Size     00000000 (0)\n-01D6BF Filename Length       0079 (121)\n-01D6C1 Extra Length          0009 (9)\n-01D6C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1D6C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01D73C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01D73E   Length              0005 (5)\n-01D740   Flags               01 (1) 'Modification'\n-01D741   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01D745 PAYLOAD\n-\n-0206D5 DATA DESCRIPTOR       08074B50 (134695760)\n-0206D9 CRC                   826E1CC4 (2188254404)\n-0206DD Compressed Size       00002F90 (12176)\n-0206E1 Uncompressed Size     00002F90 (12176)\n-\n-0206E5 LOCAL HEADER #36      04034B50 (67324752)\n-0206E9 Extract Zip Spec      14 (20) '2.0'\n-0206EA Extract OS            00 (0) 'MS-DOS'\n-0206EB General Purpose Flag  0000 (0)\n-0206ED Compression Method    0000 (0) 'Stored'\n-0206EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0206F3 CRC                   00000000 (0)\n-0206F7 Compressed Size       00000000 (0)\n-0206FB Uncompressed Size     00000000 (0)\n-0206FF Filename Length       006C (108)\n-020701 Extra Length          0009 (9)\n-020703 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x20703: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02076F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-020771   Length              0005 (5)\n-020773   Flags               01 (1) 'Modification'\n-020774   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-020778 LOCAL HEADER #37      04034B50 (67324752)\n-02077C Extract Zip Spec      14 (20) '2.0'\n-02077D Extract OS            00 (0) 'MS-DOS'\n-02077E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-020780 Compression Method    0000 (0) 'Stored'\n-020782 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-020786 CRC                   00000000 (0)\n-02078A Compressed Size       00000000 (0)\n-02078E Uncompressed Size     00000000 (0)\n-020792 Filename Length       0082 (130)\n-020794 Extra Length          0009 (9)\n-020796 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x20796: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-020818 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02081A   Length              0005 (5)\n-02081C   Flags               01 (1) 'Modification'\n-02081D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-020821 PAYLOAD\n-\n-021188 DATA DESCRIPTOR       08074B50 (134695760)\n-02118C CRC                   1BE163AC (467755948)\n-021190 Compressed Size       00000967 (2407)\n-021194 Uncompressed Size     00000967 (2407)\n-\n-021198 LOCAL HEADER #38      04034B50 (67324752)\n-02119C Extract Zip Spec      14 (20) '2.0'\n-02119D Extract OS            00 (0) 'MS-DOS'\n-02119E General Purpose Flag  0000 (0)\n-0211A0 Compression Method    0000 (0) 'Stored'\n-0211A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0211A6 CRC                   00000000 (0)\n-0211AA Compressed Size       00000000 (0)\n-0211AE Uncompressed Size     00000000 (0)\n-0211B2 Filename Length       0066 (102)\n-0211B4 Extra Length          0009 (9)\n-0211B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x211B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02121C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02121E   Length              0005 (5)\n-021220   Flags               01 (1) 'Modification'\n-021221   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-021225 LOCAL HEADER #39      04034B50 (67324752)\n-021229 Extract Zip Spec      14 (20) '2.0'\n-02122A Extract OS            00 (0) 'MS-DOS'\n-02122B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02122D Compression Method    0000 (0) 'Stored'\n-02122F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-021233 CRC                   00000000 (0)\n-021237 Compressed Size       00000000 (0)\n-02123B Uncompressed Size     00000000 (0)\n-02123F Filename Length       007C (124)\n-021241 Extra Length          0009 (9)\n-021243 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x21243: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0212BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0212C1   Length              0005 (5)\n-0212C3   Flags               01 (1) 'Modification'\n-0212C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0212C8 PAYLOAD\n-\n-021AD7 DATA DESCRIPTOR       08074B50 (134695760)\n-021ADB CRC                   11DB1110 (299569424)\n-021ADF Compressed Size       0000080F (2063)\n-021AE3 Uncompressed Size     0000080F (2063)\n-\n-021AE7 LOCAL HEADER #40      04034B50 (67324752)\n-021AEB Extract Zip Spec      14 (20) '2.0'\n-021AEC Extract OS            00 (0) 'MS-DOS'\n-021AED General Purpose Flag  0000 (0)\n-021AEF Compression Method    0000 (0) 'Stored'\n-021AF1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-021AF5 CRC                   00000000 (0)\n-021AF9 Compressed Size       00000000 (0)\n-021AFD Uncompressed Size     00000000 (0)\n-021B01 Filename Length       0062 (98)\n-021B03 Extra Length          0009 (9)\n-021B05 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x21B05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-021B67 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-021B69   Length              0005 (5)\n-021B6B   Flags               01 (1) 'Modification'\n-021B6C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-021B70 LOCAL HEADER #41      04034B50 (67324752)\n-021B74 Extract Zip Spec      14 (20) '2.0'\n-021B75 Extract OS            00 (0) 'MS-DOS'\n-021B76 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-021B78 Compression Method    0000 (0) 'Stored'\n-021B7A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-021B7E CRC                   00000000 (0)\n-021B82 Compressed Size       00000000 (0)\n-021B86 Uncompressed Size     00000000 (0)\n-021B8A Filename Length       0078 (120)\n-021B8C Extra Length          0009 (9)\n-021B8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x21B8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-021C06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-021C08   Length              0005 (5)\n-021C0A   Flags               01 (1) 'Modification'\n-021C0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-021C0F PAYLOAD\n-\n-02282B DATA DESCRIPTOR       08074B50 (134695760)\n-02282F CRC                   30A69673 (816223859)\n-022833 Compressed Size       00000C1C (3100)\n-022837 Uncompressed Size     00000C1C (3100)\n-\n-02283B LOCAL HEADER #42      04034B50 (67324752)\n-02283F Extract Zip Spec      14 (20) '2.0'\n-022840 Extract OS            00 (0) 'MS-DOS'\n-022841 General Purpose Flag  0000 (0)\n-022843 Compression Method    0000 (0) 'Stored'\n-022845 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-022849 CRC                   00000000 (0)\n-02284D Compressed Size       00000000 (0)\n-022851 Uncompressed Size     00000000 (0)\n-022855 Filename Length       006C (108)\n-022857 Extra Length          0009 (9)\n-022859 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x22859: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0228C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0228C7   Length              0005 (5)\n-0228C9   Flags               01 (1) 'Modification'\n-0228CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0228CE LOCAL HEADER #43      04034B50 (67324752)\n-0228D2 Extract Zip Spec      14 (20) '2.0'\n-0228D3 Extract OS            00 (0) 'MS-DOS'\n-0228D4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0228D6 Compression Method    0000 (0) 'Stored'\n-0228D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0228DC CRC                   00000000 (0)\n-0228E0 Compressed Size       00000000 (0)\n-0228E4 Uncompressed Size     00000000 (0)\n-0228E8 Filename Length       0082 (130)\n-0228EA Extra Length          0009 (9)\n-0228EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x228EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02296E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-022970   Length              0005 (5)\n-022972   Flags               01 (1) 'Modification'\n-022973   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-022977 PAYLOAD\n-\n-02304E DATA DESCRIPTOR       08074B50 (134695760)\n-023052 CRC                   0C316B32 (204565298)\n-023056 Compressed Size       000006D7 (1751)\n-02305A Uncompressed Size     000006D7 (1751)\n-\n-02305E LOCAL HEADER #44      04034B50 (67324752)\n-023062 Extract Zip Spec      14 (20) '2.0'\n-023063 Extract OS            00 (0) 'MS-DOS'\n-023064 General Purpose Flag  0000 (0)\n-023066 Compression Method    0000 (0) 'Stored'\n-023068 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02306C CRC                   00000000 (0)\n-023070 Compressed Size       00000000 (0)\n-023074 Uncompressed Size     00000000 (0)\n-023078 Filename Length       0068 (104)\n-02307A Extra Length          0009 (9)\n-02307C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2307C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0230E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0230E6   Length              0005 (5)\n-0230E8   Flags               01 (1) 'Modification'\n-0230E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0230ED LOCAL HEADER #45      04034B50 (67324752)\n-0230F1 Extract Zip Spec      14 (20) '2.0'\n-0230F2 Extract OS            00 (0) 'MS-DOS'\n-0230F3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0230F5 Compression Method    0000 (0) 'Stored'\n-0230F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0230FB CRC                   00000000 (0)\n-0230FF Compressed Size       00000000 (0)\n-023103 Uncompressed Size     00000000 (0)\n-023107 Filename Length       007E (126)\n-023109 Extra Length          0009 (9)\n-02310B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2310B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-023189 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02318B   Length              0005 (5)\n-02318D   Flags               01 (1) 'Modification'\n-02318E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-023192 PAYLOAD\n-\n-0244CD DATA DESCRIPTOR       08074B50 (134695760)\n-0244D1 CRC                   37BEEC96 (935259286)\n-0244D5 Compressed Size       0000133B (4923)\n-0244D9 Uncompressed Size     0000133B (4923)\n-\n-0244DD LOCAL HEADER #46      04034B50 (67324752)\n-0244E1 Extract Zip Spec      14 (20) '2.0'\n-0244E2 Extract OS            00 (0) 'MS-DOS'\n-0244E3 General Purpose Flag  0000 (0)\n-0244E5 Compression Method    0000 (0) 'Stored'\n-0244E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0244EB CRC                   00000000 (0)\n-0244EF Compressed Size       00000000 (0)\n-0244F3 Uncompressed Size     00000000 (0)\n-0244F7 Filename Length       0070 (112)\n-0244F9 Extra Length          0009 (9)\n-0244FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x244FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02456B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02456D   Length              0005 (5)\n-02456F   Flags               01 (1) 'Modification'\n-024570   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-024574 LOCAL HEADER #47      04034B50 (67324752)\n-024578 Extract Zip Spec      14 (20) '2.0'\n-024579 Extract OS            00 (0) 'MS-DOS'\n-02457A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02457C Compression Method    0000 (0) 'Stored'\n-02457E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-024582 CRC                   00000000 (0)\n-024586 Compressed Size       00000000 (0)\n-02458A Uncompressed Size     00000000 (0)\n-02458E Filename Length       0086 (134)\n-024590 Extra Length          0009 (9)\n-024592 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0193C6 DATA DESCRIPTOR       08074B50 (134695760)\n+0193CA CRC                   91A82808 (2443716616)\n+0193CE Compressed Size       000000A0 (160)\n+0193D2 Uncompressed Size     000000A0 (160)\n+\n+0193D6 LOCAL HEADER #6       04034B50 (67324752)\n+0193DA Extract Zip Spec      14 (20) '2.0'\n+0193DB Extract OS            00 (0) 'MS-DOS'\n+0193DC General Purpose Flag  0000 (0)\n+0193DE Compression Method    0000 (0) 'Stored'\n+0193E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0193E4 CRC                   00000000 (0)\n+0193E8 Compressed Size       00000000 (0)\n+0193EC Uncompressed Size     00000000 (0)\n+0193F0 Filename Length       000F (15)\n+0193F2 Extra Length          0009 (9)\n+0193F4 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x193F4: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+019403 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+019405   Length              0005 (5)\n+019407   Flags               01 (1) 'Modification'\n+019408   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01940C LOCAL HEADER #7       04034B50 (67324752)\n+019410 Extract Zip Spec      14 (20) '2.0'\n+019411 Extract OS            00 (0) 'MS-DOS'\n+019412 General Purpose Flag  0000 (0)\n+019414 Compression Method    0000 (0) 'Stored'\n+019416 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01941A CRC                   00000000 (0)\n+01941E Compressed Size       00000000 (0)\n+019422 Uncompressed Size     00000000 (0)\n+019426 Filename Length       001F (31)\n+019428 Extra Length          0009 (9)\n+01942A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1942A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+019449 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01944B   Length              0005 (5)\n+01944D   Flags               01 (1) 'Modification'\n+01944E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+019452 LOCAL HEADER #8       04034B50 (67324752)\n+019456 Extract Zip Spec      14 (20) '2.0'\n+019457 Extract OS            00 (0) 'MS-DOS'\n+019458 General Purpose Flag  0000 (0)\n+01945A Compression Method    0000 (0) 'Stored'\n+01945C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+019460 CRC                   00000000 (0)\n+019464 Compressed Size       00000000 (0)\n+019468 Uncompressed Size     00000000 (0)\n+01946C Filename Length       0035 (53)\n+01946E Extra Length          0009 (9)\n+019470 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19470: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0194A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0194A7   Length              0005 (5)\n+0194A9   Flags               01 (1) 'Modification'\n+0194AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0194AE LOCAL HEADER #9       04034B50 (67324752)\n+0194B2 Extract Zip Spec      14 (20) '2.0'\n+0194B3 Extract OS            00 (0) 'MS-DOS'\n+0194B4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0194B6 Compression Method    0000 (0) 'Stored'\n+0194B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0194BC CRC                   00000000 (0)\n+0194C0 Compressed Size       00000000 (0)\n+0194C4 Uncompressed Size     00000000 (0)\n+0194C8 Filename Length       0043 (67)\n+0194CA Extra Length          0009 (9)\n+0194CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x194CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01950F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+019511   Length              0005 (5)\n+019513   Flags               01 (1) 'Modification'\n+019514   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+019518 DATA DESCRIPTOR       08074B50 (134695760)\n+01951C CRC                   00000000 (0)\n+019520 Compressed Size       00000000 (0)\n+019524 Uncompressed Size     00000000 (0)\n+\n+019528 LOCAL HEADER #10      04034B50 (67324752)\n+01952C Extract Zip Spec      14 (20) '2.0'\n+01952D Extract OS            00 (0) 'MS-DOS'\n+01952E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+019530 Compression Method    0000 (0) 'Stored'\n+019532 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+019536 CRC                   00000000 (0)\n+01953A Compressed Size       00000000 (0)\n+01953E Uncompressed Size     00000000 (0)\n+019542 Filename Length       003C (60)\n+019544 Extra Length          0009 (9)\n+019546 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19546: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+019582 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+019584   Length              0005 (5)\n+019586   Flags               01 (1) 'Modification'\n+019587   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01958B PAYLOAD\n+\n+01B1C2 DATA DESCRIPTOR       08074B50 (134695760)\n+01B1C6 CRC                   71BCF1C4 (1908208068)\n+01B1CA Compressed Size       00001C37 (7223)\n+01B1CE Uncompressed Size     00001C37 (7223)\n+\n+01B1D2 LOCAL HEADER #11      04034B50 (67324752)\n+01B1D6 Extract Zip Spec      14 (20) '2.0'\n+01B1D7 Extract OS            00 (0) 'MS-DOS'\n+01B1D8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01B1DA Compression Method    0000 (0) 'Stored'\n+01B1DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01B1E0 CRC                   00000000 (0)\n+01B1E4 Compressed Size       00000000 (0)\n+01B1E8 Uncompressed Size     00000000 (0)\n+01B1EC Filename Length       0010 (16)\n+01B1EE Extra Length          0009 (9)\n+01B1F0 Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1B1F0: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01B200 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01B202   Length              0005 (5)\n+01B204   Flags               01 (1) 'Modification'\n+01B205   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01B209 PAYLOAD\n+\n+01B6B8 DATA DESCRIPTOR       08074B50 (134695760)\n+01B6BC CRC                   ADF1FCE9 (2918317289)\n+01B6C0 Compressed Size       000004AF (1199)\n+01B6C4 Uncompressed Size     000004AF (1199)\n+\n+01B6C8 LOCAL HEADER #12      04034B50 (67324752)\n+01B6CC Extract Zip Spec      14 (20) '2.0'\n+01B6CD Extract OS            00 (0) 'MS-DOS'\n+01B6CE General Purpose Flag  0000 (0)\n+01B6D0 Compression Method    0000 (0) 'Stored'\n+01B6D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01B6D6 CRC                   00000000 (0)\n+01B6DA Compressed Size       00000000 (0)\n+01B6DE Uncompressed Size     00000000 (0)\n+01B6E2 Filename Length       0005 (5)\n+01B6E4 Extra Length          0009 (9)\n+01B6E6 Filename              'XXXXX'\n+#\n+# WARNING: Offset 0x1B6E6: Filename 'XXXXX'\n+#          Zero length filename\n+#\n+01B6EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01B6ED   Length              0005 (5)\n+01B6EF   Flags               01 (1) 'Modification'\n+01B6F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01B6F4 LOCAL HEADER #13      04034B50 (67324752)\n+01B6F8 Extract Zip Spec      14 (20) '2.0'\n+01B6F9 Extract OS            00 (0) 'MS-DOS'\n+01B6FA General Purpose Flag  0000 (0)\n+01B6FC Compression Method    0000 (0) 'Stored'\n+01B6FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01B702 CRC                   00000000 (0)\n+01B706 Compressed Size       00000000 (0)\n+01B70A Uncompressed Size     00000000 (0)\n+01B70E Filename Length       0015 (21)\n+01B710 Extra Length          0009 (9)\n+01B712 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1B712: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01B727 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01B729   Length              0005 (5)\n+01B72B   Flags               01 (1) 'Modification'\n+01B72C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01B730 LOCAL HEADER #14      04034B50 (67324752)\n+01B734 Extract Zip Spec      14 (20) '2.0'\n+01B735 Extract OS            00 (0) 'MS-DOS'\n+01B736 General Purpose Flag  0000 (0)\n+01B738 Compression Method    0000 (0) 'Stored'\n+01B73A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01B73E CRC                   00000000 (0)\n+01B742 Compressed Size       00000000 (0)\n+01B746 Uncompressed Size     00000000 (0)\n+01B74A Filename Length       0027 (39)\n+01B74C Extra Length          0009 (9)\n+01B74E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1B74E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01B775 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01B777   Length              0005 (5)\n+01B779   Flags               01 (1) 'Modification'\n+01B77A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01B77E LOCAL HEADER #15      04034B50 (67324752)\n+01B782 Extract Zip Spec      14 (20) '2.0'\n+01B783 Extract OS            00 (0) 'MS-DOS'\n+01B784 General Purpose Flag  0000 (0)\n+01B786 Compression Method    0000 (0) 'Stored'\n+01B788 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01B78C CRC                   00000000 (0)\n+01B790 Compressed Size       00000000 (0)\n+01B794 Uncompressed Size     00000000 (0)\n+01B798 Filename Length       002E (46)\n+01B79A Extra Length          0009 (9)\n+01B79C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1B79C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01B7CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01B7CC   Length              0005 (5)\n+01B7CE   Flags               01 (1) 'Modification'\n+01B7CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01B7D3 LOCAL HEADER #16      04034B50 (67324752)\n+01B7D7 Extract Zip Spec      14 (20) '2.0'\n+01B7D8 Extract OS            00 (0) 'MS-DOS'\n+01B7D9 General Purpose Flag  0000 (0)\n+01B7DB Compression Method    0000 (0) 'Stored'\n+01B7DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01B7E1 CRC                   00000000 (0)\n+01B7E5 Compressed Size       00000000 (0)\n+01B7E9 Uncompressed Size     00000000 (0)\n+01B7ED Filename Length       0065 (101)\n+01B7EF Extra Length          0009 (9)\n+01B7F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1B7F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01B856 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01B858   Length              0005 (5)\n+01B85A   Flags               01 (1) 'Modification'\n+01B85B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01B85F LOCAL HEADER #17      04034B50 (67324752)\n+01B863 Extract Zip Spec      14 (20) '2.0'\n+01B864 Extract OS            00 (0) 'MS-DOS'\n+01B865 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01B867 Compression Method    0000 (0) 'Stored'\n+01B869 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01B86D CRC                   00000000 (0)\n+01B871 Compressed Size       00000000 (0)\n+01B875 Uncompressed Size     00000000 (0)\n+01B879 Filename Length       007B (123)\n+01B87B Extra Length          0009 (9)\n+01B87D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1B87D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01B8F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01B8FA   Length              0005 (5)\n+01B8FC   Flags               01 (1) 'Modification'\n+01B8FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01B901 PAYLOAD\n+\n+01C3A3 DATA DESCRIPTOR       08074B50 (134695760)\n+01C3A7 CRC                   9CB4EC6B (2629102699)\n+01C3AB Compressed Size       00000AA2 (2722)\n+01C3AF Uncompressed Size     00000AA2 (2722)\n+\n+01C3B3 LOCAL HEADER #18      04034B50 (67324752)\n+01C3B7 Extract Zip Spec      14 (20) '2.0'\n+01C3B8 Extract OS            00 (0) 'MS-DOS'\n+01C3B9 General Purpose Flag  0000 (0)\n+01C3BB Compression Method    0000 (0) 'Stored'\n+01C3BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01C3C1 CRC                   00000000 (0)\n+01C3C5 Compressed Size       00000000 (0)\n+01C3C9 Uncompressed Size     00000000 (0)\n+01C3CD Filename Length       0025 (37)\n+01C3CF Extra Length          0009 (9)\n+01C3D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1C3D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01C3F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01C3F8   Length              0005 (5)\n+01C3FA   Flags               01 (1) 'Modification'\n+01C3FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01C3FF LOCAL HEADER #19      04034B50 (67324752)\n+01C403 Extract Zip Spec      14 (20) '2.0'\n+01C404 Extract OS            00 (0) 'MS-DOS'\n+01C405 General Purpose Flag  0000 (0)\n+01C407 Compression Method    0000 (0) 'Stored'\n+01C409 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01C40D CRC                   00000000 (0)\n+01C411 Compressed Size       00000000 (0)\n+01C415 Uncompressed Size     00000000 (0)\n+01C419 Filename Length       002C (44)\n+01C41B Extra Length          0009 (9)\n+01C41D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1C41D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01C449 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01C44B   Length              0005 (5)\n+01C44D   Flags               01 (1) 'Modification'\n+01C44E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01C452 LOCAL HEADER #20      04034B50 (67324752)\n+01C456 Extract Zip Spec      14 (20) '2.0'\n+01C457 Extract OS            00 (0) 'MS-DOS'\n+01C458 General Purpose Flag  0000 (0)\n+01C45A Compression Method    0000 (0) 'Stored'\n+01C45C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01C460 CRC                   00000000 (0)\n+01C464 Compressed Size       00000000 (0)\n+01C468 Uncompressed Size     00000000 (0)\n+01C46C Filename Length       0061 (97)\n+01C46E Extra Length          0009 (9)\n+01C470 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1C470: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01C4D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01C4D3   Length              0005 (5)\n+01C4D5   Flags               01 (1) 'Modification'\n+01C4D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01C4DA LOCAL HEADER #21      04034B50 (67324752)\n+01C4DE Extract Zip Spec      14 (20) '2.0'\n+01C4DF Extract OS            00 (0) 'MS-DOS'\n+01C4E0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01C4E2 Compression Method    0000 (0) 'Stored'\n+01C4E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01C4E8 CRC                   00000000 (0)\n+01C4EC Compressed Size       00000000 (0)\n+01C4F0 Uncompressed Size     00000000 (0)\n+01C4F4 Filename Length       0077 (119)\n+01C4F6 Extra Length          0009 (9)\n+01C4F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1C4F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01C56F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01C571   Length              0005 (5)\n+01C573   Flags               01 (1) 'Modification'\n+01C574   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01C578 PAYLOAD\n+\n+01CEBD DATA DESCRIPTOR       08074B50 (134695760)\n+01CEC1 CRC                   1401A9F3 (335653363)\n+01CEC5 Compressed Size       00000945 (2373)\n+01CEC9 Uncompressed Size     00000945 (2373)\n+\n+01CECD LOCAL HEADER #22      04034B50 (67324752)\n+01CED1 Extract Zip Spec      14 (20) '2.0'\n+01CED2 Extract OS            00 (0) 'MS-DOS'\n+01CED3 General Purpose Flag  0000 (0)\n+01CED5 Compression Method    0000 (0) 'Stored'\n+01CED7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01CEDB CRC                   00000000 (0)\n+01CEDF Compressed Size       00000000 (0)\n+01CEE3 Uncompressed Size     00000000 (0)\n+01CEE7 Filename Length       0023 (35)\n+01CEE9 Extra Length          0009 (9)\n+01CEEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1CEEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01CF0E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01CF10   Length              0005 (5)\n+01CF12   Flags               01 (1) 'Modification'\n+01CF13   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01CF17 LOCAL HEADER #23      04034B50 (67324752)\n+01CF1B Extract Zip Spec      14 (20) '2.0'\n+01CF1C Extract OS            00 (0) 'MS-DOS'\n+01CF1D General Purpose Flag  0000 (0)\n+01CF1F Compression Method    0000 (0) 'Stored'\n+01CF21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01CF25 CRC                   00000000 (0)\n+01CF29 Compressed Size       00000000 (0)\n+01CF2D Uncompressed Size     00000000 (0)\n+01CF31 Filename Length       002A (42)\n+01CF33 Extra Length          0009 (9)\n+01CF35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1CF35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01CF5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01CF61   Length              0005 (5)\n+01CF63   Flags               01 (1) 'Modification'\n+01CF64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01CF68 LOCAL HEADER #24      04034B50 (67324752)\n+01CF6C Extract Zip Spec      14 (20) '2.0'\n+01CF6D Extract OS            00 (0) 'MS-DOS'\n+01CF6E General Purpose Flag  0000 (0)\n+01CF70 Compression Method    0000 (0) 'Stored'\n+01CF72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01CF76 CRC                   00000000 (0)\n+01CF7A Compressed Size       00000000 (0)\n+01CF7E Uncompressed Size     00000000 (0)\n+01CF82 Filename Length       0056 (86)\n+01CF84 Extra Length          0009 (9)\n+01CF86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1CF86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01CFDC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01CFDE   Length              0005 (5)\n+01CFE0   Flags               01 (1) 'Modification'\n+01CFE1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01CFE5 LOCAL HEADER #25      04034B50 (67324752)\n+01CFE9 Extract Zip Spec      14 (20) '2.0'\n+01CFEA Extract OS            00 (0) 'MS-DOS'\n+01CFEB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01CFED Compression Method    0000 (0) 'Stored'\n+01CFEF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01CFF3 CRC                   00000000 (0)\n+01CFF7 Compressed Size       00000000 (0)\n+01CFFB Uncompressed Size     00000000 (0)\n+01CFFF Filename Length       006C (108)\n+01D001 Extra Length          0009 (9)\n+01D003 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1D003: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01D06F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01D071   Length              0005 (5)\n+01D073   Flags               01 (1) 'Modification'\n+01D074   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01D078 PAYLOAD\n+\n+01E037 DATA DESCRIPTOR       08074B50 (134695760)\n+01E03B CRC                   445AD7B2 (1146804146)\n+01E03F Compressed Size       00000FBF (4031)\n+01E043 Uncompressed Size     00000FBF (4031)\n+\n+01E047 LOCAL HEADER #26      04034B50 (67324752)\n+01E04B Extract Zip Spec      14 (20) '2.0'\n+01E04C Extract OS            00 (0) 'MS-DOS'\n+01E04D General Purpose Flag  0000 (0)\n+01E04F Compression Method    0000 (0) 'Stored'\n+01E051 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01E055 CRC                   00000000 (0)\n+01E059 Compressed Size       00000000 (0)\n+01E05D Uncompressed Size     00000000 (0)\n+01E061 Filename Length       0056 (86)\n+01E063 Extra Length          0009 (9)\n+01E065 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1E065: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01E0BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01E0BD   Length              0005 (5)\n+01E0BF   Flags               01 (1) 'Modification'\n+01E0C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01E0C4 LOCAL HEADER #27      04034B50 (67324752)\n+01E0C8 Extract Zip Spec      14 (20) '2.0'\n+01E0C9 Extract OS            00 (0) 'MS-DOS'\n+01E0CA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01E0CC Compression Method    0000 (0) 'Stored'\n+01E0CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01E0D2 CRC                   00000000 (0)\n+01E0D6 Compressed Size       00000000 (0)\n+01E0DA Uncompressed Size     00000000 (0)\n+01E0DE Filename Length       006C (108)\n+01E0E0 Extra Length          0009 (9)\n+01E0E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1E0E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01E14E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01E150   Length              0005 (5)\n+01E152   Flags               01 (1) 'Modification'\n+01E153   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01E157 PAYLOAD\n+\n+01F835 DATA DESCRIPTOR       08074B50 (134695760)\n+01F839 CRC                   A2A96EA2 (2729012898)\n+01F83D Compressed Size       000016DE (5854)\n+01F841 Uncompressed Size     000016DE (5854)\n+\n+01F845 LOCAL HEADER #28      04034B50 (67324752)\n+01F849 Extract Zip Spec      14 (20) '2.0'\n+01F84A Extract OS            00 (0) 'MS-DOS'\n+01F84B General Purpose Flag  0000 (0)\n+01F84D Compression Method    0000 (0) 'Stored'\n+01F84F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01F853 CRC                   00000000 (0)\n+01F857 Compressed Size       00000000 (0)\n+01F85B Uncompressed Size     00000000 (0)\n+01F85F Filename Length       002F (47)\n+01F861 Extra Length          0009 (9)\n+01F863 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1F863: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01F892 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01F894   Length              0005 (5)\n+01F896   Flags               01 (1) 'Modification'\n+01F897   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01F89B LOCAL HEADER #29      04034B50 (67324752)\n+01F89F Extract Zip Spec      14 (20) '2.0'\n+01F8A0 Extract OS            00 (0) 'MS-DOS'\n+01F8A1 General Purpose Flag  0000 (0)\n+01F8A3 Compression Method    0000 (0) 'Stored'\n+01F8A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01F8A9 CRC                   00000000 (0)\n+01F8AD Compressed Size       00000000 (0)\n+01F8B1 Uncompressed Size     00000000 (0)\n+01F8B5 Filename Length       0036 (54)\n+01F8B7 Extra Length          0009 (9)\n+01F8B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1F8B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01F8EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01F8F1   Length              0005 (5)\n+01F8F3   Flags               01 (1) 'Modification'\n+01F8F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01F8F8 LOCAL HEADER #30      04034B50 (67324752)\n+01F8FC Extract Zip Spec      14 (20) '2.0'\n+01F8FD Extract OS            00 (0) 'MS-DOS'\n+01F8FE General Purpose Flag  0000 (0)\n+01F900 Compression Method    0000 (0) 'Stored'\n+01F902 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01F906 CRC                   00000000 (0)\n+01F90A Compressed Size       00000000 (0)\n+01F90E Uncompressed Size     00000000 (0)\n+01F912 Filename Length       0066 (102)\n+01F914 Extra Length          0009 (9)\n+01F916 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1F916: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01F97C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01F97E   Length              0005 (5)\n+01F980   Flags               01 (1) 'Modification'\n+01F981   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01F985 LOCAL HEADER #31      04034B50 (67324752)\n+01F989 Extract Zip Spec      14 (20) '2.0'\n+01F98A Extract OS            00 (0) 'MS-DOS'\n+01F98B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01F98D Compression Method    0000 (0) 'Stored'\n+01F98F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01F993 CRC                   00000000 (0)\n+01F997 Compressed Size       00000000 (0)\n+01F99B Uncompressed Size     00000000 (0)\n+01F99F Filename Length       007C (124)\n+01F9A1 Extra Length          0009 (9)\n+01F9A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1F9A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01FA1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01FA21   Length              0005 (5)\n+01FA23   Flags               01 (1) 'Modification'\n+01FA24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01FA28 PAYLOAD\n+\n+020F3A DATA DESCRIPTOR       08074B50 (134695760)\n+020F3E CRC                   7416DF2A (1947655978)\n+020F42 Compressed Size       00001512 (5394)\n+020F46 Uncompressed Size     00001512 (5394)\n+\n+020F4A LOCAL HEADER #32      04034B50 (67324752)\n+020F4E Extract Zip Spec      14 (20) '2.0'\n+020F4F Extract OS            00 (0) 'MS-DOS'\n+020F50 General Purpose Flag  0000 (0)\n+020F52 Compression Method    0000 (0) 'Stored'\n+020F54 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+020F58 CRC                   00000000 (0)\n+020F5C Compressed Size       00000000 (0)\n+020F60 Uncompressed Size     00000000 (0)\n+020F64 Filename Length       0022 (34)\n+020F66 Extra Length          0009 (9)\n+020F68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x20F68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+020F8A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+020F8C   Length              0005 (5)\n+020F8E   Flags               01 (1) 'Modification'\n+020F8F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+020F93 LOCAL HEADER #33      04034B50 (67324752)\n+020F97 Extract Zip Spec      14 (20) '2.0'\n+020F98 Extract OS            00 (0) 'MS-DOS'\n+020F99 General Purpose Flag  0000 (0)\n+020F9B Compression Method    0000 (0) 'Stored'\n+020F9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+020FA1 CRC                   00000000 (0)\n+020FA5 Compressed Size       00000000 (0)\n+020FA9 Uncompressed Size     00000000 (0)\n+020FAD Filename Length       0029 (41)\n+020FAF Extra Length          0009 (9)\n+020FB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x20FB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+020FDA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+020FDC   Length              0005 (5)\n+020FDE   Flags               01 (1) 'Modification'\n+020FDF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+020FE3 LOCAL HEADER #34      04034B50 (67324752)\n+020FE7 Extract Zip Spec      14 (20) '2.0'\n+020FE8 Extract OS            00 (0) 'MS-DOS'\n+020FE9 General Purpose Flag  0000 (0)\n+020FEB Compression Method    0000 (0) 'Stored'\n+020FED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+020FF1 CRC                   00000000 (0)\n+020FF5 Compressed Size       00000000 (0)\n+020FF9 Uncompressed Size     00000000 (0)\n+020FFD Filename Length       0063 (99)\n+020FFF Extra Length          0009 (9)\n+021001 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x21001: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+021064 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+021066   Length              0005 (5)\n+021068   Flags               01 (1) 'Modification'\n+021069   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02106D LOCAL HEADER #35      04034B50 (67324752)\n+021071 Extract Zip Spec      14 (20) '2.0'\n+021072 Extract OS            00 (0) 'MS-DOS'\n+021073 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+021075 Compression Method    0000 (0) 'Stored'\n+021077 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02107B CRC                   00000000 (0)\n+02107F Compressed Size       00000000 (0)\n+021083 Uncompressed Size     00000000 (0)\n+021087 Filename Length       0079 (121)\n+021089 Extra Length          0009 (9)\n+02108B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2108B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+021104 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+021106   Length              0005 (5)\n+021108   Flags               01 (1) 'Modification'\n+021109   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02110D PAYLOAD\n+\n+02409D DATA DESCRIPTOR       08074B50 (134695760)\n+0240A1 CRC                   826E1CC4 (2188254404)\n+0240A5 Compressed Size       00002F90 (12176)\n+0240A9 Uncompressed Size     00002F90 (12176)\n+\n+0240AD LOCAL HEADER #36      04034B50 (67324752)\n+0240B1 Extract Zip Spec      14 (20) '2.0'\n+0240B2 Extract OS            00 (0) 'MS-DOS'\n+0240B3 General Purpose Flag  0000 (0)\n+0240B5 Compression Method    0000 (0) 'Stored'\n+0240B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0240BB CRC                   00000000 (0)\n+0240BF Compressed Size       00000000 (0)\n+0240C3 Uncompressed Size     00000000 (0)\n+0240C7 Filename Length       006C (108)\n+0240C9 Extra Length          0009 (9)\n+0240CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x240CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+024137 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+024139   Length              0005 (5)\n+02413B   Flags               01 (1) 'Modification'\n+02413C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+024140 LOCAL HEADER #37      04034B50 (67324752)\n+024144 Extract Zip Spec      14 (20) '2.0'\n+024145 Extract OS            00 (0) 'MS-DOS'\n+024146 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+024148 Compression Method    0000 (0) 'Stored'\n+02414A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02414E CRC                   00000000 (0)\n+024152 Compressed Size       00000000 (0)\n+024156 Uncompressed Size     00000000 (0)\n+02415A Filename Length       0082 (130)\n+02415C Extra Length          0009 (9)\n+02415E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2415E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0241E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0241E2   Length              0005 (5)\n+0241E4   Flags               01 (1) 'Modification'\n+0241E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0241E9 PAYLOAD\n+\n+024B50 DATA DESCRIPTOR       08074B50 (134695760)\n+024B54 CRC                   1BE163AC (467755948)\n+024B58 Compressed Size       00000967 (2407)\n+024B5C Uncompressed Size     00000967 (2407)\n+\n+024B60 LOCAL HEADER #38      04034B50 (67324752)\n+024B64 Extract Zip Spec      14 (20) '2.0'\n+024B65 Extract OS            00 (0) 'MS-DOS'\n+024B66 General Purpose Flag  0000 (0)\n+024B68 Compression Method    0000 (0) 'Stored'\n+024B6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+024B6E CRC                   00000000 (0)\n+024B72 Compressed Size       00000000 (0)\n+024B76 Uncompressed Size     00000000 (0)\n+024B7A Filename Length       0066 (102)\n+024B7C Extra Length          0009 (9)\n+024B7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x24B7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+024BE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+024BE6   Length              0005 (5)\n+024BE8   Flags               01 (1) 'Modification'\n+024BE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+024BED LOCAL HEADER #39      04034B50 (67324752)\n+024BF1 Extract Zip Spec      14 (20) '2.0'\n+024BF2 Extract OS            00 (0) 'MS-DOS'\n+024BF3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+024BF5 Compression Method    0000 (0) 'Stored'\n+024BF7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+024BFB CRC                   00000000 (0)\n+024BFF Compressed Size       00000000 (0)\n+024C03 Uncompressed Size     00000000 (0)\n+024C07 Filename Length       007C (124)\n+024C09 Extra Length          0009 (9)\n+024C0B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x24C0B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+024C87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+024C89   Length              0005 (5)\n+024C8B   Flags               01 (1) 'Modification'\n+024C8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+024C90 PAYLOAD\n+\n+02549F DATA DESCRIPTOR       08074B50 (134695760)\n+0254A3 CRC                   11DB1110 (299569424)\n+0254A7 Compressed Size       0000080F (2063)\n+0254AB Uncompressed Size     0000080F (2063)\n+\n+0254AF LOCAL HEADER #40      04034B50 (67324752)\n+0254B3 Extract Zip Spec      14 (20) '2.0'\n+0254B4 Extract OS            00 (0) 'MS-DOS'\n+0254B5 General Purpose Flag  0000 (0)\n+0254B7 Compression Method    0000 (0) 'Stored'\n+0254B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0254BD CRC                   00000000 (0)\n+0254C1 Compressed Size       00000000 (0)\n+0254C5 Uncompressed Size     00000000 (0)\n+0254C9 Filename Length       0062 (98)\n+0254CB Extra Length          0009 (9)\n+0254CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x254CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02552F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+025531   Length              0005 (5)\n+025533   Flags               01 (1) 'Modification'\n+025534   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+025538 LOCAL HEADER #41      04034B50 (67324752)\n+02553C Extract Zip Spec      14 (20) '2.0'\n+02553D Extract OS            00 (0) 'MS-DOS'\n+02553E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+025540 Compression Method    0000 (0) 'Stored'\n+025542 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+025546 CRC                   00000000 (0)\n+02554A Compressed Size       00000000 (0)\n+02554E Uncompressed Size     00000000 (0)\n+025552 Filename Length       0078 (120)\n+025554 Extra Length          0009 (9)\n+025556 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x25556: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0255CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0255D0   Length              0005 (5)\n+0255D2   Flags               01 (1) 'Modification'\n+0255D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0255D7 PAYLOAD\n+\n+0261F3 DATA DESCRIPTOR       08074B50 (134695760)\n+0261F7 CRC                   30A69673 (816223859)\n+0261FB Compressed Size       00000C1C (3100)\n+0261FF Uncompressed Size     00000C1C (3100)\n+\n+026203 LOCAL HEADER #42      04034B50 (67324752)\n+026207 Extract Zip Spec      14 (20) '2.0'\n+026208 Extract OS            00 (0) 'MS-DOS'\n+026209 General Purpose Flag  0000 (0)\n+02620B Compression Method    0000 (0) 'Stored'\n+02620D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+026211 CRC                   00000000 (0)\n+026215 Compressed Size       00000000 (0)\n+026219 Uncompressed Size     00000000 (0)\n+02621D Filename Length       006C (108)\n+02621F Extra Length          0009 (9)\n+026221 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x26221: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02628D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02628F   Length              0005 (5)\n+026291   Flags               01 (1) 'Modification'\n+026292   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+026296 LOCAL HEADER #43      04034B50 (67324752)\n+02629A Extract Zip Spec      14 (20) '2.0'\n+02629B Extract OS            00 (0) 'MS-DOS'\n+02629C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02629E Compression Method    0000 (0) 'Stored'\n+0262A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0262A4 CRC                   00000000 (0)\n+0262A8 Compressed Size       00000000 (0)\n+0262AC Uncompressed Size     00000000 (0)\n+0262B0 Filename Length       0082 (130)\n+0262B2 Extra Length          0009 (9)\n+0262B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x262B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+026336 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+026338   Length              0005 (5)\n+02633A   Flags               01 (1) 'Modification'\n+02633B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02633F PAYLOAD\n+\n+026A16 DATA DESCRIPTOR       08074B50 (134695760)\n+026A1A CRC                   0C316B32 (204565298)\n+026A1E Compressed Size       000006D7 (1751)\n+026A22 Uncompressed Size     000006D7 (1751)\n+\n+026A26 LOCAL HEADER #44      04034B50 (67324752)\n+026A2A Extract Zip Spec      14 (20) '2.0'\n+026A2B Extract OS            00 (0) 'MS-DOS'\n+026A2C General Purpose Flag  0000 (0)\n+026A2E Compression Method    0000 (0) 'Stored'\n+026A30 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+026A34 CRC                   00000000 (0)\n+026A38 Compressed Size       00000000 (0)\n+026A3C Uncompressed Size     00000000 (0)\n+026A40 Filename Length       0068 (104)\n+026A42 Extra Length          0009 (9)\n+026A44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x26A44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+026AAC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+026AAE   Length              0005 (5)\n+026AB0   Flags               01 (1) 'Modification'\n+026AB1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+026AB5 LOCAL HEADER #45      04034B50 (67324752)\n+026AB9 Extract Zip Spec      14 (20) '2.0'\n+026ABA Extract OS            00 (0) 'MS-DOS'\n+026ABB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+026ABD Compression Method    0000 (0) 'Stored'\n+026ABF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+026AC3 CRC                   00000000 (0)\n+026AC7 Compressed Size       00000000 (0)\n+026ACB Uncompressed Size     00000000 (0)\n+026ACF Filename Length       007E (126)\n+026AD1 Extra Length          0009 (9)\n+026AD3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x26AD3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+026B51 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+026B53   Length              0005 (5)\n+026B55   Flags               01 (1) 'Modification'\n+026B56   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+026B5A PAYLOAD\n+\n+027E95 DATA DESCRIPTOR       08074B50 (134695760)\n+027E99 CRC                   37BEEC96 (935259286)\n+027E9D Compressed Size       0000133B (4923)\n+027EA1 Uncompressed Size     0000133B (4923)\n+\n+027EA5 LOCAL HEADER #46      04034B50 (67324752)\n+027EA9 Extract Zip Spec      14 (20) '2.0'\n+027EAA Extract OS            00 (0) 'MS-DOS'\n+027EAB General Purpose Flag  0000 (0)\n+027EAD Compression Method    0000 (0) 'Stored'\n+027EAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+027EB3 CRC                   00000000 (0)\n+027EB7 Compressed Size       00000000 (0)\n+027EBB Uncompressed Size     00000000 (0)\n+027EBF Filename Length       0070 (112)\n+027EC1 Extra Length          0009 (9)\n+027EC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x27EC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+027F33 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+027F35   Length              0005 (5)\n+027F37   Flags               01 (1) 'Modification'\n+027F38   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+027F3C LOCAL HEADER #47      04034B50 (67324752)\n+027F40 Extract Zip Spec      14 (20) '2.0'\n+027F41 Extract OS            00 (0) 'MS-DOS'\n+027F42 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+027F44 Compression Method    0000 (0) 'Stored'\n+027F46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+027F4A CRC                   00000000 (0)\n+027F4E Compressed Size       00000000 (0)\n+027F52 Uncompressed Size     00000000 (0)\n+027F56 Filename Length       0086 (134)\n+027F58 Extra Length          0009 (9)\n+027F5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x24592: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x27F5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-024618 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02461A   Length              0005 (5)\n-02461C   Flags               01 (1) 'Modification'\n-02461D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-024621 PAYLOAD\n-\n-024D6D DATA DESCRIPTOR       08074B50 (134695760)\n-024D71 CRC                   D0AE7BE4 (3501095908)\n-024D75 Compressed Size       0000074C (1868)\n-024D79 Uncompressed Size     0000074C (1868)\n-\n-024D7D LOCAL HEADER #48      04034B50 (67324752)\n-024D81 Extract Zip Spec      14 (20) '2.0'\n-024D82 Extract OS            00 (0) 'MS-DOS'\n-024D83 General Purpose Flag  0000 (0)\n-024D85 Compression Method    0000 (0) 'Stored'\n-024D87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-024D8B CRC                   00000000 (0)\n-024D8F Compressed Size       00000000 (0)\n-024D93 Uncompressed Size     00000000 (0)\n-024D97 Filename Length       006C (108)\n-024D99 Extra Length          0009 (9)\n-024D9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x24D9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-024E07 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-024E09   Length              0005 (5)\n-024E0B   Flags               01 (1) 'Modification'\n-024E0C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-024E10 LOCAL HEADER #49      04034B50 (67324752)\n-024E14 Extract Zip Spec      14 (20) '2.0'\n-024E15 Extract OS            00 (0) 'MS-DOS'\n-024E16 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-024E18 Compression Method    0000 (0) 'Stored'\n-024E1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-024E1E CRC                   00000000 (0)\n-024E22 Compressed Size       00000000 (0)\n-024E26 Uncompressed Size     00000000 (0)\n-024E2A Filename Length       0082 (130)\n-024E2C Extra Length          0009 (9)\n-024E2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x24E2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-024EB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-024EB2   Length              0005 (5)\n-024EB4   Flags               01 (1) 'Modification'\n-024EB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-024EB9 PAYLOAD\n-\n-025EF5 DATA DESCRIPTOR       08074B50 (134695760)\n-025EF9 CRC                   4C134CE6 (1276333286)\n-025EFD Compressed Size       0000103C (4156)\n-025F01 Uncompressed Size     0000103C (4156)\n-\n-025F05 LOCAL HEADER #50      04034B50 (67324752)\n-025F09 Extract Zip Spec      14 (20) '2.0'\n-025F0A Extract OS            00 (0) 'MS-DOS'\n-025F0B General Purpose Flag  0000 (0)\n-025F0D Compression Method    0000 (0) 'Stored'\n-025F0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-025F13 CRC                   00000000 (0)\n-025F17 Compressed Size       00000000 (0)\n-025F1B Uncompressed Size     00000000 (0)\n-025F1F Filename Length       006E (110)\n-025F21 Extra Length          0009 (9)\n-025F23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x25F23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-025F91 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-025F93   Length              0005 (5)\n-025F95   Flags               01 (1) 'Modification'\n-025F96   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-025F9A LOCAL HEADER #51      04034B50 (67324752)\n-025F9E Extract Zip Spec      14 (20) '2.0'\n-025F9F Extract OS            00 (0) 'MS-DOS'\n-025FA0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-025FA2 Compression Method    0000 (0) 'Stored'\n-025FA4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-025FA8 CRC                   00000000 (0)\n-025FAC Compressed Size       00000000 (0)\n-025FB0 Uncompressed Size     00000000 (0)\n-025FB4 Filename Length       0084 (132)\n-025FB6 Extra Length          0009 (9)\n-025FB8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+027FE0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+027FE2   Length              0005 (5)\n+027FE4   Flags               01 (1) 'Modification'\n+027FE5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+027FE9 PAYLOAD\n+\n+028735 DATA DESCRIPTOR       08074B50 (134695760)\n+028739 CRC                   D0AE7BE4 (3501095908)\n+02873D Compressed Size       0000074C (1868)\n+028741 Uncompressed Size     0000074C (1868)\n+\n+028745 LOCAL HEADER #48      04034B50 (67324752)\n+028749 Extract Zip Spec      14 (20) '2.0'\n+02874A Extract OS            00 (0) 'MS-DOS'\n+02874B General Purpose Flag  0000 (0)\n+02874D Compression Method    0000 (0) 'Stored'\n+02874F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+028753 CRC                   00000000 (0)\n+028757 Compressed Size       00000000 (0)\n+02875B Uncompressed Size     00000000 (0)\n+02875F Filename Length       006C (108)\n+028761 Extra Length          0009 (9)\n+028763 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x28763: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0287CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0287D1   Length              0005 (5)\n+0287D3   Flags               01 (1) 'Modification'\n+0287D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0287D8 LOCAL HEADER #49      04034B50 (67324752)\n+0287DC Extract Zip Spec      14 (20) '2.0'\n+0287DD Extract OS            00 (0) 'MS-DOS'\n+0287DE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0287E0 Compression Method    0000 (0) 'Stored'\n+0287E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0287E6 CRC                   00000000 (0)\n+0287EA Compressed Size       00000000 (0)\n+0287EE Uncompressed Size     00000000 (0)\n+0287F2 Filename Length       0082 (130)\n+0287F4 Extra Length          0009 (9)\n+0287F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x287F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+028878 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02887A   Length              0005 (5)\n+02887C   Flags               01 (1) 'Modification'\n+02887D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+028881 PAYLOAD\n+\n+0298BD DATA DESCRIPTOR       08074B50 (134695760)\n+0298C1 CRC                   4C134CE6 (1276333286)\n+0298C5 Compressed Size       0000103C (4156)\n+0298C9 Uncompressed Size     0000103C (4156)\n+\n+0298CD LOCAL HEADER #50      04034B50 (67324752)\n+0298D1 Extract Zip Spec      14 (20) '2.0'\n+0298D2 Extract OS            00 (0) 'MS-DOS'\n+0298D3 General Purpose Flag  0000 (0)\n+0298D5 Compression Method    0000 (0) 'Stored'\n+0298D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0298DB CRC                   00000000 (0)\n+0298DF Compressed Size       00000000 (0)\n+0298E3 Uncompressed Size     00000000 (0)\n+0298E7 Filename Length       006E (110)\n+0298E9 Extra Length          0009 (9)\n+0298EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x298EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+029959 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02995B   Length              0005 (5)\n+02995D   Flags               01 (1) 'Modification'\n+02995E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+029962 LOCAL HEADER #51      04034B50 (67324752)\n+029966 Extract Zip Spec      14 (20) '2.0'\n+029967 Extract OS            00 (0) 'MS-DOS'\n+029968 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02996A Compression Method    0000 (0) 'Stored'\n+02996C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+029970 CRC                   00000000 (0)\n+029974 Compressed Size       00000000 (0)\n+029978 Uncompressed Size     00000000 (0)\n+02997C Filename Length       0084 (132)\n+02997E Extra Length          0009 (9)\n+029980 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x25FB8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x29980: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02603C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02603E   Length              0005 (5)\n-026040   Flags               01 (1) 'Modification'\n-026041   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-026045 PAYLOAD\n-\n-02687D DATA DESCRIPTOR       08074B50 (134695760)\n-026881 CRC                   63086228 (1661493800)\n-026885 Compressed Size       00000838 (2104)\n-026889 Uncompressed Size     00000838 (2104)\n-\n-02688D LOCAL HEADER #52      04034B50 (67324752)\n-026891 Extract Zip Spec      14 (20) '2.0'\n-026892 Extract OS            00 (0) 'MS-DOS'\n-026893 General Purpose Flag  0000 (0)\n-026895 Compression Method    0000 (0) 'Stored'\n-026897 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02689B CRC                   00000000 (0)\n-02689F Compressed Size       00000000 (0)\n-0268A3 Uncompressed Size     00000000 (0)\n-0268A7 Filename Length       006A (106)\n-0268A9 Extra Length          0009 (9)\n-0268AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x268AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-026915 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-026917   Length              0005 (5)\n-026919   Flags               01 (1) 'Modification'\n-02691A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02691E LOCAL HEADER #53      04034B50 (67324752)\n-026922 Extract Zip Spec      14 (20) '2.0'\n-026923 Extract OS            00 (0) 'MS-DOS'\n-026924 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-026926 Compression Method    0000 (0) 'Stored'\n-026928 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02692C CRC                   00000000 (0)\n-026930 Compressed Size       00000000 (0)\n-026934 Uncompressed Size     00000000 (0)\n-026938 Filename Length       0080 (128)\n-02693A Extra Length          0009 (9)\n-02693C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2693C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0269BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0269BE   Length              0005 (5)\n-0269C0   Flags               01 (1) 'Modification'\n-0269C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0269C5 PAYLOAD\n-\n-027655 DATA DESCRIPTOR       08074B50 (134695760)\n-027659 CRC                   9EF621C1 (2666930625)\n-02765D Compressed Size       00000C90 (3216)\n-027661 Uncompressed Size     00000C90 (3216)\n-\n-027665 LOCAL HEADER #54      04034B50 (67324752)\n-027669 Extract Zip Spec      14 (20) '2.0'\n-02766A Extract OS            00 (0) 'MS-DOS'\n-02766B General Purpose Flag  0000 (0)\n-02766D Compression Method    0000 (0) 'Stored'\n-02766F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-027673 CRC                   00000000 (0)\n-027677 Compressed Size       00000000 (0)\n-02767B Uncompressed Size     00000000 (0)\n-02767F Filename Length       0052 (82)\n-027681 Extra Length          0009 (9)\n-027683 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x27683: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0276D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0276D7   Length              0005 (5)\n-0276D9   Flags               01 (1) 'Modification'\n-0276DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0276DE LOCAL HEADER #55      04034B50 (67324752)\n-0276E2 Extract Zip Spec      14 (20) '2.0'\n-0276E3 Extract OS            00 (0) 'MS-DOS'\n-0276E4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0276E6 Compression Method    0000 (0) 'Stored'\n-0276E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0276EC CRC                   00000000 (0)\n-0276F0 Compressed Size       00000000 (0)\n-0276F4 Uncompressed Size     00000000 (0)\n-0276F8 Filename Length       0068 (104)\n-0276FA Extra Length          0009 (9)\n-0276FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x276FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-027764 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-027766   Length              0005 (5)\n-027768   Flags               01 (1) 'Modification'\n-027769   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02776D PAYLOAD\n-\n-028663 DATA DESCRIPTOR       08074B50 (134695760)\n-028667 CRC                   6BE0FFE8 (1809907688)\n-02866B Compressed Size       00000EF6 (3830)\n-02866F Uncompressed Size     00000EF6 (3830)\n-\n-028673 LOCAL HEADER #56      04034B50 (67324752)\n-028677 Extract Zip Spec      14 (20) '2.0'\n-028678 Extract OS            00 (0) 'MS-DOS'\n-028679 General Purpose Flag  0000 (0)\n-02867B Compression Method    0000 (0) 'Stored'\n-02867D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-028681 CRC                   00000000 (0)\n-028685 Compressed Size       00000000 (0)\n-028689 Uncompressed Size     00000000 (0)\n-02868D Filename Length       0057 (87)\n-02868F Extra Length          0009 (9)\n-028691 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x28691: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0286E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0286EA   Length              0005 (5)\n-0286EC   Flags               01 (1) 'Modification'\n-0286ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0286F1 LOCAL HEADER #57      04034B50 (67324752)\n-0286F5 Extract Zip Spec      14 (20) '2.0'\n-0286F6 Extract OS            00 (0) 'MS-DOS'\n-0286F7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0286F9 Compression Method    0000 (0) 'Stored'\n-0286FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0286FF CRC                   00000000 (0)\n-028703 Compressed Size       00000000 (0)\n-028707 Uncompressed Size     00000000 (0)\n-02870B Filename Length       006D (109)\n-02870D Extra Length          0009 (9)\n-02870F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2870F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02877C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02877E   Length              0005 (5)\n-028780   Flags               01 (1) 'Modification'\n-028781   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-028785 PAYLOAD\n-\n-028EA0 DATA DESCRIPTOR       08074B50 (134695760)\n-028EA4 CRC                   988DC4AD (2559427757)\n-028EA8 Compressed Size       0000071B (1819)\n-028EAC Uncompressed Size     0000071B (1819)\n-\n-028EB0 LOCAL HEADER #58      04034B50 (67324752)\n-028EB4 Extract Zip Spec      14 (20) '2.0'\n-028EB5 Extract OS            00 (0) 'MS-DOS'\n-028EB6 General Purpose Flag  0000 (0)\n-028EB8 Compression Method    0000 (0) 'Stored'\n-028EBA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-028EBE CRC                   00000000 (0)\n-028EC2 Compressed Size       00000000 (0)\n-028EC6 Uncompressed Size     00000000 (0)\n-028ECA Filename Length       0072 (114)\n-028ECC Extra Length          0009 (9)\n-028ECE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x28ECE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-028F40 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-028F42   Length              0005 (5)\n-028F44   Flags               01 (1) 'Modification'\n-028F45   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-028F49 LOCAL HEADER #59      04034B50 (67324752)\n-028F4D Extract Zip Spec      14 (20) '2.0'\n-028F4E Extract OS            00 (0) 'MS-DOS'\n-028F4F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-028F51 Compression Method    0000 (0) 'Stored'\n-028F53 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-028F57 CRC                   00000000 (0)\n-028F5B Compressed Size       00000000 (0)\n-028F5F Uncompressed Size     00000000 (0)\n-028F63 Filename Length       0088 (136)\n-028F65 Extra Length          0009 (9)\n-028F67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+029A04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+029A06   Length              0005 (5)\n+029A08   Flags               01 (1) 'Modification'\n+029A09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+029A0D PAYLOAD\n+\n+02A245 DATA DESCRIPTOR       08074B50 (134695760)\n+02A249 CRC                   63086228 (1661493800)\n+02A24D Compressed Size       00000838 (2104)\n+02A251 Uncompressed Size     00000838 (2104)\n+\n+02A255 LOCAL HEADER #52      04034B50 (67324752)\n+02A259 Extract Zip Spec      14 (20) '2.0'\n+02A25A Extract OS            00 (0) 'MS-DOS'\n+02A25B General Purpose Flag  0000 (0)\n+02A25D Compression Method    0000 (0) 'Stored'\n+02A25F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02A263 CRC                   00000000 (0)\n+02A267 Compressed Size       00000000 (0)\n+02A26B Uncompressed Size     00000000 (0)\n+02A26F Filename Length       006A (106)\n+02A271 Extra Length          0009 (9)\n+02A273 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2A273: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02A2DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02A2DF   Length              0005 (5)\n+02A2E1   Flags               01 (1) 'Modification'\n+02A2E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02A2E6 LOCAL HEADER #53      04034B50 (67324752)\n+02A2EA Extract Zip Spec      14 (20) '2.0'\n+02A2EB Extract OS            00 (0) 'MS-DOS'\n+02A2EC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02A2EE Compression Method    0000 (0) 'Stored'\n+02A2F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02A2F4 CRC                   00000000 (0)\n+02A2F8 Compressed Size       00000000 (0)\n+02A2FC Uncompressed Size     00000000 (0)\n+02A300 Filename Length       0080 (128)\n+02A302 Extra Length          0009 (9)\n+02A304 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2A304: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02A384 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02A386   Length              0005 (5)\n+02A388   Flags               01 (1) 'Modification'\n+02A389   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02A38D PAYLOAD\n+\n+02B01D DATA DESCRIPTOR       08074B50 (134695760)\n+02B021 CRC                   9EF621C1 (2666930625)\n+02B025 Compressed Size       00000C90 (3216)\n+02B029 Uncompressed Size     00000C90 (3216)\n+\n+02B02D LOCAL HEADER #54      04034B50 (67324752)\n+02B031 Extract Zip Spec      14 (20) '2.0'\n+02B032 Extract OS            00 (0) 'MS-DOS'\n+02B033 General Purpose Flag  0000 (0)\n+02B035 Compression Method    0000 (0) 'Stored'\n+02B037 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02B03B CRC                   00000000 (0)\n+02B03F Compressed Size       00000000 (0)\n+02B043 Uncompressed Size     00000000 (0)\n+02B047 Filename Length       0052 (82)\n+02B049 Extra Length          0009 (9)\n+02B04B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2B04B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02B09D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02B09F   Length              0005 (5)\n+02B0A1   Flags               01 (1) 'Modification'\n+02B0A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02B0A6 LOCAL HEADER #55      04034B50 (67324752)\n+02B0AA Extract Zip Spec      14 (20) '2.0'\n+02B0AB Extract OS            00 (0) 'MS-DOS'\n+02B0AC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02B0AE Compression Method    0000 (0) 'Stored'\n+02B0B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02B0B4 CRC                   00000000 (0)\n+02B0B8 Compressed Size       00000000 (0)\n+02B0BC Uncompressed Size     00000000 (0)\n+02B0C0 Filename Length       0068 (104)\n+02B0C2 Extra Length          0009 (9)\n+02B0C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2B0C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02B12C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02B12E   Length              0005 (5)\n+02B130   Flags               01 (1) 'Modification'\n+02B131   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02B135 PAYLOAD\n+\n+02C02B DATA DESCRIPTOR       08074B50 (134695760)\n+02C02F CRC                   6BE0FFE8 (1809907688)\n+02C033 Compressed Size       00000EF6 (3830)\n+02C037 Uncompressed Size     00000EF6 (3830)\n+\n+02C03B LOCAL HEADER #56      04034B50 (67324752)\n+02C03F Extract Zip Spec      14 (20) '2.0'\n+02C040 Extract OS            00 (0) 'MS-DOS'\n+02C041 General Purpose Flag  0000 (0)\n+02C043 Compression Method    0000 (0) 'Stored'\n+02C045 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02C049 CRC                   00000000 (0)\n+02C04D Compressed Size       00000000 (0)\n+02C051 Uncompressed Size     00000000 (0)\n+02C055 Filename Length       0057 (87)\n+02C057 Extra Length          0009 (9)\n+02C059 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2C059: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02C0B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02C0B2   Length              0005 (5)\n+02C0B4   Flags               01 (1) 'Modification'\n+02C0B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02C0B9 LOCAL HEADER #57      04034B50 (67324752)\n+02C0BD Extract Zip Spec      14 (20) '2.0'\n+02C0BE Extract OS            00 (0) 'MS-DOS'\n+02C0BF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02C0C1 Compression Method    0000 (0) 'Stored'\n+02C0C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02C0C7 CRC                   00000000 (0)\n+02C0CB Compressed Size       00000000 (0)\n+02C0CF Uncompressed Size     00000000 (0)\n+02C0D3 Filename Length       006D (109)\n+02C0D5 Extra Length          0009 (9)\n+02C0D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2C0D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02C144 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02C146   Length              0005 (5)\n+02C148   Flags               01 (1) 'Modification'\n+02C149   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02C14D PAYLOAD\n+\n+02C868 DATA DESCRIPTOR       08074B50 (134695760)\n+02C86C CRC                   988DC4AD (2559427757)\n+02C870 Compressed Size       0000071B (1819)\n+02C874 Uncompressed Size     0000071B (1819)\n+\n+02C878 LOCAL HEADER #58      04034B50 (67324752)\n+02C87C Extract Zip Spec      14 (20) '2.0'\n+02C87D Extract OS            00 (0) 'MS-DOS'\n+02C87E General Purpose Flag  0000 (0)\n+02C880 Compression Method    0000 (0) 'Stored'\n+02C882 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02C886 CRC                   00000000 (0)\n+02C88A Compressed Size       00000000 (0)\n+02C88E Uncompressed Size     00000000 (0)\n+02C892 Filename Length       0072 (114)\n+02C894 Extra Length          0009 (9)\n+02C896 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2C896: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02C908 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02C90A   Length              0005 (5)\n+02C90C   Flags               01 (1) 'Modification'\n+02C90D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02C911 LOCAL HEADER #59      04034B50 (67324752)\n+02C915 Extract Zip Spec      14 (20) '2.0'\n+02C916 Extract OS            00 (0) 'MS-DOS'\n+02C917 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02C919 Compression Method    0000 (0) 'Stored'\n+02C91B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02C91F CRC                   00000000 (0)\n+02C923 Compressed Size       00000000 (0)\n+02C927 Uncompressed Size     00000000 (0)\n+02C92B Filename Length       0088 (136)\n+02C92D Extra Length          0009 (9)\n+02C92F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x28F67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2C92F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-028FEF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-028FF1   Length              0005 (5)\n-028FF3   Flags               01 (1) 'Modification'\n-028FF4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-028FF8 PAYLOAD\n-\n-029C21 DATA DESCRIPTOR       08074B50 (134695760)\n-029C25 CRC                   07A59EC9 (128294601)\n-029C29 Compressed Size       00000C29 (3113)\n-029C2D Uncompressed Size     00000C29 (3113)\n-\n-029C31 LOCAL HEADER #60      04034B50 (67324752)\n-029C35 Extract Zip Spec      14 (20) '2.0'\n-029C36 Extract OS            00 (0) 'MS-DOS'\n-029C37 General Purpose Flag  0000 (0)\n-029C39 Compression Method    0000 (0) 'Stored'\n-029C3B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029C3F CRC                   00000000 (0)\n-029C43 Compressed Size       00000000 (0)\n-029C47 Uncompressed Size     00000000 (0)\n-029C4B Filename Length       0024 (36)\n-029C4D Extra Length          0009 (9)\n-029C4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29C4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-029C73 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029C75   Length              0005 (5)\n-029C77   Flags               01 (1) 'Modification'\n-029C78   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-029C7C LOCAL HEADER #61      04034B50 (67324752)\n-029C80 Extract Zip Spec      14 (20) '2.0'\n-029C81 Extract OS            00 (0) 'MS-DOS'\n-029C82 General Purpose Flag  0000 (0)\n-029C84 Compression Method    0000 (0) 'Stored'\n-029C86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029C8A CRC                   00000000 (0)\n-029C8E Compressed Size       00000000 (0)\n-029C92 Uncompressed Size     00000000 (0)\n-029C96 Filename Length       002B (43)\n-029C98 Extra Length          0009 (9)\n-029C9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29C9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-029CC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029CC7   Length              0005 (5)\n-029CC9   Flags               01 (1) 'Modification'\n-029CCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-029CCE LOCAL HEADER #62      04034B50 (67324752)\n-029CD2 Extract Zip Spec      14 (20) '2.0'\n-029CD3 Extract OS            00 (0) 'MS-DOS'\n-029CD4 General Purpose Flag  0000 (0)\n-029CD6 Compression Method    0000 (0) 'Stored'\n-029CD8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029CDC CRC                   00000000 (0)\n-029CE0 Compressed Size       00000000 (0)\n-029CE4 Uncompressed Size     00000000 (0)\n-029CE8 Filename Length       006C (108)\n-029CEA Extra Length          0009 (9)\n-029CEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29CEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-029D58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029D5A   Length              0005 (5)\n-029D5C   Flags               01 (1) 'Modification'\n-029D5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-029D61 LOCAL HEADER #63      04034B50 (67324752)\n-029D65 Extract Zip Spec      14 (20) '2.0'\n-029D66 Extract OS            00 (0) 'MS-DOS'\n-029D67 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-029D69 Compression Method    0000 (0) 'Stored'\n-029D6B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029D6F CRC                   00000000 (0)\n-029D73 Compressed Size       00000000 (0)\n-029D77 Uncompressed Size     00000000 (0)\n-029D7B Filename Length       0082 (130)\n-029D7D Extra Length          0009 (9)\n-029D7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29D7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-029E01 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029E03   Length              0005 (5)\n-029E05   Flags               01 (1) 'Modification'\n-029E06   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-029E0A PAYLOAD\n-\n-02AC50 DATA DESCRIPTOR       08074B50 (134695760)\n-02AC54 CRC                   63D24DDE (1674726878)\n-02AC58 Compressed Size       00000E46 (3654)\n-02AC5C Uncompressed Size     00000E46 (3654)\n-\n-02AC60 LOCAL HEADER #64      04034B50 (67324752)\n-02AC64 Extract Zip Spec      14 (20) '2.0'\n-02AC65 Extract OS            00 (0) 'MS-DOS'\n-02AC66 General Purpose Flag  0000 (0)\n-02AC68 Compression Method    0000 (0) 'Stored'\n-02AC6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02AC6E CRC                   00000000 (0)\n-02AC72 Compressed Size       00000000 (0)\n-02AC76 Uncompressed Size     00000000 (0)\n-02AC7A Filename Length       0073 (115)\n-02AC7C Extra Length          0009 (9)\n-02AC7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2AC7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02ACF1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02ACF3   Length              0005 (5)\n-02ACF5   Flags               01 (1) 'Modification'\n-02ACF6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02ACFA LOCAL HEADER #65      04034B50 (67324752)\n-02ACFE Extract Zip Spec      14 (20) '2.0'\n-02ACFF Extract OS            00 (0) 'MS-DOS'\n-02AD00 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02AD02 Compression Method    0000 (0) 'Stored'\n-02AD04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02AD08 CRC                   00000000 (0)\n-02AD0C Compressed Size       00000000 (0)\n-02AD10 Uncompressed Size     00000000 (0)\n-02AD14 Filename Length       0089 (137)\n-02AD16 Extra Length          0009 (9)\n-02AD18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02C9B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02C9B9   Length              0005 (5)\n+02C9BB   Flags               01 (1) 'Modification'\n+02C9BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02C9C0 PAYLOAD\n+\n+02D5E9 DATA DESCRIPTOR       08074B50 (134695760)\n+02D5ED CRC                   07A59EC9 (128294601)\n+02D5F1 Compressed Size       00000C29 (3113)\n+02D5F5 Uncompressed Size     00000C29 (3113)\n+\n+02D5F9 LOCAL HEADER #60      04034B50 (67324752)\n+02D5FD Extract Zip Spec      14 (20) '2.0'\n+02D5FE Extract OS            00 (0) 'MS-DOS'\n+02D5FF General Purpose Flag  0000 (0)\n+02D601 Compression Method    0000 (0) 'Stored'\n+02D603 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02D607 CRC                   00000000 (0)\n+02D60B Compressed Size       00000000 (0)\n+02D60F Uncompressed Size     00000000 (0)\n+02D613 Filename Length       0024 (36)\n+02D615 Extra Length          0009 (9)\n+02D617 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2D617: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02D63B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02D63D   Length              0005 (5)\n+02D63F   Flags               01 (1) 'Modification'\n+02D640   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02D644 LOCAL HEADER #61      04034B50 (67324752)\n+02D648 Extract Zip Spec      14 (20) '2.0'\n+02D649 Extract OS            00 (0) 'MS-DOS'\n+02D64A General Purpose Flag  0000 (0)\n+02D64C Compression Method    0000 (0) 'Stored'\n+02D64E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02D652 CRC                   00000000 (0)\n+02D656 Compressed Size       00000000 (0)\n+02D65A Uncompressed Size     00000000 (0)\n+02D65E Filename Length       002B (43)\n+02D660 Extra Length          0009 (9)\n+02D662 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2D662: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02D68D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02D68F   Length              0005 (5)\n+02D691   Flags               01 (1) 'Modification'\n+02D692   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02D696 LOCAL HEADER #62      04034B50 (67324752)\n+02D69A Extract Zip Spec      14 (20) '2.0'\n+02D69B Extract OS            00 (0) 'MS-DOS'\n+02D69C General Purpose Flag  0000 (0)\n+02D69E Compression Method    0000 (0) 'Stored'\n+02D6A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02D6A4 CRC                   00000000 (0)\n+02D6A8 Compressed Size       00000000 (0)\n+02D6AC Uncompressed Size     00000000 (0)\n+02D6B0 Filename Length       006C (108)\n+02D6B2 Extra Length          0009 (9)\n+02D6B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2D6B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02D720 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02D722   Length              0005 (5)\n+02D724   Flags               01 (1) 'Modification'\n+02D725   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02D729 LOCAL HEADER #63      04034B50 (67324752)\n+02D72D Extract Zip Spec      14 (20) '2.0'\n+02D72E Extract OS            00 (0) 'MS-DOS'\n+02D72F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02D731 Compression Method    0000 (0) 'Stored'\n+02D733 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02D737 CRC                   00000000 (0)\n+02D73B Compressed Size       00000000 (0)\n+02D73F Uncompressed Size     00000000 (0)\n+02D743 Filename Length       0082 (130)\n+02D745 Extra Length          0009 (9)\n+02D747 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2D747: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02D7C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02D7CB   Length              0005 (5)\n+02D7CD   Flags               01 (1) 'Modification'\n+02D7CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02D7D2 PAYLOAD\n+\n+02E618 DATA DESCRIPTOR       08074B50 (134695760)\n+02E61C CRC                   63D24DDE (1674726878)\n+02E620 Compressed Size       00000E46 (3654)\n+02E624 Uncompressed Size     00000E46 (3654)\n+\n+02E628 LOCAL HEADER #64      04034B50 (67324752)\n+02E62C Extract Zip Spec      14 (20) '2.0'\n+02E62D Extract OS            00 (0) 'MS-DOS'\n+02E62E General Purpose Flag  0000 (0)\n+02E630 Compression Method    0000 (0) 'Stored'\n+02E632 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02E636 CRC                   00000000 (0)\n+02E63A Compressed Size       00000000 (0)\n+02E63E Uncompressed Size     00000000 (0)\n+02E642 Filename Length       0073 (115)\n+02E644 Extra Length          0009 (9)\n+02E646 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E646: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02E6B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02E6BB   Length              0005 (5)\n+02E6BD   Flags               01 (1) 'Modification'\n+02E6BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02E6C2 LOCAL HEADER #65      04034B50 (67324752)\n+02E6C6 Extract Zip Spec      14 (20) '2.0'\n+02E6C7 Extract OS            00 (0) 'MS-DOS'\n+02E6C8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02E6CA Compression Method    0000 (0) 'Stored'\n+02E6CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02E6D0 CRC                   00000000 (0)\n+02E6D4 Compressed Size       00000000 (0)\n+02E6D8 Uncompressed Size     00000000 (0)\n+02E6DC Filename Length       0089 (137)\n+02E6DE Extra Length          0009 (9)\n+02E6E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXX'\n #\n-# WARNING: Offset 0x2AD18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2E6E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02ADA1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02ADA3   Length              0005 (5)\n-02ADA5   Flags               01 (1) 'Modification'\n-02ADA6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02ADAA PAYLOAD\n-\n-02B632 DATA DESCRIPTOR       08074B50 (134695760)\n-02B636 CRC                   2E17013D (773259581)\n-02B63A Compressed Size       00000888 (2184)\n-02B63E Uncompressed Size     00000888 (2184)\n-\n-02B642 LOCAL HEADER #66      04034B50 (67324752)\n-02B646 Extract Zip Spec      14 (20) '2.0'\n-02B647 Extract OS            00 (0) 'MS-DOS'\n-02B648 General Purpose Flag  0000 (0)\n-02B64A Compression Method    0000 (0) 'Stored'\n-02B64C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02B650 CRC                   00000000 (0)\n-02B654 Compressed Size       00000000 (0)\n-02B658 Uncompressed Size     00000000 (0)\n-02B65C Filename Length       0022 (34)\n-02B65E Extra Length          0009 (9)\n-02B660 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2B660: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02B682 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02B684   Length              0005 (5)\n-02B686   Flags               01 (1) 'Modification'\n-02B687   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02B68B LOCAL HEADER #67      04034B50 (67324752)\n-02B68F Extract Zip Spec      14 (20) '2.0'\n-02B690 Extract OS            00 (0) 'MS-DOS'\n-02B691 General Purpose Flag  0000 (0)\n-02B693 Compression Method    0000 (0) 'Stored'\n-02B695 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02B699 CRC                   00000000 (0)\n-02B69D Compressed Size       00000000 (0)\n-02B6A1 Uncompressed Size     00000000 (0)\n-02B6A5 Filename Length       0029 (41)\n-02B6A7 Extra Length          0009 (9)\n-02B6A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2B6A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02B6D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02B6D4   Length              0005 (5)\n-02B6D6   Flags               01 (1) 'Modification'\n-02B6D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02B6DB LOCAL HEADER #68      04034B50 (67324752)\n-02B6DF Extract Zip Spec      14 (20) '2.0'\n-02B6E0 Extract OS            00 (0) 'MS-DOS'\n-02B6E1 General Purpose Flag  0000 (0)\n-02B6E3 Compression Method    0000 (0) 'Stored'\n-02B6E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02B6E9 CRC                   00000000 (0)\n-02B6ED Compressed Size       00000000 (0)\n-02B6F1 Uncompressed Size     00000000 (0)\n-02B6F5 Filename Length       0055 (85)\n-02B6F7 Extra Length          0009 (9)\n-02B6F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2B6F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02B74E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02B750   Length              0005 (5)\n-02B752   Flags               01 (1) 'Modification'\n-02B753   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02B757 LOCAL HEADER #69      04034B50 (67324752)\n-02B75B Extract Zip Spec      14 (20) '2.0'\n-02B75C Extract OS            00 (0) 'MS-DOS'\n-02B75D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02B75F Compression Method    0000 (0) 'Stored'\n-02B761 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02B765 CRC                   00000000 (0)\n-02B769 Compressed Size       00000000 (0)\n-02B76D Uncompressed Size     00000000 (0)\n-02B771 Filename Length       006B (107)\n-02B773 Extra Length          0009 (9)\n-02B775 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2B775: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02B7E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02B7E2   Length              0005 (5)\n-02B7E4   Flags               01 (1) 'Modification'\n-02B7E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02B7E9 PAYLOAD\n-\n-02BEF4 DATA DESCRIPTOR       08074B50 (134695760)\n-02BEF8 CRC                   C1E5A225 (3253051941)\n-02BEFC Compressed Size       0000070B (1803)\n-02BF00 Uncompressed Size     0000070B (1803)\n-\n-02BF04 LOCAL HEADER #70      04034B50 (67324752)\n-02BF08 Extract Zip Spec      14 (20) '2.0'\n-02BF09 Extract OS            00 (0) 'MS-DOS'\n-02BF0A General Purpose Flag  0000 (0)\n-02BF0C Compression Method    0000 (0) 'Stored'\n-02BF0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02BF12 CRC                   00000000 (0)\n-02BF16 Compressed Size       00000000 (0)\n-02BF1A Uncompressed Size     00000000 (0)\n-02BF1E Filename Length       0054 (84)\n-02BF20 Extra Length          0009 (9)\n-02BF22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2BF22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02BF76 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02BF78   Length              0005 (5)\n-02BF7A   Flags               01 (1) 'Modification'\n-02BF7B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02BF7F LOCAL HEADER #71      04034B50 (67324752)\n-02BF83 Extract Zip Spec      14 (20) '2.0'\n-02BF84 Extract OS            00 (0) 'MS-DOS'\n-02BF85 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02BF87 Compression Method    0000 (0) 'Stored'\n-02BF89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02BF8D CRC                   00000000 (0)\n-02BF91 Compressed Size       00000000 (0)\n-02BF95 Uncompressed Size     00000000 (0)\n-02BF99 Filename Length       006A (106)\n-02BF9B Extra Length          0009 (9)\n-02BF9D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2BF9D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02C007 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02C009   Length              0005 (5)\n-02C00B   Flags               01 (1) 'Modification'\n-02C00C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02C010 PAYLOAD\n-\n-02C65D DATA DESCRIPTOR       08074B50 (134695760)\n-02C661 CRC                   8950733E (2303750974)\n-02C665 Compressed Size       0000064D (1613)\n-02C669 Uncompressed Size     0000064D (1613)\n-\n-02C66D LOCAL HEADER #72      04034B50 (67324752)\n-02C671 Extract Zip Spec      14 (20) '2.0'\n-02C672 Extract OS            00 (0) 'MS-DOS'\n-02C673 General Purpose Flag  0000 (0)\n-02C675 Compression Method    0000 (0) 'Stored'\n-02C677 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02C67B CRC                   00000000 (0)\n-02C67F Compressed Size       00000000 (0)\n-02C683 Uncompressed Size     00000000 (0)\n-02C687 Filename Length       0053 (83)\n-02C689 Extra Length          0009 (9)\n-02C68B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2C68B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02C6DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02C6E0   Length              0005 (5)\n-02C6E2   Flags               01 (1) 'Modification'\n-02C6E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02C6E7 LOCAL HEADER #73      04034B50 (67324752)\n-02C6EB Extract Zip Spec      14 (20) '2.0'\n-02C6EC Extract OS            00 (0) 'MS-DOS'\n-02C6ED General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02C6EF Compression Method    0000 (0) 'Stored'\n-02C6F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02C6F5 CRC                   00000000 (0)\n-02C6F9 Compressed Size       00000000 (0)\n-02C6FD Uncompressed Size     00000000 (0)\n-02C701 Filename Length       0069 (105)\n-02C703 Extra Length          0009 (9)\n-02C705 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2C705: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02C76E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02C770   Length              0005 (5)\n-02C772   Flags               01 (1) 'Modification'\n-02C773   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02C777 PAYLOAD\n-\n-02CDBA DATA DESCRIPTOR       08074B50 (134695760)\n-02CDBE CRC                   A0157ABE (2685762238)\n-02CDC2 Compressed Size       00000643 (1603)\n-02CDC6 Uncompressed Size     00000643 (1603)\n-\n-02CDCA LOCAL HEADER #74      04034B50 (67324752)\n-02CDCE Extract Zip Spec      14 (20) '2.0'\n-02CDCF Extract OS            00 (0) 'MS-DOS'\n-02CDD0 General Purpose Flag  0000 (0)\n-02CDD2 Compression Method    0000 (0) 'Stored'\n-02CDD4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02CDD8 CRC                   00000000 (0)\n-02CDDC Compressed Size       00000000 (0)\n-02CDE0 Uncompressed Size     00000000 (0)\n-02CDE4 Filename Length       002B (43)\n-02CDE6 Extra Length          0009 (9)\n-02CDE8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CDE8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02CE13 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02CE15   Length              0005 (5)\n-02CE17   Flags               01 (1) 'Modification'\n-02CE18   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02CE1C LOCAL HEADER #75      04034B50 (67324752)\n-02CE20 Extract Zip Spec      14 (20) '2.0'\n-02CE21 Extract OS            00 (0) 'MS-DOS'\n-02CE22 General Purpose Flag  0000 (0)\n-02CE24 Compression Method    0000 (0) 'Stored'\n-02CE26 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02CE2A CRC                   00000000 (0)\n-02CE2E Compressed Size       00000000 (0)\n-02CE32 Uncompressed Size     00000000 (0)\n-02CE36 Filename Length       0032 (50)\n-02CE38 Extra Length          0009 (9)\n-02CE3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CE3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02CE6C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02CE6E   Length              0005 (5)\n-02CE70   Flags               01 (1) 'Modification'\n-02CE71   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02CE75 LOCAL HEADER #76      04034B50 (67324752)\n-02CE79 Extract Zip Spec      14 (20) '2.0'\n-02CE7A Extract OS            00 (0) 'MS-DOS'\n-02CE7B General Purpose Flag  0000 (0)\n-02CE7D Compression Method    0000 (0) 'Stored'\n-02CE7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02CE83 CRC                   00000000 (0)\n-02CE87 Compressed Size       00000000 (0)\n-02CE8B Uncompressed Size     00000000 (0)\n-02CE8F Filename Length       0079 (121)\n-02CE91 Extra Length          0009 (9)\n-02CE93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CE93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02CF0C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02CF0E   Length              0005 (5)\n-02CF10   Flags               01 (1) 'Modification'\n-02CF11   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02CF15 LOCAL HEADER #77      04034B50 (67324752)\n-02CF19 Extract Zip Spec      14 (20) '2.0'\n-02CF1A Extract OS            00 (0) 'MS-DOS'\n-02CF1B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02CF1D Compression Method    0000 (0) 'Stored'\n-02CF1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02CF23 CRC                   00000000 (0)\n-02CF27 Compressed Size       00000000 (0)\n-02CF2B Uncompressed Size     00000000 (0)\n-02CF2F Filename Length       008F (143)\n-02CF31 Extra Length          0009 (9)\n-02CF33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02E769 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02E76B   Length              0005 (5)\n+02E76D   Flags               01 (1) 'Modification'\n+02E76E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02E772 PAYLOAD\n+\n+02EFFA DATA DESCRIPTOR       08074B50 (134695760)\n+02EFFE CRC                   2E17013D (773259581)\n+02F002 Compressed Size       00000888 (2184)\n+02F006 Uncompressed Size     00000888 (2184)\n+\n+02F00A LOCAL HEADER #66      04034B50 (67324752)\n+02F00E Extract Zip Spec      14 (20) '2.0'\n+02F00F Extract OS            00 (0) 'MS-DOS'\n+02F010 General Purpose Flag  0000 (0)\n+02F012 Compression Method    0000 (0) 'Stored'\n+02F014 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02F018 CRC                   00000000 (0)\n+02F01C Compressed Size       00000000 (0)\n+02F020 Uncompressed Size     00000000 (0)\n+02F024 Filename Length       0022 (34)\n+02F026 Extra Length          0009 (9)\n+02F028 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F028: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02F04A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02F04C   Length              0005 (5)\n+02F04E   Flags               01 (1) 'Modification'\n+02F04F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02F053 LOCAL HEADER #67      04034B50 (67324752)\n+02F057 Extract Zip Spec      14 (20) '2.0'\n+02F058 Extract OS            00 (0) 'MS-DOS'\n+02F059 General Purpose Flag  0000 (0)\n+02F05B Compression Method    0000 (0) 'Stored'\n+02F05D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02F061 CRC                   00000000 (0)\n+02F065 Compressed Size       00000000 (0)\n+02F069 Uncompressed Size     00000000 (0)\n+02F06D Filename Length       0029 (41)\n+02F06F Extra Length          0009 (9)\n+02F071 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F071: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02F09A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02F09C   Length              0005 (5)\n+02F09E   Flags               01 (1) 'Modification'\n+02F09F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02F0A3 LOCAL HEADER #68      04034B50 (67324752)\n+02F0A7 Extract Zip Spec      14 (20) '2.0'\n+02F0A8 Extract OS            00 (0) 'MS-DOS'\n+02F0A9 General Purpose Flag  0000 (0)\n+02F0AB Compression Method    0000 (0) 'Stored'\n+02F0AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02F0B1 CRC                   00000000 (0)\n+02F0B5 Compressed Size       00000000 (0)\n+02F0B9 Uncompressed Size     00000000 (0)\n+02F0BD Filename Length       0055 (85)\n+02F0BF Extra Length          0009 (9)\n+02F0C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F0C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02F116 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02F118   Length              0005 (5)\n+02F11A   Flags               01 (1) 'Modification'\n+02F11B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02F11F LOCAL HEADER #69      04034B50 (67324752)\n+02F123 Extract Zip Spec      14 (20) '2.0'\n+02F124 Extract OS            00 (0) 'MS-DOS'\n+02F125 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02F127 Compression Method    0000 (0) 'Stored'\n+02F129 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02F12D CRC                   00000000 (0)\n+02F131 Compressed Size       00000000 (0)\n+02F135 Uncompressed Size     00000000 (0)\n+02F139 Filename Length       006B (107)\n+02F13B Extra Length          0009 (9)\n+02F13D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F13D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02F1A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02F1AA   Length              0005 (5)\n+02F1AC   Flags               01 (1) 'Modification'\n+02F1AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02F1B1 PAYLOAD\n+\n+02F8BC DATA DESCRIPTOR       08074B50 (134695760)\n+02F8C0 CRC                   C1E5A225 (3253051941)\n+02F8C4 Compressed Size       0000070B (1803)\n+02F8C8 Uncompressed Size     0000070B (1803)\n+\n+02F8CC LOCAL HEADER #70      04034B50 (67324752)\n+02F8D0 Extract Zip Spec      14 (20) '2.0'\n+02F8D1 Extract OS            00 (0) 'MS-DOS'\n+02F8D2 General Purpose Flag  0000 (0)\n+02F8D4 Compression Method    0000 (0) 'Stored'\n+02F8D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02F8DA CRC                   00000000 (0)\n+02F8DE Compressed Size       00000000 (0)\n+02F8E2 Uncompressed Size     00000000 (0)\n+02F8E6 Filename Length       0054 (84)\n+02F8E8 Extra Length          0009 (9)\n+02F8EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F8EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02F93E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02F940   Length              0005 (5)\n+02F942   Flags               01 (1) 'Modification'\n+02F943   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02F947 LOCAL HEADER #71      04034B50 (67324752)\n+02F94B Extract Zip Spec      14 (20) '2.0'\n+02F94C Extract OS            00 (0) 'MS-DOS'\n+02F94D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02F94F Compression Method    0000 (0) 'Stored'\n+02F951 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02F955 CRC                   00000000 (0)\n+02F959 Compressed Size       00000000 (0)\n+02F95D Uncompressed Size     00000000 (0)\n+02F961 Filename Length       006A (106)\n+02F963 Extra Length          0009 (9)\n+02F965 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F965: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02F9CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02F9D1   Length              0005 (5)\n+02F9D3   Flags               01 (1) 'Modification'\n+02F9D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02F9D8 PAYLOAD\n+\n+030025 DATA DESCRIPTOR       08074B50 (134695760)\n+030029 CRC                   8950733E (2303750974)\n+03002D Compressed Size       0000064D (1613)\n+030031 Uncompressed Size     0000064D (1613)\n+\n+030035 LOCAL HEADER #72      04034B50 (67324752)\n+030039 Extract Zip Spec      14 (20) '2.0'\n+03003A Extract OS            00 (0) 'MS-DOS'\n+03003B General Purpose Flag  0000 (0)\n+03003D Compression Method    0000 (0) 'Stored'\n+03003F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+030043 CRC                   00000000 (0)\n+030047 Compressed Size       00000000 (0)\n+03004B Uncompressed Size     00000000 (0)\n+03004F Filename Length       0053 (83)\n+030051 Extra Length          0009 (9)\n+030053 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x30053: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0300A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0300A8   Length              0005 (5)\n+0300AA   Flags               01 (1) 'Modification'\n+0300AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0300AF LOCAL HEADER #73      04034B50 (67324752)\n+0300B3 Extract Zip Spec      14 (20) '2.0'\n+0300B4 Extract OS            00 (0) 'MS-DOS'\n+0300B5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0300B7 Compression Method    0000 (0) 'Stored'\n+0300B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0300BD CRC                   00000000 (0)\n+0300C1 Compressed Size       00000000 (0)\n+0300C5 Uncompressed Size     00000000 (0)\n+0300C9 Filename Length       0069 (105)\n+0300CB Extra Length          0009 (9)\n+0300CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x300CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+030136 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+030138   Length              0005 (5)\n+03013A   Flags               01 (1) 'Modification'\n+03013B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03013F PAYLOAD\n+\n+030782 DATA DESCRIPTOR       08074B50 (134695760)\n+030786 CRC                   A0157ABE (2685762238)\n+03078A Compressed Size       00000643 (1603)\n+03078E Uncompressed Size     00000643 (1603)\n+\n+030792 LOCAL HEADER #74      04034B50 (67324752)\n+030796 Extract Zip Spec      14 (20) '2.0'\n+030797 Extract OS            00 (0) 'MS-DOS'\n+030798 General Purpose Flag  0000 (0)\n+03079A Compression Method    0000 (0) 'Stored'\n+03079C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0307A0 CRC                   00000000 (0)\n+0307A4 Compressed Size       00000000 (0)\n+0307A8 Uncompressed Size     00000000 (0)\n+0307AC Filename Length       002B (43)\n+0307AE Extra Length          0009 (9)\n+0307B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x307B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0307DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0307DD   Length              0005 (5)\n+0307DF   Flags               01 (1) 'Modification'\n+0307E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0307E4 LOCAL HEADER #75      04034B50 (67324752)\n+0307E8 Extract Zip Spec      14 (20) '2.0'\n+0307E9 Extract OS            00 (0) 'MS-DOS'\n+0307EA General Purpose Flag  0000 (0)\n+0307EC Compression Method    0000 (0) 'Stored'\n+0307EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0307F2 CRC                   00000000 (0)\n+0307F6 Compressed Size       00000000 (0)\n+0307FA Uncompressed Size     00000000 (0)\n+0307FE Filename Length       0032 (50)\n+030800 Extra Length          0009 (9)\n+030802 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x30802: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+030834 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+030836   Length              0005 (5)\n+030838   Flags               01 (1) 'Modification'\n+030839   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03083D LOCAL HEADER #76      04034B50 (67324752)\n+030841 Extract Zip Spec      14 (20) '2.0'\n+030842 Extract OS            00 (0) 'MS-DOS'\n+030843 General Purpose Flag  0000 (0)\n+030845 Compression Method    0000 (0) 'Stored'\n+030847 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03084B CRC                   00000000 (0)\n+03084F Compressed Size       00000000 (0)\n+030853 Uncompressed Size     00000000 (0)\n+030857 Filename Length       0079 (121)\n+030859 Extra Length          0009 (9)\n+03085B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3085B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0308D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0308D6   Length              0005 (5)\n+0308D8   Flags               01 (1) 'Modification'\n+0308D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0308DD LOCAL HEADER #77      04034B50 (67324752)\n+0308E1 Extract Zip Spec      14 (20) '2.0'\n+0308E2 Extract OS            00 (0) 'MS-DOS'\n+0308E3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0308E5 Compression Method    0000 (0) 'Stored'\n+0308E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0308EB CRC                   00000000 (0)\n+0308EF Compressed Size       00000000 (0)\n+0308F3 Uncompressed Size     00000000 (0)\n+0308F7 Filename Length       008F (143)\n+0308F9 Extra Length          0009 (9)\n+0308FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2CF33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x308FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02CFC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02CFC4   Length              0005 (5)\n-02CFC6   Flags               01 (1) 'Modification'\n-02CFC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02CFCB PAYLOAD\n-\n-02DAE0 DATA DESCRIPTOR       08074B50 (134695760)\n-02DAE4 CRC                   164EC61D (374261277)\n-02DAE8 Compressed Size       00000B15 (2837)\n-02DAEC Uncompressed Size     00000B15 (2837)\n-\n-02DAF0 LOCAL HEADER #78      04034B50 (67324752)\n-02DAF4 Extract Zip Spec      14 (20) '2.0'\n-02DAF5 Extract OS            00 (0) 'MS-DOS'\n-02DAF6 General Purpose Flag  0000 (0)\n-02DAF8 Compression Method    0000 (0) 'Stored'\n-02DAFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02DAFE CRC                   00000000 (0)\n-02DB02 Compressed Size       00000000 (0)\n-02DB06 Uncompressed Size     00000000 (0)\n-02DB0A Filename Length       0023 (35)\n-02DB0C Extra Length          0009 (9)\n-02DB0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DB0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02DB31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02DB33   Length              0005 (5)\n-02DB35   Flags               01 (1) 'Modification'\n-02DB36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02DB3A LOCAL HEADER #79      04034B50 (67324752)\n-02DB3E Extract Zip Spec      14 (20) '2.0'\n-02DB3F Extract OS            00 (0) 'MS-DOS'\n-02DB40 General Purpose Flag  0000 (0)\n-02DB42 Compression Method    0000 (0) 'Stored'\n-02DB44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02DB48 CRC                   00000000 (0)\n-02DB4C Compressed Size       00000000 (0)\n-02DB50 Uncompressed Size     00000000 (0)\n-02DB54 Filename Length       002A (42)\n-02DB56 Extra Length          0009 (9)\n-02DB58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DB58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02DB82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02DB84   Length              0005 (5)\n-02DB86   Flags               01 (1) 'Modification'\n-02DB87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02DB8B LOCAL HEADER #80      04034B50 (67324752)\n-02DB8F Extract Zip Spec      14 (20) '2.0'\n-02DB90 Extract OS            00 (0) 'MS-DOS'\n-02DB91 General Purpose Flag  0000 (0)\n-02DB93 Compression Method    0000 (0) 'Stored'\n-02DB95 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02DB99 CRC                   00000000 (0)\n-02DB9D Compressed Size       00000000 (0)\n-02DBA1 Uncompressed Size     00000000 (0)\n-02DBA5 Filename Length       0060 (96)\n-02DBA7 Extra Length          0009 (9)\n-02DBA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DBA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02DC09 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02DC0B   Length              0005 (5)\n-02DC0D   Flags               01 (1) 'Modification'\n-02DC0E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02DC12 LOCAL HEADER #81      04034B50 (67324752)\n-02DC16 Extract Zip Spec      14 (20) '2.0'\n-02DC17 Extract OS            00 (0) 'MS-DOS'\n-02DC18 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02DC1A Compression Method    0000 (0) 'Stored'\n-02DC1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02DC20 CRC                   00000000 (0)\n-02DC24 Compressed Size       00000000 (0)\n-02DC28 Uncompressed Size     00000000 (0)\n-02DC2C Filename Length       0076 (118)\n-02DC2E Extra Length          0009 (9)\n-02DC30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DC30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02DCA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02DCA8   Length              0005 (5)\n-02DCAA   Flags               01 (1) 'Modification'\n-02DCAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02DCAF PAYLOAD\n-\n-02E92E DATA DESCRIPTOR       08074B50 (134695760)\n-02E932 CRC                   A42AA4FE (2754258174)\n-02E936 Compressed Size       00000C7F (3199)\n-02E93A Uncompressed Size     00000C7F (3199)\n-\n-02E93E LOCAL HEADER #82      04034B50 (67324752)\n-02E942 Extract Zip Spec      14 (20) '2.0'\n-02E943 Extract OS            00 (0) 'MS-DOS'\n-02E944 General Purpose Flag  0000 (0)\n-02E946 Compression Method    0000 (0) 'Stored'\n-02E948 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02E94C CRC                   00000000 (0)\n-02E950 Compressed Size       00000000 (0)\n-02E954 Uncompressed Size     00000000 (0)\n-02E958 Filename Length       0025 (37)\n-02E95A Extra Length          0009 (9)\n-02E95C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E95C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02E981 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02E983   Length              0005 (5)\n-02E985   Flags               01 (1) 'Modification'\n-02E986   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02E98A LOCAL HEADER #83      04034B50 (67324752)\n-02E98E Extract Zip Spec      14 (20) '2.0'\n-02E98F Extract OS            00 (0) 'MS-DOS'\n-02E990 General Purpose Flag  0000 (0)\n-02E992 Compression Method    0000 (0) 'Stored'\n-02E994 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02E998 CRC                   00000000 (0)\n-02E99C Compressed Size       00000000 (0)\n-02E9A0 Uncompressed Size     00000000 (0)\n-02E9A4 Filename Length       002C (44)\n-02E9A6 Extra Length          0009 (9)\n-02E9A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E9A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02E9D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02E9D6   Length              0005 (5)\n-02E9D8   Flags               01 (1) 'Modification'\n-02E9D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02E9DD LOCAL HEADER #84      04034B50 (67324752)\n-02E9E1 Extract Zip Spec      14 (20) '2.0'\n-02E9E2 Extract OS            00 (0) 'MS-DOS'\n-02E9E3 General Purpose Flag  0000 (0)\n-02E9E5 Compression Method    0000 (0) 'Stored'\n-02E9E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02E9EB CRC                   00000000 (0)\n-02E9EF Compressed Size       00000000 (0)\n-02E9F3 Uncompressed Size     00000000 (0)\n-02E9F7 Filename Length       005D (93)\n-02E9F9 Extra Length          0009 (9)\n-02E9FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E9FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02EA58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02EA5A   Length              0005 (5)\n-02EA5C   Flags               01 (1) 'Modification'\n-02EA5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02EA61 LOCAL HEADER #85      04034B50 (67324752)\n-02EA65 Extract Zip Spec      14 (20) '2.0'\n-02EA66 Extract OS            00 (0) 'MS-DOS'\n-02EA67 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02EA69 Compression Method    0000 (0) 'Stored'\n-02EA6B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02EA6F CRC                   00000000 (0)\n-02EA73 Compressed Size       00000000 (0)\n-02EA77 Uncompressed Size     00000000 (0)\n-02EA7B Filename Length       0073 (115)\n-02EA7D Extra Length          0009 (9)\n-02EA7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2EA7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02EAF2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02EAF4   Length              0005 (5)\n-02EAF6   Flags               01 (1) 'Modification'\n-02EAF7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02EAFB PAYLOAD\n-\n-02F4AA DATA DESCRIPTOR       08074B50 (134695760)\n-02F4AE CRC                   4F9A1C4F (1335499855)\n-02F4B2 Compressed Size       000009AF (2479)\n-02F4B6 Uncompressed Size     000009AF (2479)\n-\n-02F4BA LOCAL HEADER #86      04034B50 (67324752)\n-02F4BE Extract Zip Spec      14 (20) '2.0'\n-02F4BF Extract OS            00 (0) 'MS-DOS'\n-02F4C0 General Purpose Flag  0000 (0)\n-02F4C2 Compression Method    0000 (0) 'Stored'\n-02F4C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02F4C8 CRC                   00000000 (0)\n-02F4CC Compressed Size       00000000 (0)\n-02F4D0 Uncompressed Size     00000000 (0)\n-02F4D4 Filename Length       006A (106)\n-02F4D6 Extra Length          0009 (9)\n-02F4D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2F4D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02F542 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02F544   Length              0005 (5)\n-02F546   Flags               01 (1) 'Modification'\n-02F547   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02F54B LOCAL HEADER #87      04034B50 (67324752)\n-02F54F Extract Zip Spec      14 (20) '2.0'\n-02F550 Extract OS            00 (0) 'MS-DOS'\n-02F551 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02F553 Compression Method    0000 (0) 'Stored'\n-02F555 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02F559 CRC                   00000000 (0)\n-02F55D Compressed Size       00000000 (0)\n-02F561 Uncompressed Size     00000000 (0)\n-02F565 Filename Length       0080 (128)\n-02F567 Extra Length          0009 (9)\n-02F569 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2F569: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02F5E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02F5EB   Length              0005 (5)\n-02F5ED   Flags               01 (1) 'Modification'\n-02F5EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02F5F2 PAYLOAD\n-\n-030857 DATA DESCRIPTOR       08074B50 (134695760)\n-03085B CRC                   754F4527 (1968129319)\n-03085F Compressed Size       00001265 (4709)\n-030863 Uncompressed Size     00001265 (4709)\n-\n-030867 LOCAL HEADER #88      04034B50 (67324752)\n-03086B Extract Zip Spec      14 (20) '2.0'\n-03086C Extract OS            00 (0) 'MS-DOS'\n-03086D General Purpose Flag  0000 (0)\n-03086F Compression Method    0000 (0) 'Stored'\n-030871 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-030875 CRC                   00000000 (0)\n-030879 Compressed Size       00000000 (0)\n-03087D Uncompressed Size     00000000 (0)\n-030881 Filename Length       0028 (40)\n-030883 Extra Length          0009 (9)\n-030885 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x30885: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0308AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0308AF   Length              0005 (5)\n-0308B1   Flags               01 (1) 'Modification'\n-0308B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0308B6 LOCAL HEADER #89      04034B50 (67324752)\n-0308BA Extract Zip Spec      14 (20) '2.0'\n-0308BB Extract OS            00 (0) 'MS-DOS'\n-0308BC General Purpose Flag  0000 (0)\n-0308BE Compression Method    0000 (0) 'Stored'\n-0308C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0308C4 CRC                   00000000 (0)\n-0308C8 Compressed Size       00000000 (0)\n-0308CC Uncompressed Size     00000000 (0)\n-0308D0 Filename Length       002F (47)\n-0308D2 Extra Length          0009 (9)\n-0308D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x308D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-030903 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-030905   Length              0005 (5)\n-030907   Flags               01 (1) 'Modification'\n-030908   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03090C LOCAL HEADER #90      04034B50 (67324752)\n-030910 Extract Zip Spec      14 (20) '2.0'\n-030911 Extract OS            00 (0) 'MS-DOS'\n-030912 General Purpose Flag  0000 (0)\n-030914 Compression Method    0000 (0) 'Stored'\n-030916 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03091A CRC                   00000000 (0)\n-03091E Compressed Size       00000000 (0)\n-030922 Uncompressed Size     00000000 (0)\n-030926 Filename Length       0061 (97)\n-030928 Extra Length          0009 (9)\n-03092A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3092A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03098B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03098D   Length              0005 (5)\n-03098F   Flags               01 (1) 'Modification'\n-030990   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-030994 LOCAL HEADER #91      04034B50 (67324752)\n-030998 Extract Zip Spec      14 (20) '2.0'\n-030999 Extract OS            00 (0) 'MS-DOS'\n-03099A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03099C Compression Method    0000 (0) 'Stored'\n-03099E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0309A2 CRC                   00000000 (0)\n-0309A6 Compressed Size       00000000 (0)\n-0309AA Uncompressed Size     00000000 (0)\n-0309AE Filename Length       0077 (119)\n-0309B0 Extra Length          0009 (9)\n-0309B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x309B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-030A29 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-030A2B   Length              0005 (5)\n-030A2D   Flags               01 (1) 'Modification'\n-030A2E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-030A32 PAYLOAD\n-\n-031147 DATA DESCRIPTOR       08074B50 (134695760)\n-03114B CRC                   FAE26E3E (4209143358)\n-03114F Compressed Size       00000715 (1813)\n-031153 Uncompressed Size     00000715 (1813)\n-\n-031157 LOCAL HEADER #92      04034B50 (67324752)\n-03115B Extract Zip Spec      14 (20) '2.0'\n-03115C Extract OS            00 (0) 'MS-DOS'\n-03115D General Purpose Flag  0000 (0)\n-03115F Compression Method    0000 (0) 'Stored'\n-031161 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-031165 CRC                   00000000 (0)\n-031169 Compressed Size       00000000 (0)\n-03116D Uncompressed Size     00000000 (0)\n-031171 Filename Length       0026 (38)\n-031173 Extra Length          0009 (9)\n-031175 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x31175: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03119B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03119D   Length              0005 (5)\n-03119F   Flags               01 (1) 'Modification'\n-0311A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0311A4 LOCAL HEADER #93      04034B50 (67324752)\n-0311A8 Extract Zip Spec      14 (20) '2.0'\n-0311A9 Extract OS            00 (0) 'MS-DOS'\n-0311AA General Purpose Flag  0000 (0)\n-0311AC Compression Method    0000 (0) 'Stored'\n-0311AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0311B2 CRC                   00000000 (0)\n-0311B6 Compressed Size       00000000 (0)\n-0311BA Uncompressed Size     00000000 (0)\n-0311BE Filename Length       002D (45)\n-0311C0 Extra Length          0009 (9)\n-0311C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x311C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0311EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0311F1   Length              0005 (5)\n-0311F3   Flags               01 (1) 'Modification'\n-0311F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0311F8 LOCAL HEADER #94      04034B50 (67324752)\n-0311FC Extract Zip Spec      14 (20) '2.0'\n-0311FD Extract OS            00 (0) 'MS-DOS'\n-0311FE General Purpose Flag  0000 (0)\n-031200 Compression Method    0000 (0) 'Stored'\n-031202 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-031206 CRC                   00000000 (0)\n-03120A Compressed Size       00000000 (0)\n-03120E Uncompressed Size     00000000 (0)\n-031212 Filename Length       0064 (100)\n-031214 Extra Length          0009 (9)\n-031216 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x31216: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03127A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03127C   Length              0005 (5)\n-03127E   Flags               01 (1) 'Modification'\n-03127F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-031283 LOCAL HEADER #95      04034B50 (67324752)\n-031287 Extract Zip Spec      14 (20) '2.0'\n-031288 Extract OS            00 (0) 'MS-DOS'\n-031289 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03128B Compression Method    0000 (0) 'Stored'\n-03128D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-031291 CRC                   00000000 (0)\n-031295 Compressed Size       00000000 (0)\n-031299 Uncompressed Size     00000000 (0)\n-03129D Filename Length       007A (122)\n-03129F Extra Length          0009 (9)\n-0312A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x312A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03131B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03131D   Length              0005 (5)\n-03131F   Flags               01 (1) 'Modification'\n-031320   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-031324 PAYLOAD\n-\n-031B8C DATA DESCRIPTOR       08074B50 (134695760)\n-031B90 CRC                   FFF8AD9F (4294487455)\n-031B94 Compressed Size       00000868 (2152)\n-031B98 Uncompressed Size     00000868 (2152)\n-\n-031B9C LOCAL HEADER #96      04034B50 (67324752)\n-031BA0 Extract Zip Spec      14 (20) '2.0'\n-031BA1 Extract OS            00 (0) 'MS-DOS'\n-031BA2 General Purpose Flag  0000 (0)\n-031BA4 Compression Method    0000 (0) 'Stored'\n-031BA6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-031BAA CRC                   00000000 (0)\n-031BAE Compressed Size       00000000 (0)\n-031BB2 Uncompressed Size     00000000 (0)\n-031BB6 Filename Length       002F (47)\n-031BB8 Extra Length          0009 (9)\n-031BBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x31BBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-031BE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-031BEB   Length              0005 (5)\n-031BED   Flags               01 (1) 'Modification'\n-031BEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-031BF2 LOCAL HEADER #97      04034B50 (67324752)\n-031BF6 Extract Zip Spec      14 (20) '2.0'\n-031BF7 Extract OS            00 (0) 'MS-DOS'\n-031BF8 General Purpose Flag  0000 (0)\n-031BFA Compression Method    0000 (0) 'Stored'\n-031BFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-031C00 CRC                   00000000 (0)\n-031C04 Compressed Size       00000000 (0)\n-031C08 Uncompressed Size     00000000 (0)\n-031C0C Filename Length       0036 (54)\n-031C0E Extra Length          0009 (9)\n-031C10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x31C10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-031C46 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-031C48   Length              0005 (5)\n-031C4A   Flags               01 (1) 'Modification'\n-031C4B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-031C4F LOCAL HEADER #98      04034B50 (67324752)\n-031C53 Extract Zip Spec      14 (20) '2.0'\n-031C54 Extract OS            00 (0) 'MS-DOS'\n-031C55 General Purpose Flag  0000 (0)\n-031C57 Compression Method    0000 (0) 'Stored'\n-031C59 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-031C5D CRC                   00000000 (0)\n-031C61 Compressed Size       00000000 (0)\n-031C65 Uncompressed Size     00000000 (0)\n-031C69 Filename Length       0078 (120)\n-031C6B Extra Length          0009 (9)\n-031C6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x31C6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-031CE5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-031CE7   Length              0005 (5)\n-031CE9   Flags               01 (1) 'Modification'\n-031CEA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-031CEE LOCAL HEADER #99      04034B50 (67324752)\n-031CF2 Extract Zip Spec      14 (20) '2.0'\n-031CF3 Extract OS            00 (0) 'MS-DOS'\n-031CF4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-031CF6 Compression Method    0000 (0) 'Stored'\n-031CF8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-031CFC CRC                   00000000 (0)\n-031D00 Compressed Size       00000000 (0)\n-031D04 Uncompressed Size     00000000 (0)\n-031D08 Filename Length       008E (142)\n-031D0A Extra Length          0009 (9)\n-031D0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03098A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03098C   Length              0005 (5)\n+03098E   Flags               01 (1) 'Modification'\n+03098F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+030993 PAYLOAD\n+\n+0314A8 DATA DESCRIPTOR       08074B50 (134695760)\n+0314AC CRC                   164EC61D (374261277)\n+0314B0 Compressed Size       00000B15 (2837)\n+0314B4 Uncompressed Size     00000B15 (2837)\n+\n+0314B8 LOCAL HEADER #78      04034B50 (67324752)\n+0314BC Extract Zip Spec      14 (20) '2.0'\n+0314BD Extract OS            00 (0) 'MS-DOS'\n+0314BE General Purpose Flag  0000 (0)\n+0314C0 Compression Method    0000 (0) 'Stored'\n+0314C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0314C6 CRC                   00000000 (0)\n+0314CA Compressed Size       00000000 (0)\n+0314CE Uncompressed Size     00000000 (0)\n+0314D2 Filename Length       0023 (35)\n+0314D4 Extra Length          0009 (9)\n+0314D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x314D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0314F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0314FB   Length              0005 (5)\n+0314FD   Flags               01 (1) 'Modification'\n+0314FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+031502 LOCAL HEADER #79      04034B50 (67324752)\n+031506 Extract Zip Spec      14 (20) '2.0'\n+031507 Extract OS            00 (0) 'MS-DOS'\n+031508 General Purpose Flag  0000 (0)\n+03150A Compression Method    0000 (0) 'Stored'\n+03150C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+031510 CRC                   00000000 (0)\n+031514 Compressed Size       00000000 (0)\n+031518 Uncompressed Size     00000000 (0)\n+03151C Filename Length       002A (42)\n+03151E Extra Length          0009 (9)\n+031520 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x31520: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03154A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03154C   Length              0005 (5)\n+03154E   Flags               01 (1) 'Modification'\n+03154F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+031553 LOCAL HEADER #80      04034B50 (67324752)\n+031557 Extract Zip Spec      14 (20) '2.0'\n+031558 Extract OS            00 (0) 'MS-DOS'\n+031559 General Purpose Flag  0000 (0)\n+03155B Compression Method    0000 (0) 'Stored'\n+03155D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+031561 CRC                   00000000 (0)\n+031565 Compressed Size       00000000 (0)\n+031569 Uncompressed Size     00000000 (0)\n+03156D Filename Length       0060 (96)\n+03156F Extra Length          0009 (9)\n+031571 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x31571: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0315D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0315D3   Length              0005 (5)\n+0315D5   Flags               01 (1) 'Modification'\n+0315D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0315DA LOCAL HEADER #81      04034B50 (67324752)\n+0315DE Extract Zip Spec      14 (20) '2.0'\n+0315DF Extract OS            00 (0) 'MS-DOS'\n+0315E0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0315E2 Compression Method    0000 (0) 'Stored'\n+0315E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0315E8 CRC                   00000000 (0)\n+0315EC Compressed Size       00000000 (0)\n+0315F0 Uncompressed Size     00000000 (0)\n+0315F4 Filename Length       0076 (118)\n+0315F6 Extra Length          0009 (9)\n+0315F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x315F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03166E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+031670   Length              0005 (5)\n+031672   Flags               01 (1) 'Modification'\n+031673   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+031677 PAYLOAD\n+\n+0322F6 DATA DESCRIPTOR       08074B50 (134695760)\n+0322FA CRC                   A42AA4FE (2754258174)\n+0322FE Compressed Size       00000C7F (3199)\n+032302 Uncompressed Size     00000C7F (3199)\n+\n+032306 LOCAL HEADER #82      04034B50 (67324752)\n+03230A Extract Zip Spec      14 (20) '2.0'\n+03230B Extract OS            00 (0) 'MS-DOS'\n+03230C General Purpose Flag  0000 (0)\n+03230E Compression Method    0000 (0) 'Stored'\n+032310 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+032314 CRC                   00000000 (0)\n+032318 Compressed Size       00000000 (0)\n+03231C Uncompressed Size     00000000 (0)\n+032320 Filename Length       0025 (37)\n+032322 Extra Length          0009 (9)\n+032324 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x32324: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+032349 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03234B   Length              0005 (5)\n+03234D   Flags               01 (1) 'Modification'\n+03234E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+032352 LOCAL HEADER #83      04034B50 (67324752)\n+032356 Extract Zip Spec      14 (20) '2.0'\n+032357 Extract OS            00 (0) 'MS-DOS'\n+032358 General Purpose Flag  0000 (0)\n+03235A Compression Method    0000 (0) 'Stored'\n+03235C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+032360 CRC                   00000000 (0)\n+032364 Compressed Size       00000000 (0)\n+032368 Uncompressed Size     00000000 (0)\n+03236C Filename Length       002C (44)\n+03236E Extra Length          0009 (9)\n+032370 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x32370: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03239C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03239E   Length              0005 (5)\n+0323A0   Flags               01 (1) 'Modification'\n+0323A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0323A5 LOCAL HEADER #84      04034B50 (67324752)\n+0323A9 Extract Zip Spec      14 (20) '2.0'\n+0323AA Extract OS            00 (0) 'MS-DOS'\n+0323AB General Purpose Flag  0000 (0)\n+0323AD Compression Method    0000 (0) 'Stored'\n+0323AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0323B3 CRC                   00000000 (0)\n+0323B7 Compressed Size       00000000 (0)\n+0323BB Uncompressed Size     00000000 (0)\n+0323BF Filename Length       005D (93)\n+0323C1 Extra Length          0009 (9)\n+0323C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x323C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+032420 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+032422   Length              0005 (5)\n+032424   Flags               01 (1) 'Modification'\n+032425   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+032429 LOCAL HEADER #85      04034B50 (67324752)\n+03242D Extract Zip Spec      14 (20) '2.0'\n+03242E Extract OS            00 (0) 'MS-DOS'\n+03242F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+032431 Compression Method    0000 (0) 'Stored'\n+032433 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+032437 CRC                   00000000 (0)\n+03243B Compressed Size       00000000 (0)\n+03243F Uncompressed Size     00000000 (0)\n+032443 Filename Length       0073 (115)\n+032445 Extra Length          0009 (9)\n+032447 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x32447: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0324BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0324BC   Length              0005 (5)\n+0324BE   Flags               01 (1) 'Modification'\n+0324BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0324C3 PAYLOAD\n+\n+032E72 DATA DESCRIPTOR       08074B50 (134695760)\n+032E76 CRC                   4F9A1C4F (1335499855)\n+032E7A Compressed Size       000009AF (2479)\n+032E7E Uncompressed Size     000009AF (2479)\n+\n+032E82 LOCAL HEADER #86      04034B50 (67324752)\n+032E86 Extract Zip Spec      14 (20) '2.0'\n+032E87 Extract OS            00 (0) 'MS-DOS'\n+032E88 General Purpose Flag  0000 (0)\n+032E8A Compression Method    0000 (0) 'Stored'\n+032E8C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+032E90 CRC                   00000000 (0)\n+032E94 Compressed Size       00000000 (0)\n+032E98 Uncompressed Size     00000000 (0)\n+032E9C Filename Length       006A (106)\n+032E9E Extra Length          0009 (9)\n+032EA0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x32EA0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+032F0A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+032F0C   Length              0005 (5)\n+032F0E   Flags               01 (1) 'Modification'\n+032F0F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+032F13 LOCAL HEADER #87      04034B50 (67324752)\n+032F17 Extract Zip Spec      14 (20) '2.0'\n+032F18 Extract OS            00 (0) 'MS-DOS'\n+032F19 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+032F1B Compression Method    0000 (0) 'Stored'\n+032F1D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+032F21 CRC                   00000000 (0)\n+032F25 Compressed Size       00000000 (0)\n+032F29 Uncompressed Size     00000000 (0)\n+032F2D Filename Length       0080 (128)\n+032F2F Extra Length          0009 (9)\n+032F31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x32F31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+032FB1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+032FB3   Length              0005 (5)\n+032FB5   Flags               01 (1) 'Modification'\n+032FB6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+032FBA PAYLOAD\n+\n+03421F DATA DESCRIPTOR       08074B50 (134695760)\n+034223 CRC                   754F4527 (1968129319)\n+034227 Compressed Size       00001265 (4709)\n+03422B Uncompressed Size     00001265 (4709)\n+\n+03422F LOCAL HEADER #88      04034B50 (67324752)\n+034233 Extract Zip Spec      14 (20) '2.0'\n+034234 Extract OS            00 (0) 'MS-DOS'\n+034235 General Purpose Flag  0000 (0)\n+034237 Compression Method    0000 (0) 'Stored'\n+034239 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03423D CRC                   00000000 (0)\n+034241 Compressed Size       00000000 (0)\n+034245 Uncompressed Size     00000000 (0)\n+034249 Filename Length       0028 (40)\n+03424B Extra Length          0009 (9)\n+03424D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3424D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+034275 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+034277   Length              0005 (5)\n+034279   Flags               01 (1) 'Modification'\n+03427A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03427E LOCAL HEADER #89      04034B50 (67324752)\n+034282 Extract Zip Spec      14 (20) '2.0'\n+034283 Extract OS            00 (0) 'MS-DOS'\n+034284 General Purpose Flag  0000 (0)\n+034286 Compression Method    0000 (0) 'Stored'\n+034288 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03428C CRC                   00000000 (0)\n+034290 Compressed Size       00000000 (0)\n+034294 Uncompressed Size     00000000 (0)\n+034298 Filename Length       002F (47)\n+03429A Extra Length          0009 (9)\n+03429C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3429C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0342CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0342CD   Length              0005 (5)\n+0342CF   Flags               01 (1) 'Modification'\n+0342D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0342D4 LOCAL HEADER #90      04034B50 (67324752)\n+0342D8 Extract Zip Spec      14 (20) '2.0'\n+0342D9 Extract OS            00 (0) 'MS-DOS'\n+0342DA General Purpose Flag  0000 (0)\n+0342DC Compression Method    0000 (0) 'Stored'\n+0342DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0342E2 CRC                   00000000 (0)\n+0342E6 Compressed Size       00000000 (0)\n+0342EA Uncompressed Size     00000000 (0)\n+0342EE Filename Length       0061 (97)\n+0342F0 Extra Length          0009 (9)\n+0342F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x342F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+034353 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+034355   Length              0005 (5)\n+034357   Flags               01 (1) 'Modification'\n+034358   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03435C LOCAL HEADER #91      04034B50 (67324752)\n+034360 Extract Zip Spec      14 (20) '2.0'\n+034361 Extract OS            00 (0) 'MS-DOS'\n+034362 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+034364 Compression Method    0000 (0) 'Stored'\n+034366 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03436A CRC                   00000000 (0)\n+03436E Compressed Size       00000000 (0)\n+034372 Uncompressed Size     00000000 (0)\n+034376 Filename Length       0077 (119)\n+034378 Extra Length          0009 (9)\n+03437A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3437A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0343F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0343F3   Length              0005 (5)\n+0343F5   Flags               01 (1) 'Modification'\n+0343F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0343FA PAYLOAD\n+\n+034B0F DATA DESCRIPTOR       08074B50 (134695760)\n+034B13 CRC                   FAE26E3E (4209143358)\n+034B17 Compressed Size       00000715 (1813)\n+034B1B Uncompressed Size     00000715 (1813)\n+\n+034B1F LOCAL HEADER #92      04034B50 (67324752)\n+034B23 Extract Zip Spec      14 (20) '2.0'\n+034B24 Extract OS            00 (0) 'MS-DOS'\n+034B25 General Purpose Flag  0000 (0)\n+034B27 Compression Method    0000 (0) 'Stored'\n+034B29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+034B2D CRC                   00000000 (0)\n+034B31 Compressed Size       00000000 (0)\n+034B35 Uncompressed Size     00000000 (0)\n+034B39 Filename Length       0026 (38)\n+034B3B Extra Length          0009 (9)\n+034B3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x34B3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+034B63 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+034B65   Length              0005 (5)\n+034B67   Flags               01 (1) 'Modification'\n+034B68   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+034B6C LOCAL HEADER #93      04034B50 (67324752)\n+034B70 Extract Zip Spec      14 (20) '2.0'\n+034B71 Extract OS            00 (0) 'MS-DOS'\n+034B72 General Purpose Flag  0000 (0)\n+034B74 Compression Method    0000 (0) 'Stored'\n+034B76 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+034B7A CRC                   00000000 (0)\n+034B7E Compressed Size       00000000 (0)\n+034B82 Uncompressed Size     00000000 (0)\n+034B86 Filename Length       002D (45)\n+034B88 Extra Length          0009 (9)\n+034B8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x34B8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+034BB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+034BB9   Length              0005 (5)\n+034BBB   Flags               01 (1) 'Modification'\n+034BBC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+034BC0 LOCAL HEADER #94      04034B50 (67324752)\n+034BC4 Extract Zip Spec      14 (20) '2.0'\n+034BC5 Extract OS            00 (0) 'MS-DOS'\n+034BC6 General Purpose Flag  0000 (0)\n+034BC8 Compression Method    0000 (0) 'Stored'\n+034BCA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+034BCE CRC                   00000000 (0)\n+034BD2 Compressed Size       00000000 (0)\n+034BD6 Uncompressed Size     00000000 (0)\n+034BDA Filename Length       0064 (100)\n+034BDC Extra Length          0009 (9)\n+034BDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x34BDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+034C42 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+034C44   Length              0005 (5)\n+034C46   Flags               01 (1) 'Modification'\n+034C47   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+034C4B LOCAL HEADER #95      04034B50 (67324752)\n+034C4F Extract Zip Spec      14 (20) '2.0'\n+034C50 Extract OS            00 (0) 'MS-DOS'\n+034C51 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+034C53 Compression Method    0000 (0) 'Stored'\n+034C55 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+034C59 CRC                   00000000 (0)\n+034C5D Compressed Size       00000000 (0)\n+034C61 Uncompressed Size     00000000 (0)\n+034C65 Filename Length       007A (122)\n+034C67 Extra Length          0009 (9)\n+034C69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x34C69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+034CE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+034CE5   Length              0005 (5)\n+034CE7   Flags               01 (1) 'Modification'\n+034CE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+034CEC PAYLOAD\n+\n+035554 DATA DESCRIPTOR       08074B50 (134695760)\n+035558 CRC                   FFF8AD9F (4294487455)\n+03555C Compressed Size       00000868 (2152)\n+035560 Uncompressed Size     00000868 (2152)\n+\n+035564 LOCAL HEADER #96      04034B50 (67324752)\n+035568 Extract Zip Spec      14 (20) '2.0'\n+035569 Extract OS            00 (0) 'MS-DOS'\n+03556A General Purpose Flag  0000 (0)\n+03556C Compression Method    0000 (0) 'Stored'\n+03556E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+035572 CRC                   00000000 (0)\n+035576 Compressed Size       00000000 (0)\n+03557A Uncompressed Size     00000000 (0)\n+03557E Filename Length       002F (47)\n+035580 Extra Length          0009 (9)\n+035582 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x35582: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0355B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0355B3   Length              0005 (5)\n+0355B5   Flags               01 (1) 'Modification'\n+0355B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0355BA LOCAL HEADER #97      04034B50 (67324752)\n+0355BE Extract Zip Spec      14 (20) '2.0'\n+0355BF Extract OS            00 (0) 'MS-DOS'\n+0355C0 General Purpose Flag  0000 (0)\n+0355C2 Compression Method    0000 (0) 'Stored'\n+0355C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0355C8 CRC                   00000000 (0)\n+0355CC Compressed Size       00000000 (0)\n+0355D0 Uncompressed Size     00000000 (0)\n+0355D4 Filename Length       0036 (54)\n+0355D6 Extra Length          0009 (9)\n+0355D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x355D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03560E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+035610   Length              0005 (5)\n+035612   Flags               01 (1) 'Modification'\n+035613   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+035617 LOCAL HEADER #98      04034B50 (67324752)\n+03561B Extract Zip Spec      14 (20) '2.0'\n+03561C Extract OS            00 (0) 'MS-DOS'\n+03561D General Purpose Flag  0000 (0)\n+03561F Compression Method    0000 (0) 'Stored'\n+035621 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+035625 CRC                   00000000 (0)\n+035629 Compressed Size       00000000 (0)\n+03562D Uncompressed Size     00000000 (0)\n+035631 Filename Length       0078 (120)\n+035633 Extra Length          0009 (9)\n+035635 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x35635: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0356AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0356AF   Length              0005 (5)\n+0356B1   Flags               01 (1) 'Modification'\n+0356B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0356B6 LOCAL HEADER #99      04034B50 (67324752)\n+0356BA Extract Zip Spec      14 (20) '2.0'\n+0356BB Extract OS            00 (0) 'MS-DOS'\n+0356BC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0356BE Compression Method    0000 (0) 'Stored'\n+0356C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0356C4 CRC                   00000000 (0)\n+0356C8 Compressed Size       00000000 (0)\n+0356CC Uncompressed Size     00000000 (0)\n+0356D0 Filename Length       008E (142)\n+0356D2 Extra Length          0009 (9)\n+0356D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0x31D0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x356D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-031D9A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-031D9C   Length              0005 (5)\n-031D9E   Flags               01 (1) 'Modification'\n-031D9F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-031DA3 PAYLOAD\n-\n-0330CA DATA DESCRIPTOR       08074B50 (134695760)\n-0330CE CRC                   896578EC (2305128684)\n-0330D2 Compressed Size       00001327 (4903)\n-0330D6 Uncompressed Size     00001327 (4903)\n-\n-0330DA LOCAL HEADER #100     04034B50 (67324752)\n-0330DE Extract Zip Spec      14 (20) '2.0'\n-0330DF Extract OS            00 (0) 'MS-DOS'\n-0330E0 General Purpose Flag  0000 (0)\n-0330E2 Compression Method    0000 (0) 'Stored'\n-0330E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0330E8 CRC                   00000000 (0)\n-0330EC Compressed Size       00000000 (0)\n-0330F0 Uncompressed Size     00000000 (0)\n-0330F4 Filename Length       003B (59)\n-0330F6 Extra Length          0009 (9)\n-0330F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x330F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-033133 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-033135   Length              0005 (5)\n-033137   Flags               01 (1) 'Modification'\n-033138   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03313C LOCAL HEADER #101     04034B50 (67324752)\n-033140 Extract Zip Spec      14 (20) '2.0'\n-033141 Extract OS            00 (0) 'MS-DOS'\n-033142 General Purpose Flag  0000 (0)\n-033144 Compression Method    0000 (0) 'Stored'\n-033146 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03314A CRC                   00000000 (0)\n-03314E Compressed Size       00000000 (0)\n-033152 Uncompressed Size     00000000 (0)\n-033156 Filename Length       0042 (66)\n-033158 Extra Length          0009 (9)\n-03315A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3315A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03319C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03319E   Length              0005 (5)\n-0331A0   Flags               01 (1) 'Modification'\n-0331A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0331A5 LOCAL HEADER #102     04034B50 (67324752)\n-0331A9 Extract Zip Spec      14 (20) '2.0'\n-0331AA Extract OS            00 (0) 'MS-DOS'\n-0331AB General Purpose Flag  0000 (0)\n-0331AD Compression Method    0000 (0) 'Stored'\n-0331AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0331B3 CRC                   00000000 (0)\n-0331B7 Compressed Size       00000000 (0)\n-0331BB Uncompressed Size     00000000 (0)\n-0331BF Filename Length       007F (127)\n-0331C1 Extra Length          0009 (9)\n-0331C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x331C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-033242 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-033244   Length              0005 (5)\n-033246   Flags               01 (1) 'Modification'\n-033247   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03324B LOCAL HEADER #103     04034B50 (67324752)\n-03324F Extract Zip Spec      14 (20) '2.0'\n-033250 Extract OS            00 (0) 'MS-DOS'\n-033251 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-033253 Compression Method    0000 (0) 'Stored'\n-033255 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-033259 CRC                   00000000 (0)\n-03325D Compressed Size       00000000 (0)\n-033261 Uncompressed Size     00000000 (0)\n-033265 Filename Length       0095 (149)\n-033267 Extra Length          0009 (9)\n-033269 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+035762 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+035764   Length              0005 (5)\n+035766   Flags               01 (1) 'Modification'\n+035767   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03576B PAYLOAD\n+\n+036A92 DATA DESCRIPTOR       08074B50 (134695760)\n+036A96 CRC                   896578EC (2305128684)\n+036A9A Compressed Size       00001327 (4903)\n+036A9E Uncompressed Size     00001327 (4903)\n+\n+036AA2 LOCAL HEADER #100     04034B50 (67324752)\n+036AA6 Extract Zip Spec      14 (20) '2.0'\n+036AA7 Extract OS            00 (0) 'MS-DOS'\n+036AA8 General Purpose Flag  0000 (0)\n+036AAA Compression Method    0000 (0) 'Stored'\n+036AAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+036AB0 CRC                   00000000 (0)\n+036AB4 Compressed Size       00000000 (0)\n+036AB8 Uncompressed Size     00000000 (0)\n+036ABC Filename Length       003B (59)\n+036ABE Extra Length          0009 (9)\n+036AC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x36AC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+036AFB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+036AFD   Length              0005 (5)\n+036AFF   Flags               01 (1) 'Modification'\n+036B00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+036B04 LOCAL HEADER #101     04034B50 (67324752)\n+036B08 Extract Zip Spec      14 (20) '2.0'\n+036B09 Extract OS            00 (0) 'MS-DOS'\n+036B0A General Purpose Flag  0000 (0)\n+036B0C Compression Method    0000 (0) 'Stored'\n+036B0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+036B12 CRC                   00000000 (0)\n+036B16 Compressed Size       00000000 (0)\n+036B1A Uncompressed Size     00000000 (0)\n+036B1E Filename Length       0042 (66)\n+036B20 Extra Length          0009 (9)\n+036B22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x36B22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+036B64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+036B66   Length              0005 (5)\n+036B68   Flags               01 (1) 'Modification'\n+036B69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+036B6D LOCAL HEADER #102     04034B50 (67324752)\n+036B71 Extract Zip Spec      14 (20) '2.0'\n+036B72 Extract OS            00 (0) 'MS-DOS'\n+036B73 General Purpose Flag  0000 (0)\n+036B75 Compression Method    0000 (0) 'Stored'\n+036B77 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+036B7B CRC                   00000000 (0)\n+036B7F Compressed Size       00000000 (0)\n+036B83 Uncompressed Size     00000000 (0)\n+036B87 Filename Length       007F (127)\n+036B89 Extra Length          0009 (9)\n+036B8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x36B8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+036C0A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+036C0C   Length              0005 (5)\n+036C0E   Flags               01 (1) 'Modification'\n+036C0F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+036C13 LOCAL HEADER #103     04034B50 (67324752)\n+036C17 Extract Zip Spec      14 (20) '2.0'\n+036C18 Extract OS            00 (0) 'MS-DOS'\n+036C19 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+036C1B Compression Method    0000 (0) 'Stored'\n+036C1D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+036C21 CRC                   00000000 (0)\n+036C25 Compressed Size       00000000 (0)\n+036C29 Uncompressed Size     00000000 (0)\n+036C2D Filename Length       0095 (149)\n+036C2F Extra Length          0009 (9)\n+036C31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x33269: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x36C31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0332FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-033300   Length              0005 (5)\n-033302   Flags               01 (1) 'Modification'\n-033303   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-033307 PAYLOAD\n-\n-03402B DATA DESCRIPTOR       08074B50 (134695760)\n-03402F CRC                   64624734 (1684162356)\n-034033 Compressed Size       00000D24 (3364)\n-034037 Uncompressed Size     00000D24 (3364)\n-\n-03403B LOCAL HEADER #104     04034B50 (67324752)\n-03403F Extract Zip Spec      14 (20) '2.0'\n-034040 Extract OS            00 (0) 'MS-DOS'\n-034041 General Purpose Flag  0000 (0)\n-034043 Compression Method    0000 (0) 'Stored'\n-034045 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-034049 CRC                   00000000 (0)\n-03404D Compressed Size       00000000 (0)\n-034051 Uncompressed Size     00000000 (0)\n-034055 Filename Length       007B (123)\n-034057 Extra Length          0009 (9)\n-034059 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x34059: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0340D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0340D6   Length              0005 (5)\n-0340D8   Flags               01 (1) 'Modification'\n-0340D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0340DD LOCAL HEADER #105     04034B50 (67324752)\n-0340E1 Extract Zip Spec      14 (20) '2.0'\n-0340E2 Extract OS            00 (0) 'MS-DOS'\n-0340E3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0340E5 Compression Method    0000 (0) 'Stored'\n-0340E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0340EB CRC                   00000000 (0)\n-0340EF Compressed Size       00000000 (0)\n-0340F3 Uncompressed Size     00000000 (0)\n-0340F7 Filename Length       0091 (145)\n-0340F9 Extra Length          0009 (9)\n-0340FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+036CC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+036CC8   Length              0005 (5)\n+036CCA   Flags               01 (1) 'Modification'\n+036CCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+036CCF PAYLOAD\n+\n+0379F3 DATA DESCRIPTOR       08074B50 (134695760)\n+0379F7 CRC                   64624734 (1684162356)\n+0379FB Compressed Size       00000D24 (3364)\n+0379FF Uncompressed Size     00000D24 (3364)\n+\n+037A03 LOCAL HEADER #104     04034B50 (67324752)\n+037A07 Extract Zip Spec      14 (20) '2.0'\n+037A08 Extract OS            00 (0) 'MS-DOS'\n+037A09 General Purpose Flag  0000 (0)\n+037A0B Compression Method    0000 (0) 'Stored'\n+037A0D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+037A11 CRC                   00000000 (0)\n+037A15 Compressed Size       00000000 (0)\n+037A19 Uncompressed Size     00000000 (0)\n+037A1D Filename Length       007B (123)\n+037A1F Extra Length          0009 (9)\n+037A21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x37A21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+037A9C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+037A9E   Length              0005 (5)\n+037AA0   Flags               01 (1) 'Modification'\n+037AA1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+037AA5 LOCAL HEADER #105     04034B50 (67324752)\n+037AA9 Extract Zip Spec      14 (20) '2.0'\n+037AAA Extract OS            00 (0) 'MS-DOS'\n+037AAB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+037AAD Compression Method    0000 (0) 'Stored'\n+037AAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+037AB3 CRC                   00000000 (0)\n+037AB7 Compressed Size       00000000 (0)\n+037ABB Uncompressed Size     00000000 (0)\n+037ABF Filename Length       0091 (145)\n+037AC1 Extra Length          0009 (9)\n+037AC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x340FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x37AC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03418C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03418E   Length              0005 (5)\n-034190   Flags               01 (1) 'Modification'\n-034191   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-034195 PAYLOAD\n-\n-034A62 DATA DESCRIPTOR       08074B50 (134695760)\n-034A66 CRC                   2B6EF697 (728692375)\n-034A6A Compressed Size       000008CD (2253)\n-034A6E Uncompressed Size     000008CD (2253)\n-\n-034A72 LOCAL HEADER #106     04034B50 (67324752)\n-034A76 Extract Zip Spec      14 (20) '2.0'\n-034A77 Extract OS            00 (0) 'MS-DOS'\n-034A78 General Purpose Flag  0000 (0)\n-034A7A Compression Method    0000 (0) 'Stored'\n-034A7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-034A80 CRC                   00000000 (0)\n-034A84 Compressed Size       00000000 (0)\n-034A88 Uncompressed Size     00000000 (0)\n-034A8C Filename Length       0034 (52)\n-034A8E Extra Length          0009 (9)\n-034A90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x34A90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-034AC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-034AC6   Length              0005 (5)\n-034AC8   Flags               01 (1) 'Modification'\n-034AC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-034ACD LOCAL HEADER #107     04034B50 (67324752)\n-034AD1 Extract Zip Spec      14 (20) '2.0'\n-034AD2 Extract OS            00 (0) 'MS-DOS'\n-034AD3 General Purpose Flag  0000 (0)\n-034AD5 Compression Method    0000 (0) 'Stored'\n-034AD7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-034ADB CRC                   00000000 (0)\n-034ADF Compressed Size       00000000 (0)\n-034AE3 Uncompressed Size     00000000 (0)\n-034AE7 Filename Length       003B (59)\n-034AE9 Extra Length          0009 (9)\n-034AEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x34AEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-034B26 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-034B28   Length              0005 (5)\n-034B2A   Flags               01 (1) 'Modification'\n-034B2B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-034B2F LOCAL HEADER #108     04034B50 (67324752)\n-034B33 Extract Zip Spec      14 (20) '2.0'\n-034B34 Extract OS            00 (0) 'MS-DOS'\n-034B35 General Purpose Flag  0000 (0)\n-034B37 Compression Method    0000 (0) 'Stored'\n-034B39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-034B3D CRC                   00000000 (0)\n-034B41 Compressed Size       00000000 (0)\n-034B45 Uncompressed Size     00000000 (0)\n-034B49 Filename Length       0079 (121)\n-034B4B Extra Length          0009 (9)\n-034B4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x34B4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-034BC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-034BC8   Length              0005 (5)\n-034BCA   Flags               01 (1) 'Modification'\n-034BCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-034BCF LOCAL HEADER #109     04034B50 (67324752)\n-034BD3 Extract Zip Spec      14 (20) '2.0'\n-034BD4 Extract OS            00 (0) 'MS-DOS'\n-034BD5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-034BD7 Compression Method    0000 (0) 'Stored'\n-034BD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-034BDD CRC                   00000000 (0)\n-034BE1 Compressed Size       00000000 (0)\n-034BE5 Uncompressed Size     00000000 (0)\n-034BE9 Filename Length       008F (143)\n-034BEB Extra Length          0009 (9)\n-034BED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+037B54 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+037B56   Length              0005 (5)\n+037B58   Flags               01 (1) 'Modification'\n+037B59   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+037B5D PAYLOAD\n+\n+03842A DATA DESCRIPTOR       08074B50 (134695760)\n+03842E CRC                   2B6EF697 (728692375)\n+038432 Compressed Size       000008CD (2253)\n+038436 Uncompressed Size     000008CD (2253)\n+\n+03843A LOCAL HEADER #106     04034B50 (67324752)\n+03843E Extract Zip Spec      14 (20) '2.0'\n+03843F Extract OS            00 (0) 'MS-DOS'\n+038440 General Purpose Flag  0000 (0)\n+038442 Compression Method    0000 (0) 'Stored'\n+038444 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+038448 CRC                   00000000 (0)\n+03844C Compressed Size       00000000 (0)\n+038450 Uncompressed Size     00000000 (0)\n+038454 Filename Length       0034 (52)\n+038456 Extra Length          0009 (9)\n+038458 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x38458: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03848C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03848E   Length              0005 (5)\n+038490   Flags               01 (1) 'Modification'\n+038491   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+038495 LOCAL HEADER #107     04034B50 (67324752)\n+038499 Extract Zip Spec      14 (20) '2.0'\n+03849A Extract OS            00 (0) 'MS-DOS'\n+03849B General Purpose Flag  0000 (0)\n+03849D Compression Method    0000 (0) 'Stored'\n+03849F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0384A3 CRC                   00000000 (0)\n+0384A7 Compressed Size       00000000 (0)\n+0384AB Uncompressed Size     00000000 (0)\n+0384AF Filename Length       003B (59)\n+0384B1 Extra Length          0009 (9)\n+0384B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x384B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0384EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0384F0   Length              0005 (5)\n+0384F2   Flags               01 (1) 'Modification'\n+0384F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0384F7 LOCAL HEADER #108     04034B50 (67324752)\n+0384FB Extract Zip Spec      14 (20) '2.0'\n+0384FC Extract OS            00 (0) 'MS-DOS'\n+0384FD General Purpose Flag  0000 (0)\n+0384FF Compression Method    0000 (0) 'Stored'\n+038501 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+038505 CRC                   00000000 (0)\n+038509 Compressed Size       00000000 (0)\n+03850D Uncompressed Size     00000000 (0)\n+038511 Filename Length       0079 (121)\n+038513 Extra Length          0009 (9)\n+038515 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x38515: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03858E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+038590   Length              0005 (5)\n+038592   Flags               01 (1) 'Modification'\n+038593   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+038597 LOCAL HEADER #109     04034B50 (67324752)\n+03859B Extract Zip Spec      14 (20) '2.0'\n+03859C Extract OS            00 (0) 'MS-DOS'\n+03859D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03859F Compression Method    0000 (0) 'Stored'\n+0385A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0385A5 CRC                   00000000 (0)\n+0385A9 Compressed Size       00000000 (0)\n+0385AD Uncompressed Size     00000000 (0)\n+0385B1 Filename Length       008F (143)\n+0385B3 Extra Length          0009 (9)\n+0385B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x34BED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x385B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-034C7C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-034C7E   Length              0005 (5)\n-034C80   Flags               01 (1) 'Modification'\n-034C81   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-034C85 PAYLOAD\n-\n-036036 DATA DESCRIPTOR       08074B50 (134695760)\n-03603A CRC                   DBC79151 (3687289169)\n-03603E Compressed Size       000013B1 (5041)\n-036042 Uncompressed Size     000013B1 (5041)\n-\n-036046 LOCAL HEADER #110     04034B50 (67324752)\n-03604A Extract Zip Spec      14 (20) '2.0'\n-03604B Extract OS            00 (0) 'MS-DOS'\n-03604C General Purpose Flag  0000 (0)\n-03604E Compression Method    0000 (0) 'Stored'\n-036050 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-036054 CRC                   00000000 (0)\n-036058 Compressed Size       00000000 (0)\n-03605C Uncompressed Size     00000000 (0)\n-036060 Filename Length       007F (127)\n-036062 Extra Length          0009 (9)\n-036064 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x36064: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0360E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0360E5   Length              0005 (5)\n-0360E7   Flags               01 (1) 'Modification'\n-0360E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0360EC LOCAL HEADER #111     04034B50 (67324752)\n-0360F0 Extract Zip Spec      14 (20) '2.0'\n-0360F1 Extract OS            00 (0) 'MS-DOS'\n-0360F2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0360F4 Compression Method    0000 (0) 'Stored'\n-0360F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0360FA CRC                   00000000 (0)\n-0360FE Compressed Size       00000000 (0)\n-036102 Uncompressed Size     00000000 (0)\n-036106 Filename Length       0095 (149)\n-036108 Extra Length          0009 (9)\n-03610A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+038644 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+038646   Length              0005 (5)\n+038648   Flags               01 (1) 'Modification'\n+038649   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03864D PAYLOAD\n+\n+0399FE DATA DESCRIPTOR       08074B50 (134695760)\n+039A02 CRC                   DBC79151 (3687289169)\n+039A06 Compressed Size       000013B1 (5041)\n+039A0A Uncompressed Size     000013B1 (5041)\n+\n+039A0E LOCAL HEADER #110     04034B50 (67324752)\n+039A12 Extract Zip Spec      14 (20) '2.0'\n+039A13 Extract OS            00 (0) 'MS-DOS'\n+039A14 General Purpose Flag  0000 (0)\n+039A16 Compression Method    0000 (0) 'Stored'\n+039A18 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+039A1C CRC                   00000000 (0)\n+039A20 Compressed Size       00000000 (0)\n+039A24 Uncompressed Size     00000000 (0)\n+039A28 Filename Length       007F (127)\n+039A2A Extra Length          0009 (9)\n+039A2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x39A2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+039AAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+039AAD   Length              0005 (5)\n+039AAF   Flags               01 (1) 'Modification'\n+039AB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+039AB4 LOCAL HEADER #111     04034B50 (67324752)\n+039AB8 Extract Zip Spec      14 (20) '2.0'\n+039AB9 Extract OS            00 (0) 'MS-DOS'\n+039ABA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+039ABC Compression Method    0000 (0) 'Stored'\n+039ABE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+039AC2 CRC                   00000000 (0)\n+039AC6 Compressed Size       00000000 (0)\n+039ACA Uncompressed Size     00000000 (0)\n+039ACE Filename Length       0095 (149)\n+039AD0 Extra Length          0009 (9)\n+039AD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3610A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x39AD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03619F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0361A1   Length              0005 (5)\n-0361A3   Flags               01 (1) 'Modification'\n-0361A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0361A8 PAYLOAD\n-\n-0367F6 DATA DESCRIPTOR       08074B50 (134695760)\n-0367FA CRC                   9AFFB21B (2600448539)\n-0367FE Compressed Size       0000064E (1614)\n-036802 Uncompressed Size     0000064E (1614)\n-\n-036806 LOCAL HEADER #112     04034B50 (67324752)\n-03680A Extract Zip Spec      14 (20) '2.0'\n-03680B Extract OS            00 (0) 'MS-DOS'\n-03680C General Purpose Flag  0000 (0)\n-03680E Compression Method    0000 (0) 'Stored'\n-036810 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-036814 CRC                   00000000 (0)\n-036818 Compressed Size       00000000 (0)\n-03681C Uncompressed Size     00000000 (0)\n-036820 Filename Length       007B (123)\n-036822 Extra Length          0009 (9)\n-036824 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x36824: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03689F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0368A1   Length              0005 (5)\n-0368A3   Flags               01 (1) 'Modification'\n-0368A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0368A8 LOCAL HEADER #113     04034B50 (67324752)\n-0368AC Extract Zip Spec      14 (20) '2.0'\n-0368AD Extract OS            00 (0) 'MS-DOS'\n-0368AE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0368B0 Compression Method    0000 (0) 'Stored'\n-0368B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0368B6 CRC                   00000000 (0)\n-0368BA Compressed Size       00000000 (0)\n-0368BE Uncompressed Size     00000000 (0)\n-0368C2 Filename Length       0091 (145)\n-0368C4 Extra Length          0009 (9)\n-0368C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+039B67 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+039B69   Length              0005 (5)\n+039B6B   Flags               01 (1) 'Modification'\n+039B6C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+039B70 PAYLOAD\n+\n+03A1BE DATA DESCRIPTOR       08074B50 (134695760)\n+03A1C2 CRC                   9AFFB21B (2600448539)\n+03A1C6 Compressed Size       0000064E (1614)\n+03A1CA Uncompressed Size     0000064E (1614)\n+\n+03A1CE LOCAL HEADER #112     04034B50 (67324752)\n+03A1D2 Extract Zip Spec      14 (20) '2.0'\n+03A1D3 Extract OS            00 (0) 'MS-DOS'\n+03A1D4 General Purpose Flag  0000 (0)\n+03A1D6 Compression Method    0000 (0) 'Stored'\n+03A1D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03A1DC CRC                   00000000 (0)\n+03A1E0 Compressed Size       00000000 (0)\n+03A1E4 Uncompressed Size     00000000 (0)\n+03A1E8 Filename Length       007B (123)\n+03A1EA Extra Length          0009 (9)\n+03A1EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3A1EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03A267 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03A269   Length              0005 (5)\n+03A26B   Flags               01 (1) 'Modification'\n+03A26C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03A270 LOCAL HEADER #113     04034B50 (67324752)\n+03A274 Extract Zip Spec      14 (20) '2.0'\n+03A275 Extract OS            00 (0) 'MS-DOS'\n+03A276 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03A278 Compression Method    0000 (0) 'Stored'\n+03A27A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03A27E CRC                   00000000 (0)\n+03A282 Compressed Size       00000000 (0)\n+03A286 Uncompressed Size     00000000 (0)\n+03A28A Filename Length       0091 (145)\n+03A28C Extra Length          0009 (9)\n+03A28E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x368C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3A28E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-036957 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-036959   Length              0005 (5)\n-03695B   Flags               01 (1) 'Modification'\n-03695C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-036960 PAYLOAD\n-\n-0373AF DATA DESCRIPTOR       08074B50 (134695760)\n-0373B3 CRC                   88CF36AA (2295281322)\n-0373B7 Compressed Size       00000A4F (2639)\n-0373BB Uncompressed Size     00000A4F (2639)\n-\n-0373BF LOCAL HEADER #114     04034B50 (67324752)\n-0373C3 Extract Zip Spec      14 (20) '2.0'\n-0373C4 Extract OS            00 (0) 'MS-DOS'\n-0373C5 General Purpose Flag  0000 (0)\n-0373C7 Compression Method    0000 (0) 'Stored'\n-0373C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0373CD CRC                   00000000 (0)\n-0373D1 Compressed Size       00000000 (0)\n-0373D5 Uncompressed Size     00000000 (0)\n-0373D9 Filename Length       0084 (132)\n-0373DB Extra Length          0009 (9)\n-0373DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03A31F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03A321   Length              0005 (5)\n+03A323   Flags               01 (1) 'Modification'\n+03A324   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03A328 PAYLOAD\n+\n+03AD77 DATA DESCRIPTOR       08074B50 (134695760)\n+03AD7B CRC                   88CF36AA (2295281322)\n+03AD7F Compressed Size       00000A4F (2639)\n+03AD83 Uncompressed Size     00000A4F (2639)\n+\n+03AD87 LOCAL HEADER #114     04034B50 (67324752)\n+03AD8B Extract Zip Spec      14 (20) '2.0'\n+03AD8C Extract OS            00 (0) 'MS-DOS'\n+03AD8D General Purpose Flag  0000 (0)\n+03AD8F Compression Method    0000 (0) 'Stored'\n+03AD91 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03AD95 CRC                   00000000 (0)\n+03AD99 Compressed Size       00000000 (0)\n+03AD9D Uncompressed Size     00000000 (0)\n+03ADA1 Filename Length       0084 (132)\n+03ADA3 Extra Length          0009 (9)\n+03ADA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x373DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3ADA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-037461 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-037463   Length              0005 (5)\n-037465   Flags               01 (1) 'Modification'\n-037466   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03746A LOCAL HEADER #115     04034B50 (67324752)\n-03746E Extract Zip Spec      14 (20) '2.0'\n-03746F Extract OS            00 (0) 'MS-DOS'\n-037470 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-037472 Compression Method    0000 (0) 'Stored'\n-037474 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-037478 CRC                   00000000 (0)\n-03747C Compressed Size       00000000 (0)\n-037480 Uncompressed Size     00000000 (0)\n-037484 Filename Length       009A (154)\n-037486 Extra Length          0009 (9)\n-037488 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03AE29 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03AE2B   Length              0005 (5)\n+03AE2D   Flags               01 (1) 'Modification'\n+03AE2E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03AE32 LOCAL HEADER #115     04034B50 (67324752)\n+03AE36 Extract Zip Spec      14 (20) '2.0'\n+03AE37 Extract OS            00 (0) 'MS-DOS'\n+03AE38 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03AE3A Compression Method    0000 (0) 'Stored'\n+03AE3C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03AE40 CRC                   00000000 (0)\n+03AE44 Compressed Size       00000000 (0)\n+03AE48 Uncompressed Size     00000000 (0)\n+03AE4C Filename Length       009A (154)\n+03AE4E Extra Length          0009 (9)\n+03AE50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x37488: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3AE50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-037522 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-037524   Length              0005 (5)\n-037526   Flags               01 (1) 'Modification'\n-037527   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03752B PAYLOAD\n-\n-038230 DATA DESCRIPTOR       08074B50 (134695760)\n-038234 CRC                   9593555C (2509460828)\n-038238 Compressed Size       00000D05 (3333)\n-03823C Uncompressed Size     00000D05 (3333)\n-\n-038240 LOCAL HEADER #116     04034B50 (67324752)\n-038244 Extract Zip Spec      14 (20) '2.0'\n-038245 Extract OS            00 (0) 'MS-DOS'\n-038246 General Purpose Flag  0000 (0)\n-038248 Compression Method    0000 (0) 'Stored'\n-03824A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03824E CRC                   00000000 (0)\n-038252 Compressed Size       00000000 (0)\n-038256 Uncompressed Size     00000000 (0)\n-03825A Filename Length       0079 (121)\n-03825C Extra Length          0009 (9)\n-03825E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3825E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0382D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0382D9   Length              0005 (5)\n-0382DB   Flags               01 (1) 'Modification'\n-0382DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0382E0 LOCAL HEADER #117     04034B50 (67324752)\n-0382E4 Extract Zip Spec      14 (20) '2.0'\n-0382E5 Extract OS            00 (0) 'MS-DOS'\n-0382E6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0382E8 Compression Method    0000 (0) 'Stored'\n-0382EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0382EE CRC                   00000000 (0)\n-0382F2 Compressed Size       00000000 (0)\n-0382F6 Uncompressed Size     00000000 (0)\n-0382FA Filename Length       008F (143)\n-0382FC Extra Length          0009 (9)\n-0382FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03AEEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03AEEC   Length              0005 (5)\n+03AEEE   Flags               01 (1) 'Modification'\n+03AEEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03AEF3 PAYLOAD\n+\n+03BBF8 DATA DESCRIPTOR       08074B50 (134695760)\n+03BBFC CRC                   9593555C (2509460828)\n+03BC00 Compressed Size       00000D05 (3333)\n+03BC04 Uncompressed Size     00000D05 (3333)\n+\n+03BC08 LOCAL HEADER #116     04034B50 (67324752)\n+03BC0C Extract Zip Spec      14 (20) '2.0'\n+03BC0D Extract OS            00 (0) 'MS-DOS'\n+03BC0E General Purpose Flag  0000 (0)\n+03BC10 Compression Method    0000 (0) 'Stored'\n+03BC12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03BC16 CRC                   00000000 (0)\n+03BC1A Compressed Size       00000000 (0)\n+03BC1E Uncompressed Size     00000000 (0)\n+03BC22 Filename Length       0079 (121)\n+03BC24 Extra Length          0009 (9)\n+03BC26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3BC26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03BC9F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03BCA1   Length              0005 (5)\n+03BCA3   Flags               01 (1) 'Modification'\n+03BCA4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03BCA8 LOCAL HEADER #117     04034B50 (67324752)\n+03BCAC Extract Zip Spec      14 (20) '2.0'\n+03BCAD Extract OS            00 (0) 'MS-DOS'\n+03BCAE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03BCB0 Compression Method    0000 (0) 'Stored'\n+03BCB2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03BCB6 CRC                   00000000 (0)\n+03BCBA Compressed Size       00000000 (0)\n+03BCBE Uncompressed Size     00000000 (0)\n+03BCC2 Filename Length       008F (143)\n+03BCC4 Extra Length          0009 (9)\n+03BCC6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x382FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3BCC6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03838D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03838F   Length              0005 (5)\n-038391   Flags               01 (1) 'Modification'\n-038392   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-038396 PAYLOAD\n-\n-039773 DATA DESCRIPTOR       08074B50 (134695760)\n-039777 CRC                   9640338D (2520789901)\n-03977B Compressed Size       000013DD (5085)\n-03977F Uncompressed Size     000013DD (5085)\n-\n-039783 LOCAL HEADER #118     04034B50 (67324752)\n-039787 Extract Zip Spec      14 (20) '2.0'\n-039788 Extract OS            00 (0) 'MS-DOS'\n-039789 General Purpose Flag  0000 (0)\n-03978B Compression Method    0000 (0) 'Stored'\n-03978D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-039791 CRC                   00000000 (0)\n-039795 Compressed Size       00000000 (0)\n-039799 Uncompressed Size     00000000 (0)\n-03979D Filename Length       007B (123)\n-03979F Extra Length          0009 (9)\n-0397A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x397A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03981C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03981E   Length              0005 (5)\n-039820   Flags               01 (1) 'Modification'\n-039821   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-039825 LOCAL HEADER #119     04034B50 (67324752)\n-039829 Extract Zip Spec      14 (20) '2.0'\n-03982A Extract OS            00 (0) 'MS-DOS'\n-03982B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03982D Compression Method    0000 (0) 'Stored'\n-03982F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-039833 CRC                   00000000 (0)\n-039837 Compressed Size       00000000 (0)\n-03983B Uncompressed Size     00000000 (0)\n-03983F Filename Length       0091 (145)\n-039841 Extra Length          0009 (9)\n-039843 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03BD55 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03BD57   Length              0005 (5)\n+03BD59   Flags               01 (1) 'Modification'\n+03BD5A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03BD5E PAYLOAD\n+\n+03D13B DATA DESCRIPTOR       08074B50 (134695760)\n+03D13F CRC                   9640338D (2520789901)\n+03D143 Compressed Size       000013DD (5085)\n+03D147 Uncompressed Size     000013DD (5085)\n+\n+03D14B LOCAL HEADER #118     04034B50 (67324752)\n+03D14F Extract Zip Spec      14 (20) '2.0'\n+03D150 Extract OS            00 (0) 'MS-DOS'\n+03D151 General Purpose Flag  0000 (0)\n+03D153 Compression Method    0000 (0) 'Stored'\n+03D155 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03D159 CRC                   00000000 (0)\n+03D15D Compressed Size       00000000 (0)\n+03D161 Uncompressed Size     00000000 (0)\n+03D165 Filename Length       007B (123)\n+03D167 Extra Length          0009 (9)\n+03D169 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3D169: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03D1E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03D1E6   Length              0005 (5)\n+03D1E8   Flags               01 (1) 'Modification'\n+03D1E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03D1ED LOCAL HEADER #119     04034B50 (67324752)\n+03D1F1 Extract Zip Spec      14 (20) '2.0'\n+03D1F2 Extract OS            00 (0) 'MS-DOS'\n+03D1F3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03D1F5 Compression Method    0000 (0) 'Stored'\n+03D1F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03D1FB CRC                   00000000 (0)\n+03D1FF Compressed Size       00000000 (0)\n+03D203 Uncompressed Size     00000000 (0)\n+03D207 Filename Length       0091 (145)\n+03D209 Extra Length          0009 (9)\n+03D20B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x39843: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3D20B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0398D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0398D6   Length              0005 (5)\n-0398D8   Flags               01 (1) 'Modification'\n-0398D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0398DD PAYLOAD\n-\n-03B4FC DATA DESCRIPTOR       08074B50 (134695760)\n-03B500 CRC                   5232B519 (1379054873)\n-03B504 Compressed Size       00001C1F (7199)\n-03B508 Uncompressed Size     00001C1F (7199)\n-\n-03B50C LOCAL HEADER #120     04034B50 (67324752)\n-03B510 Extract Zip Spec      14 (20) '2.0'\n-03B511 Extract OS            00 (0) 'MS-DOS'\n-03B512 General Purpose Flag  0000 (0)\n-03B514 Compression Method    0000 (0) 'Stored'\n-03B516 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03B51A CRC                   00000000 (0)\n-03B51E Compressed Size       00000000 (0)\n-03B522 Uncompressed Size     00000000 (0)\n-03B526 Filename Length       0078 (120)\n-03B528 Extra Length          0009 (9)\n-03B52A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3B52A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03B5A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03B5A4   Length              0005 (5)\n-03B5A6   Flags               01 (1) 'Modification'\n-03B5A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03B5AB LOCAL HEADER #121     04034B50 (67324752)\n-03B5AF Extract Zip Spec      14 (20) '2.0'\n-03B5B0 Extract OS            00 (0) 'MS-DOS'\n-03B5B1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03B5B3 Compression Method    0000 (0) 'Stored'\n-03B5B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03B5B9 CRC                   00000000 (0)\n-03B5BD Compressed Size       00000000 (0)\n-03B5C1 Uncompressed Size     00000000 (0)\n-03B5C5 Filename Length       008E (142)\n-03B5C7 Extra Length          0009 (9)\n-03B5C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03D29C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03D29E   Length              0005 (5)\n+03D2A0   Flags               01 (1) 'Modification'\n+03D2A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03D2A5 PAYLOAD\n+\n+03EEC4 DATA DESCRIPTOR       08074B50 (134695760)\n+03EEC8 CRC                   5232B519 (1379054873)\n+03EECC Compressed Size       00001C1F (7199)\n+03EED0 Uncompressed Size     00001C1F (7199)\n+\n+03EED4 LOCAL HEADER #120     04034B50 (67324752)\n+03EED8 Extract Zip Spec      14 (20) '2.0'\n+03EED9 Extract OS            00 (0) 'MS-DOS'\n+03EEDA General Purpose Flag  0000 (0)\n+03EEDC Compression Method    0000 (0) 'Stored'\n+03EEDE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03EEE2 CRC                   00000000 (0)\n+03EEE6 Compressed Size       00000000 (0)\n+03EEEA Uncompressed Size     00000000 (0)\n+03EEEE Filename Length       0078 (120)\n+03EEF0 Extra Length          0009 (9)\n+03EEF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3EEF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03EF6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03EF6C   Length              0005 (5)\n+03EF6E   Flags               01 (1) 'Modification'\n+03EF6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03EF73 LOCAL HEADER #121     04034B50 (67324752)\n+03EF77 Extract Zip Spec      14 (20) '2.0'\n+03EF78 Extract OS            00 (0) 'MS-DOS'\n+03EF79 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03EF7B Compression Method    0000 (0) 'Stored'\n+03EF7D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03EF81 CRC                   00000000 (0)\n+03EF85 Compressed Size       00000000 (0)\n+03EF89 Uncompressed Size     00000000 (0)\n+03EF8D Filename Length       008E (142)\n+03EF8F Extra Length          0009 (9)\n+03EF91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0x3B5C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3EF91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03B657 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03B659   Length              0005 (5)\n-03B65B   Flags               01 (1) 'Modification'\n-03B65C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03B660 PAYLOAD\n-\n-03CA36 DATA DESCRIPTOR       08074B50 (134695760)\n-03CA3A CRC                   57267C45 (1462139973)\n-03CA3E Compressed Size       000013D6 (5078)\n-03CA42 Uncompressed Size     000013D6 (5078)\n-\n-03CA46 LOCAL HEADER #122     04034B50 (67324752)\n-03CA4A Extract Zip Spec      14 (20) '2.0'\n-03CA4B Extract OS            00 (0) 'MS-DOS'\n-03CA4C General Purpose Flag  0000 (0)\n-03CA4E Compression Method    0000 (0) 'Stored'\n-03CA50 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03CA54 CRC                   00000000 (0)\n-03CA58 Compressed Size       00000000 (0)\n-03CA5C Uncompressed Size     00000000 (0)\n-03CA60 Filename Length       007F (127)\n-03CA62 Extra Length          0009 (9)\n-03CA64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3CA64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03CAE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03CAE5   Length              0005 (5)\n-03CAE7   Flags               01 (1) 'Modification'\n-03CAE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03CAEC LOCAL HEADER #123     04034B50 (67324752)\n-03CAF0 Extract Zip Spec      14 (20) '2.0'\n-03CAF1 Extract OS            00 (0) 'MS-DOS'\n-03CAF2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03CAF4 Compression Method    0000 (0) 'Stored'\n-03CAF6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03CAFA CRC                   00000000 (0)\n-03CAFE Compressed Size       00000000 (0)\n-03CB02 Uncompressed Size     00000000 (0)\n-03CB06 Filename Length       0095 (149)\n-03CB08 Extra Length          0009 (9)\n-03CB0A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03F01F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03F021   Length              0005 (5)\n+03F023   Flags               01 (1) 'Modification'\n+03F024   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03F028 PAYLOAD\n+\n+0403FE DATA DESCRIPTOR       08074B50 (134695760)\n+040402 CRC                   57267C45 (1462139973)\n+040406 Compressed Size       000013D6 (5078)\n+04040A Uncompressed Size     000013D6 (5078)\n+\n+04040E LOCAL HEADER #122     04034B50 (67324752)\n+040412 Extract Zip Spec      14 (20) '2.0'\n+040413 Extract OS            00 (0) 'MS-DOS'\n+040414 General Purpose Flag  0000 (0)\n+040416 Compression Method    0000 (0) 'Stored'\n+040418 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04041C CRC                   00000000 (0)\n+040420 Compressed Size       00000000 (0)\n+040424 Uncompressed Size     00000000 (0)\n+040428 Filename Length       007F (127)\n+04042A Extra Length          0009 (9)\n+04042C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4042C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0404AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0404AD   Length              0005 (5)\n+0404AF   Flags               01 (1) 'Modification'\n+0404B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0404B4 LOCAL HEADER #123     04034B50 (67324752)\n+0404B8 Extract Zip Spec      14 (20) '2.0'\n+0404B9 Extract OS            00 (0) 'MS-DOS'\n+0404BA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0404BC Compression Method    0000 (0) 'Stored'\n+0404BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0404C2 CRC                   00000000 (0)\n+0404C6 Compressed Size       00000000 (0)\n+0404CA Uncompressed Size     00000000 (0)\n+0404CE Filename Length       0095 (149)\n+0404D0 Extra Length          0009 (9)\n+0404D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3CB0A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x404D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03CB9F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03CBA1   Length              0005 (5)\n-03CBA3   Flags               01 (1) 'Modification'\n-03CBA4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03CBA8 PAYLOAD\n-\n-03D2DE DATA DESCRIPTOR       08074B50 (134695760)\n-03D2E2 CRC                   333FC2BB (859816635)\n-03D2E6 Compressed Size       00000736 (1846)\n-03D2EA Uncompressed Size     00000736 (1846)\n-\n-03D2EE LOCAL HEADER #124     04034B50 (67324752)\n-03D2F2 Extract Zip Spec      14 (20) '2.0'\n-03D2F3 Extract OS            00 (0) 'MS-DOS'\n-03D2F4 General Purpose Flag  0000 (0)\n-03D2F6 Compression Method    0000 (0) 'Stored'\n-03D2F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03D2FC CRC                   00000000 (0)\n-03D300 Compressed Size       00000000 (0)\n-03D304 Uncompressed Size     00000000 (0)\n-03D308 Filename Length       0024 (36)\n-03D30A Extra Length          0009 (9)\n-03D30C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3D30C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03D330 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03D332   Length              0005 (5)\n-03D334   Flags               01 (1) 'Modification'\n-03D335   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03D339 LOCAL HEADER #125     04034B50 (67324752)\n-03D33D Extract Zip Spec      14 (20) '2.0'\n-03D33E Extract OS            00 (0) 'MS-DOS'\n-03D33F General Purpose Flag  0000 (0)\n-03D341 Compression Method    0000 (0) 'Stored'\n-03D343 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03D347 CRC                   00000000 (0)\n-03D34B Compressed Size       00000000 (0)\n-03D34F Uncompressed Size     00000000 (0)\n-03D353 Filename Length       002B (43)\n-03D355 Extra Length          0009 (9)\n-03D357 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3D357: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03D382 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03D384   Length              0005 (5)\n-03D386   Flags               01 (1) 'Modification'\n-03D387   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03D38B LOCAL HEADER #126     04034B50 (67324752)\n-03D38F Extract Zip Spec      14 (20) '2.0'\n-03D390 Extract OS            00 (0) 'MS-DOS'\n-03D391 General Purpose Flag  0000 (0)\n-03D393 Compression Method    0000 (0) 'Stored'\n-03D395 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03D399 CRC                   00000000 (0)\n-03D39D Compressed Size       00000000 (0)\n-03D3A1 Uncompressed Size     00000000 (0)\n-03D3A5 Filename Length       0058 (88)\n-03D3A7 Extra Length          0009 (9)\n-03D3A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3D3A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03D401 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03D403   Length              0005 (5)\n-03D405   Flags               01 (1) 'Modification'\n-03D406   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03D40A LOCAL HEADER #127     04034B50 (67324752)\n-03D40E Extract Zip Spec      14 (20) '2.0'\n-03D40F Extract OS            00 (0) 'MS-DOS'\n-03D410 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03D412 Compression Method    0000 (0) 'Stored'\n-03D414 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03D418 CRC                   00000000 (0)\n-03D41C Compressed Size       00000000 (0)\n-03D420 Uncompressed Size     00000000 (0)\n-03D424 Filename Length       006E (110)\n-03D426 Extra Length          0009 (9)\n-03D428 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3D428: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03D496 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03D498   Length              0005 (5)\n-03D49A   Flags               01 (1) 'Modification'\n-03D49B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03D49F PAYLOAD\n-\n-03DE6C DATA DESCRIPTOR       08074B50 (134695760)\n-03DE70 CRC                   10CC5E74 (281828980)\n-03DE74 Compressed Size       000009CD (2509)\n-03DE78 Uncompressed Size     000009CD (2509)\n-\n-03DE7C LOCAL HEADER #128     04034B50 (67324752)\n-03DE80 Extract Zip Spec      14 (20) '2.0'\n-03DE81 Extract OS            00 (0) 'MS-DOS'\n-03DE82 General Purpose Flag  0000 (0)\n-03DE84 Compression Method    0000 (0) 'Stored'\n-03DE86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03DE8A CRC                   00000000 (0)\n-03DE8E Compressed Size       00000000 (0)\n-03DE92 Uncompressed Size     00000000 (0)\n-03DE96 Filename Length       0058 (88)\n-03DE98 Extra Length          0009 (9)\n-03DE9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3DE9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03DEF2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03DEF4   Length              0005 (5)\n-03DEF6   Flags               01 (1) 'Modification'\n-03DEF7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03DEFB LOCAL HEADER #129     04034B50 (67324752)\n-03DEFF Extract Zip Spec      14 (20) '2.0'\n-03DF00 Extract OS            00 (0) 'MS-DOS'\n-03DF01 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03DF03 Compression Method    0000 (0) 'Stored'\n-03DF05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03DF09 CRC                   00000000 (0)\n-03DF0D Compressed Size       00000000 (0)\n-03DF11 Uncompressed Size     00000000 (0)\n-03DF15 Filename Length       006E (110)\n-03DF17 Extra Length          0009 (9)\n-03DF19 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3DF19: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03DF87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03DF89   Length              0005 (5)\n-03DF8B   Flags               01 (1) 'Modification'\n-03DF8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03DF90 PAYLOAD\n-\n-03E930 DATA DESCRIPTOR       08074B50 (134695760)\n-03E934 CRC                   5F6BF872 (1600911474)\n-03E938 Compressed Size       000009A0 (2464)\n-03E93C Uncompressed Size     000009A0 (2464)\n-\n-03E940 LOCAL HEADER #130     04034B50 (67324752)\n-03E944 Extract Zip Spec      14 (20) '2.0'\n-03E945 Extract OS            00 (0) 'MS-DOS'\n-03E946 General Purpose Flag  0000 (0)\n-03E948 Compression Method    0000 (0) 'Stored'\n-03E94A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03E94E CRC                   00000000 (0)\n-03E952 Compressed Size       00000000 (0)\n-03E956 Uncompressed Size     00000000 (0)\n-03E95A Filename Length       0023 (35)\n-03E95C Extra Length          0009 (9)\n-03E95E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E95E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03E981 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03E983   Length              0005 (5)\n-03E985   Flags               01 (1) 'Modification'\n-03E986   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03E98A LOCAL HEADER #131     04034B50 (67324752)\n-03E98E Extract Zip Spec      14 (20) '2.0'\n-03E98F Extract OS            00 (0) 'MS-DOS'\n-03E990 General Purpose Flag  0000 (0)\n-03E992 Compression Method    0000 (0) 'Stored'\n-03E994 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03E998 CRC                   00000000 (0)\n-03E99C Compressed Size       00000000 (0)\n-03E9A0 Uncompressed Size     00000000 (0)\n-03E9A4 Filename Length       002A (42)\n-03E9A6 Extra Length          0009 (9)\n-03E9A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E9A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03E9D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03E9D4   Length              0005 (5)\n-03E9D6   Flags               01 (1) 'Modification'\n-03E9D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03E9DB LOCAL HEADER #132     04034B50 (67324752)\n-03E9DF Extract Zip Spec      14 (20) '2.0'\n-03E9E0 Extract OS            00 (0) 'MS-DOS'\n-03E9E1 General Purpose Flag  0000 (0)\n-03E9E3 Compression Method    0000 (0) 'Stored'\n-03E9E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03E9E9 CRC                   00000000 (0)\n-03E9ED Compressed Size       00000000 (0)\n-03E9F1 Uncompressed Size     00000000 (0)\n-03E9F5 Filename Length       0054 (84)\n-03E9F7 Extra Length          0009 (9)\n-03E9F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E9F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03EA4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03EA4F   Length              0005 (5)\n-03EA51   Flags               01 (1) 'Modification'\n-03EA52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03EA56 LOCAL HEADER #133     04034B50 (67324752)\n-03EA5A Extract Zip Spec      14 (20) '2.0'\n-03EA5B Extract OS            00 (0) 'MS-DOS'\n-03EA5C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03EA5E Compression Method    0000 (0) 'Stored'\n-03EA60 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03EA64 CRC                   00000000 (0)\n-03EA68 Compressed Size       00000000 (0)\n-03EA6C Uncompressed Size     00000000 (0)\n-03EA70 Filename Length       006A (106)\n-03EA72 Extra Length          0009 (9)\n-03EA74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3EA74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03EADE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03EAE0   Length              0005 (5)\n-03EAE2   Flags               01 (1) 'Modification'\n-03EAE3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03EAE7 PAYLOAD\n-\n-03FC1C DATA DESCRIPTOR       08074B50 (134695760)\n-03FC20 CRC                   456B0BC9 (1164643273)\n-03FC24 Compressed Size       00001135 (4405)\n-03FC28 Uncompressed Size     00001135 (4405)\n-\n-03FC2C LOCAL HEADER #134     04034B50 (67324752)\n-03FC30 Extract Zip Spec      14 (20) '2.0'\n-03FC31 Extract OS            00 (0) 'MS-DOS'\n-03FC32 General Purpose Flag  0000 (0)\n-03FC34 Compression Method    0000 (0) 'Stored'\n-03FC36 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03FC3A CRC                   00000000 (0)\n-03FC3E Compressed Size       00000000 (0)\n-03FC42 Uncompressed Size     00000000 (0)\n-03FC46 Filename Length       0022 (34)\n-03FC48 Extra Length          0009 (9)\n-03FC4A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FC4A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03FC6C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03FC6E   Length              0005 (5)\n-03FC70   Flags               01 (1) 'Modification'\n-03FC71   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03FC75 LOCAL HEADER #135     04034B50 (67324752)\n-03FC79 Extract Zip Spec      14 (20) '2.0'\n-03FC7A Extract OS            00 (0) 'MS-DOS'\n-03FC7B General Purpose Flag  0000 (0)\n-03FC7D Compression Method    0000 (0) 'Stored'\n-03FC7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03FC83 CRC                   00000000 (0)\n-03FC87 Compressed Size       00000000 (0)\n-03FC8B Uncompressed Size     00000000 (0)\n-03FC8F Filename Length       0029 (41)\n-03FC91 Extra Length          0009 (9)\n-03FC93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FC93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03FCBC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03FCBE   Length              0005 (5)\n-03FCC0   Flags               01 (1) 'Modification'\n-03FCC1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03FCC5 LOCAL HEADER #136     04034B50 (67324752)\n-03FCC9 Extract Zip Spec      14 (20) '2.0'\n-03FCCA Extract OS            00 (0) 'MS-DOS'\n-03FCCB General Purpose Flag  0000 (0)\n-03FCCD Compression Method    0000 (0) 'Stored'\n-03FCCF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03FCD3 CRC                   00000000 (0)\n-03FCD7 Compressed Size       00000000 (0)\n-03FCDB Uncompressed Size     00000000 (0)\n-03FCDF Filename Length       005D (93)\n-03FCE1 Extra Length          0009 (9)\n-03FCE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FCE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03FD40 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03FD42   Length              0005 (5)\n-03FD44   Flags               01 (1) 'Modification'\n-03FD45   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03FD49 LOCAL HEADER #137     04034B50 (67324752)\n-03FD4D Extract Zip Spec      14 (20) '2.0'\n-03FD4E Extract OS            00 (0) 'MS-DOS'\n-03FD4F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03FD51 Compression Method    0000 (0) 'Stored'\n-03FD53 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03FD57 CRC                   00000000 (0)\n-03FD5B Compressed Size       00000000 (0)\n-03FD5F Uncompressed Size     00000000 (0)\n-03FD63 Filename Length       0073 (115)\n-03FD65 Extra Length          0009 (9)\n-03FD67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FD67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03FDDA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03FDDC   Length              0005 (5)\n-03FDDE   Flags               01 (1) 'Modification'\n-03FDDF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03FDE3 PAYLOAD\n-\n-0407C3 DATA DESCRIPTOR       08074B50 (134695760)\n-0407C7 CRC                   6A45582D (1782929453)\n-0407CB Compressed Size       000009E0 (2528)\n-0407CF Uncompressed Size     000009E0 (2528)\n-\n-0407D3 LOCAL HEADER #138     04034B50 (67324752)\n-0407D7 Extract Zip Spec      14 (20) '2.0'\n-0407D8 Extract OS            00 (0) 'MS-DOS'\n-0407D9 General Purpose Flag  0000 (0)\n-0407DB Compression Method    0000 (0) 'Stored'\n-0407DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0407E1 CRC                   00000000 (0)\n-0407E5 Compressed Size       00000000 (0)\n-0407E9 Uncompressed Size     00000000 (0)\n-0407ED Filename Length       005F (95)\n-0407EF Extra Length          0009 (9)\n-0407F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x407F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-040850 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-040852   Length              0005 (5)\n-040854   Flags               01 (1) 'Modification'\n-040855   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-040859 LOCAL HEADER #139     04034B50 (67324752)\n-04085D Extract Zip Spec      14 (20) '2.0'\n-04085E Extract OS            00 (0) 'MS-DOS'\n-04085F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-040861 Compression Method    0000 (0) 'Stored'\n-040863 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-040867 CRC                   00000000 (0)\n-04086B Compressed Size       00000000 (0)\n-04086F Uncompressed Size     00000000 (0)\n-040873 Filename Length       0075 (117)\n-040875 Extra Length          0009 (9)\n-040877 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40877: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0408EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0408EE   Length              0005 (5)\n-0408F0   Flags               01 (1) 'Modification'\n-0408F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0408F5 PAYLOAD\n-\n-041485 DATA DESCRIPTOR       08074B50 (134695760)\n-041489 CRC                   4731534C (1194414924)\n-04148D Compressed Size       00000B90 (2960)\n-041491 Uncompressed Size     00000B90 (2960)\n-\n-041495 LOCAL HEADER #140     04034B50 (67324752)\n-041499 Extract Zip Spec      14 (20) '2.0'\n-04149A Extract OS            00 (0) 'MS-DOS'\n-04149B General Purpose Flag  0000 (0)\n-04149D Compression Method    0000 (0) 'Stored'\n-04149F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0414A3 CRC                   00000000 (0)\n-0414A7 Compressed Size       00000000 (0)\n-0414AB Uncompressed Size     00000000 (0)\n-0414AF Filename Length       005E (94)\n-0414B1 Extra Length          0009 (9)\n-0414B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x414B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-041511 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-041513   Length              0005 (5)\n-041515   Flags               01 (1) 'Modification'\n-041516   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04151A LOCAL HEADER #141     04034B50 (67324752)\n-04151E Extract Zip Spec      14 (20) '2.0'\n-04151F Extract OS            00 (0) 'MS-DOS'\n-041520 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-041522 Compression Method    0000 (0) 'Stored'\n-041524 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-041528 CRC                   00000000 (0)\n-04152C Compressed Size       00000000 (0)\n-041530 Uncompressed Size     00000000 (0)\n-041534 Filename Length       0074 (116)\n-041536 Extra Length          0009 (9)\n-041538 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x41538: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0415AC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0415AE   Length              0005 (5)\n-0415B0   Flags               01 (1) 'Modification'\n-0415B1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0415B5 PAYLOAD\n-\n-042032 DATA DESCRIPTOR       08074B50 (134695760)\n-042036 CRC                   CEBA8B64 (3468331876)\n-04203A Compressed Size       00000A7D (2685)\n-04203E Uncompressed Size     00000A7D (2685)\n-\n-042042 LOCAL HEADER #142     04034B50 (67324752)\n-042046 Extract Zip Spec      14 (20) '2.0'\n-042047 Extract OS            00 (0) 'MS-DOS'\n-042048 General Purpose Flag  0000 (0)\n-04204A Compression Method    0000 (0) 'Stored'\n-04204C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-042050 CRC                   00000000 (0)\n-042054 Compressed Size       00000000 (0)\n-042058 Uncompressed Size     00000000 (0)\n-04205C Filename Length       005D (93)\n-04205E Extra Length          0009 (9)\n-042060 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x42060: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0420BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0420BF   Length              0005 (5)\n-0420C1   Flags               01 (1) 'Modification'\n-0420C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0420C6 LOCAL HEADER #143     04034B50 (67324752)\n-0420CA Extract Zip Spec      14 (20) '2.0'\n-0420CB Extract OS            00 (0) 'MS-DOS'\n-0420CC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0420CE Compression Method    0000 (0) 'Stored'\n-0420D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0420D4 CRC                   00000000 (0)\n-0420D8 Compressed Size       00000000 (0)\n-0420DC Uncompressed Size     00000000 (0)\n-0420E0 Filename Length       0073 (115)\n-0420E2 Extra Length          0009 (9)\n-0420E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x420E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-042157 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-042159   Length              0005 (5)\n-04215B   Flags               01 (1) 'Modification'\n-04215C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-042160 PAYLOAD\n-\n-042BF5 DATA DESCRIPTOR       08074B50 (134695760)\n-042BF9 CRC                   0DACEA84 (229436036)\n-042BFD Compressed Size       00000A95 (2709)\n-042C01 Uncompressed Size     00000A95 (2709)\n-\n-042C05 LOCAL HEADER #144     04034B50 (67324752)\n-042C09 Extract Zip Spec      14 (20) '2.0'\n-042C0A Extract OS            00 (0) 'MS-DOS'\n-042C0B General Purpose Flag  0000 (0)\n-042C0D Compression Method    0000 (0) 'Stored'\n-042C0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-042C13 CRC                   00000000 (0)\n-042C17 Compressed Size       00000000 (0)\n-042C1B Uncompressed Size     00000000 (0)\n-042C1F Filename Length       005E (94)\n-042C21 Extra Length          0009 (9)\n-042C23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x42C23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-042C81 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-042C83   Length              0005 (5)\n-042C85   Flags               01 (1) 'Modification'\n-042C86   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-042C8A LOCAL HEADER #145     04034B50 (67324752)\n-042C8E Extract Zip Spec      14 (20) '2.0'\n-042C8F Extract OS            00 (0) 'MS-DOS'\n-042C90 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-042C92 Compression Method    0000 (0) 'Stored'\n-042C94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-042C98 CRC                   00000000 (0)\n-042C9C Compressed Size       00000000 (0)\n-042CA0 Uncompressed Size     00000000 (0)\n-042CA4 Filename Length       0074 (116)\n-042CA6 Extra Length          0009 (9)\n-042CA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x42CA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-042D1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-042D1E   Length              0005 (5)\n-042D20   Flags               01 (1) 'Modification'\n-042D21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-042D25 PAYLOAD\n-\n-043F42 DATA DESCRIPTOR       08074B50 (134695760)\n-043F46 CRC                   2E84B239 (780448313)\n-043F4A Compressed Size       0000121D (4637)\n-043F4E Uncompressed Size     0000121D (4637)\n-\n-043F52 LOCAL HEADER #146     04034B50 (67324752)\n-043F56 Extract Zip Spec      14 (20) '2.0'\n-043F57 Extract OS            00 (0) 'MS-DOS'\n-043F58 General Purpose Flag  0000 (0)\n-043F5A Compression Method    0000 (0) 'Stored'\n-043F5C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-043F60 CRC                   00000000 (0)\n-043F64 Compressed Size       00000000 (0)\n-043F68 Uncompressed Size     00000000 (0)\n-043F6C Filename Length       0078 (120)\n-043F6E Extra Length          0009 (9)\n-043F70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x43F70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-043FE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-043FEA   Length              0005 (5)\n-043FEC   Flags               01 (1) 'Modification'\n-043FED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-043FF1 LOCAL HEADER #147     04034B50 (67324752)\n-043FF5 Extract Zip Spec      14 (20) '2.0'\n-043FF6 Extract OS            00 (0) 'MS-DOS'\n-043FF7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-043FF9 Compression Method    0000 (0) 'Stored'\n-043FFB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-043FFF CRC                   00000000 (0)\n-044003 Compressed Size       00000000 (0)\n-044007 Uncompressed Size     00000000 (0)\n-04400B Filename Length       008E (142)\n-04400D Extra Length          0009 (9)\n-04400F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+040567 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+040569   Length              0005 (5)\n+04056B   Flags               01 (1) 'Modification'\n+04056C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+040570 PAYLOAD\n+\n+040CA6 DATA DESCRIPTOR       08074B50 (134695760)\n+040CAA CRC                   333FC2BB (859816635)\n+040CAE Compressed Size       00000736 (1846)\n+040CB2 Uncompressed Size     00000736 (1846)\n+\n+040CB6 LOCAL HEADER #124     04034B50 (67324752)\n+040CBA Extract Zip Spec      14 (20) '2.0'\n+040CBB Extract OS            00 (0) 'MS-DOS'\n+040CBC General Purpose Flag  0000 (0)\n+040CBE Compression Method    0000 (0) 'Stored'\n+040CC0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+040CC4 CRC                   00000000 (0)\n+040CC8 Compressed Size       00000000 (0)\n+040CCC Uncompressed Size     00000000 (0)\n+040CD0 Filename Length       0024 (36)\n+040CD2 Extra Length          0009 (9)\n+040CD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40CD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+040CF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+040CFA   Length              0005 (5)\n+040CFC   Flags               01 (1) 'Modification'\n+040CFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+040D01 LOCAL HEADER #125     04034B50 (67324752)\n+040D05 Extract Zip Spec      14 (20) '2.0'\n+040D06 Extract OS            00 (0) 'MS-DOS'\n+040D07 General Purpose Flag  0000 (0)\n+040D09 Compression Method    0000 (0) 'Stored'\n+040D0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+040D0F CRC                   00000000 (0)\n+040D13 Compressed Size       00000000 (0)\n+040D17 Uncompressed Size     00000000 (0)\n+040D1B Filename Length       002B (43)\n+040D1D Extra Length          0009 (9)\n+040D1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40D1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+040D4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+040D4C   Length              0005 (5)\n+040D4E   Flags               01 (1) 'Modification'\n+040D4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+040D53 LOCAL HEADER #126     04034B50 (67324752)\n+040D57 Extract Zip Spec      14 (20) '2.0'\n+040D58 Extract OS            00 (0) 'MS-DOS'\n+040D59 General Purpose Flag  0000 (0)\n+040D5B Compression Method    0000 (0) 'Stored'\n+040D5D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+040D61 CRC                   00000000 (0)\n+040D65 Compressed Size       00000000 (0)\n+040D69 Uncompressed Size     00000000 (0)\n+040D6D Filename Length       0058 (88)\n+040D6F Extra Length          0009 (9)\n+040D71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40D71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+040DC9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+040DCB   Length              0005 (5)\n+040DCD   Flags               01 (1) 'Modification'\n+040DCE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+040DD2 LOCAL HEADER #127     04034B50 (67324752)\n+040DD6 Extract Zip Spec      14 (20) '2.0'\n+040DD7 Extract OS            00 (0) 'MS-DOS'\n+040DD8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+040DDA Compression Method    0000 (0) 'Stored'\n+040DDC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+040DE0 CRC                   00000000 (0)\n+040DE4 Compressed Size       00000000 (0)\n+040DE8 Uncompressed Size     00000000 (0)\n+040DEC Filename Length       006E (110)\n+040DEE Extra Length          0009 (9)\n+040DF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40DF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+040E5E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+040E60   Length              0005 (5)\n+040E62   Flags               01 (1) 'Modification'\n+040E63   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+040E67 PAYLOAD\n+\n+041834 DATA DESCRIPTOR       08074B50 (134695760)\n+041838 CRC                   10CC5E74 (281828980)\n+04183C Compressed Size       000009CD (2509)\n+041840 Uncompressed Size     000009CD (2509)\n+\n+041844 LOCAL HEADER #128     04034B50 (67324752)\n+041848 Extract Zip Spec      14 (20) '2.0'\n+041849 Extract OS            00 (0) 'MS-DOS'\n+04184A General Purpose Flag  0000 (0)\n+04184C Compression Method    0000 (0) 'Stored'\n+04184E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+041852 CRC                   00000000 (0)\n+041856 Compressed Size       00000000 (0)\n+04185A Uncompressed Size     00000000 (0)\n+04185E Filename Length       0058 (88)\n+041860 Extra Length          0009 (9)\n+041862 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41862: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0418BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0418BC   Length              0005 (5)\n+0418BE   Flags               01 (1) 'Modification'\n+0418BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0418C3 LOCAL HEADER #129     04034B50 (67324752)\n+0418C7 Extract Zip Spec      14 (20) '2.0'\n+0418C8 Extract OS            00 (0) 'MS-DOS'\n+0418C9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0418CB Compression Method    0000 (0) 'Stored'\n+0418CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0418D1 CRC                   00000000 (0)\n+0418D5 Compressed Size       00000000 (0)\n+0418D9 Uncompressed Size     00000000 (0)\n+0418DD Filename Length       006E (110)\n+0418DF Extra Length          0009 (9)\n+0418E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x418E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04194F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+041951   Length              0005 (5)\n+041953   Flags               01 (1) 'Modification'\n+041954   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+041958 PAYLOAD\n+\n+0422F8 DATA DESCRIPTOR       08074B50 (134695760)\n+0422FC CRC                   5F6BF872 (1600911474)\n+042300 Compressed Size       000009A0 (2464)\n+042304 Uncompressed Size     000009A0 (2464)\n+\n+042308 LOCAL HEADER #130     04034B50 (67324752)\n+04230C Extract Zip Spec      14 (20) '2.0'\n+04230D Extract OS            00 (0) 'MS-DOS'\n+04230E General Purpose Flag  0000 (0)\n+042310 Compression Method    0000 (0) 'Stored'\n+042312 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+042316 CRC                   00000000 (0)\n+04231A Compressed Size       00000000 (0)\n+04231E Uncompressed Size     00000000 (0)\n+042322 Filename Length       0023 (35)\n+042324 Extra Length          0009 (9)\n+042326 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x42326: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+042349 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04234B   Length              0005 (5)\n+04234D   Flags               01 (1) 'Modification'\n+04234E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+042352 LOCAL HEADER #131     04034B50 (67324752)\n+042356 Extract Zip Spec      14 (20) '2.0'\n+042357 Extract OS            00 (0) 'MS-DOS'\n+042358 General Purpose Flag  0000 (0)\n+04235A Compression Method    0000 (0) 'Stored'\n+04235C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+042360 CRC                   00000000 (0)\n+042364 Compressed Size       00000000 (0)\n+042368 Uncompressed Size     00000000 (0)\n+04236C Filename Length       002A (42)\n+04236E Extra Length          0009 (9)\n+042370 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x42370: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04239A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04239C   Length              0005 (5)\n+04239E   Flags               01 (1) 'Modification'\n+04239F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0423A3 LOCAL HEADER #132     04034B50 (67324752)\n+0423A7 Extract Zip Spec      14 (20) '2.0'\n+0423A8 Extract OS            00 (0) 'MS-DOS'\n+0423A9 General Purpose Flag  0000 (0)\n+0423AB Compression Method    0000 (0) 'Stored'\n+0423AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0423B1 CRC                   00000000 (0)\n+0423B5 Compressed Size       00000000 (0)\n+0423B9 Uncompressed Size     00000000 (0)\n+0423BD Filename Length       0054 (84)\n+0423BF Extra Length          0009 (9)\n+0423C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x423C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+042415 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+042417   Length              0005 (5)\n+042419   Flags               01 (1) 'Modification'\n+04241A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04241E LOCAL HEADER #133     04034B50 (67324752)\n+042422 Extract Zip Spec      14 (20) '2.0'\n+042423 Extract OS            00 (0) 'MS-DOS'\n+042424 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+042426 Compression Method    0000 (0) 'Stored'\n+042428 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04242C CRC                   00000000 (0)\n+042430 Compressed Size       00000000 (0)\n+042434 Uncompressed Size     00000000 (0)\n+042438 Filename Length       006A (106)\n+04243A Extra Length          0009 (9)\n+04243C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4243C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0424A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0424A8   Length              0005 (5)\n+0424AA   Flags               01 (1) 'Modification'\n+0424AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0424AF PAYLOAD\n+\n+0435E4 DATA DESCRIPTOR       08074B50 (134695760)\n+0435E8 CRC                   456B0BC9 (1164643273)\n+0435EC Compressed Size       00001135 (4405)\n+0435F0 Uncompressed Size     00001135 (4405)\n+\n+0435F4 LOCAL HEADER #134     04034B50 (67324752)\n+0435F8 Extract Zip Spec      14 (20) '2.0'\n+0435F9 Extract OS            00 (0) 'MS-DOS'\n+0435FA General Purpose Flag  0000 (0)\n+0435FC Compression Method    0000 (0) 'Stored'\n+0435FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+043602 CRC                   00000000 (0)\n+043606 Compressed Size       00000000 (0)\n+04360A Uncompressed Size     00000000 (0)\n+04360E Filename Length       0022 (34)\n+043610 Extra Length          0009 (9)\n+043612 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x43612: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+043634 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+043636   Length              0005 (5)\n+043638   Flags               01 (1) 'Modification'\n+043639   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04363D LOCAL HEADER #135     04034B50 (67324752)\n+043641 Extract Zip Spec      14 (20) '2.0'\n+043642 Extract OS            00 (0) 'MS-DOS'\n+043643 General Purpose Flag  0000 (0)\n+043645 Compression Method    0000 (0) 'Stored'\n+043647 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04364B CRC                   00000000 (0)\n+04364F Compressed Size       00000000 (0)\n+043653 Uncompressed Size     00000000 (0)\n+043657 Filename Length       0029 (41)\n+043659 Extra Length          0009 (9)\n+04365B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4365B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+043684 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+043686   Length              0005 (5)\n+043688   Flags               01 (1) 'Modification'\n+043689   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04368D LOCAL HEADER #136     04034B50 (67324752)\n+043691 Extract Zip Spec      14 (20) '2.0'\n+043692 Extract OS            00 (0) 'MS-DOS'\n+043693 General Purpose Flag  0000 (0)\n+043695 Compression Method    0000 (0) 'Stored'\n+043697 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04369B CRC                   00000000 (0)\n+04369F Compressed Size       00000000 (0)\n+0436A3 Uncompressed Size     00000000 (0)\n+0436A7 Filename Length       005D (93)\n+0436A9 Extra Length          0009 (9)\n+0436AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x436AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+043708 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04370A   Length              0005 (5)\n+04370C   Flags               01 (1) 'Modification'\n+04370D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+043711 LOCAL HEADER #137     04034B50 (67324752)\n+043715 Extract Zip Spec      14 (20) '2.0'\n+043716 Extract OS            00 (0) 'MS-DOS'\n+043717 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+043719 Compression Method    0000 (0) 'Stored'\n+04371B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04371F CRC                   00000000 (0)\n+043723 Compressed Size       00000000 (0)\n+043727 Uncompressed Size     00000000 (0)\n+04372B Filename Length       0073 (115)\n+04372D Extra Length          0009 (9)\n+04372F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4372F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0437A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0437A4   Length              0005 (5)\n+0437A6   Flags               01 (1) 'Modification'\n+0437A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0437AB PAYLOAD\n+\n+04418B DATA DESCRIPTOR       08074B50 (134695760)\n+04418F CRC                   6A45582D (1782929453)\n+044193 Compressed Size       000009E0 (2528)\n+044197 Uncompressed Size     000009E0 (2528)\n+\n+04419B LOCAL HEADER #138     04034B50 (67324752)\n+04419F Extract Zip Spec      14 (20) '2.0'\n+0441A0 Extract OS            00 (0) 'MS-DOS'\n+0441A1 General Purpose Flag  0000 (0)\n+0441A3 Compression Method    0000 (0) 'Stored'\n+0441A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0441A9 CRC                   00000000 (0)\n+0441AD Compressed Size       00000000 (0)\n+0441B1 Uncompressed Size     00000000 (0)\n+0441B5 Filename Length       005F (95)\n+0441B7 Extra Length          0009 (9)\n+0441B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x441B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+044218 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04421A   Length              0005 (5)\n+04421C   Flags               01 (1) 'Modification'\n+04421D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+044221 LOCAL HEADER #139     04034B50 (67324752)\n+044225 Extract Zip Spec      14 (20) '2.0'\n+044226 Extract OS            00 (0) 'MS-DOS'\n+044227 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+044229 Compression Method    0000 (0) 'Stored'\n+04422B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04422F CRC                   00000000 (0)\n+044233 Compressed Size       00000000 (0)\n+044237 Uncompressed Size     00000000 (0)\n+04423B Filename Length       0075 (117)\n+04423D Extra Length          0009 (9)\n+04423F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4423F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0442B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0442B6   Length              0005 (5)\n+0442B8   Flags               01 (1) 'Modification'\n+0442B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0442BD PAYLOAD\n+\n+044E4D DATA DESCRIPTOR       08074B50 (134695760)\n+044E51 CRC                   4731534C (1194414924)\n+044E55 Compressed Size       00000B90 (2960)\n+044E59 Uncompressed Size     00000B90 (2960)\n+\n+044E5D LOCAL HEADER #140     04034B50 (67324752)\n+044E61 Extract Zip Spec      14 (20) '2.0'\n+044E62 Extract OS            00 (0) 'MS-DOS'\n+044E63 General Purpose Flag  0000 (0)\n+044E65 Compression Method    0000 (0) 'Stored'\n+044E67 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+044E6B CRC                   00000000 (0)\n+044E6F Compressed Size       00000000 (0)\n+044E73 Uncompressed Size     00000000 (0)\n+044E77 Filename Length       005E (94)\n+044E79 Extra Length          0009 (9)\n+044E7B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x44E7B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+044ED9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+044EDB   Length              0005 (5)\n+044EDD   Flags               01 (1) 'Modification'\n+044EDE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+044EE2 LOCAL HEADER #141     04034B50 (67324752)\n+044EE6 Extract Zip Spec      14 (20) '2.0'\n+044EE7 Extract OS            00 (0) 'MS-DOS'\n+044EE8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+044EEA Compression Method    0000 (0) 'Stored'\n+044EEC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+044EF0 CRC                   00000000 (0)\n+044EF4 Compressed Size       00000000 (0)\n+044EF8 Uncompressed Size     00000000 (0)\n+044EFC Filename Length       0074 (116)\n+044EFE Extra Length          0009 (9)\n+044F00 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x44F00: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+044F74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+044F76   Length              0005 (5)\n+044F78   Flags               01 (1) 'Modification'\n+044F79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+044F7D PAYLOAD\n+\n+0459FA DATA DESCRIPTOR       08074B50 (134695760)\n+0459FE CRC                   CEBA8B64 (3468331876)\n+045A02 Compressed Size       00000A7D (2685)\n+045A06 Uncompressed Size     00000A7D (2685)\n+\n+045A0A LOCAL HEADER #142     04034B50 (67324752)\n+045A0E Extract Zip Spec      14 (20) '2.0'\n+045A0F Extract OS            00 (0) 'MS-DOS'\n+045A10 General Purpose Flag  0000 (0)\n+045A12 Compression Method    0000 (0) 'Stored'\n+045A14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+045A18 CRC                   00000000 (0)\n+045A1C Compressed Size       00000000 (0)\n+045A20 Uncompressed Size     00000000 (0)\n+045A24 Filename Length       005D (93)\n+045A26 Extra Length          0009 (9)\n+045A28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x45A28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+045A85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+045A87   Length              0005 (5)\n+045A89   Flags               01 (1) 'Modification'\n+045A8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+045A8E LOCAL HEADER #143     04034B50 (67324752)\n+045A92 Extract Zip Spec      14 (20) '2.0'\n+045A93 Extract OS            00 (0) 'MS-DOS'\n+045A94 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+045A96 Compression Method    0000 (0) 'Stored'\n+045A98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+045A9C CRC                   00000000 (0)\n+045AA0 Compressed Size       00000000 (0)\n+045AA4 Uncompressed Size     00000000 (0)\n+045AA8 Filename Length       0073 (115)\n+045AAA Extra Length          0009 (9)\n+045AAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x45AAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+045B1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+045B21   Length              0005 (5)\n+045B23   Flags               01 (1) 'Modification'\n+045B24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+045B28 PAYLOAD\n+\n+0465BD DATA DESCRIPTOR       08074B50 (134695760)\n+0465C1 CRC                   0DACEA84 (229436036)\n+0465C5 Compressed Size       00000A95 (2709)\n+0465C9 Uncompressed Size     00000A95 (2709)\n+\n+0465CD LOCAL HEADER #144     04034B50 (67324752)\n+0465D1 Extract Zip Spec      14 (20) '2.0'\n+0465D2 Extract OS            00 (0) 'MS-DOS'\n+0465D3 General Purpose Flag  0000 (0)\n+0465D5 Compression Method    0000 (0) 'Stored'\n+0465D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0465DB CRC                   00000000 (0)\n+0465DF Compressed Size       00000000 (0)\n+0465E3 Uncompressed Size     00000000 (0)\n+0465E7 Filename Length       005E (94)\n+0465E9 Extra Length          0009 (9)\n+0465EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x465EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+046649 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04664B   Length              0005 (5)\n+04664D   Flags               01 (1) 'Modification'\n+04664E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+046652 LOCAL HEADER #145     04034B50 (67324752)\n+046656 Extract Zip Spec      14 (20) '2.0'\n+046657 Extract OS            00 (0) 'MS-DOS'\n+046658 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04665A Compression Method    0000 (0) 'Stored'\n+04665C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+046660 CRC                   00000000 (0)\n+046664 Compressed Size       00000000 (0)\n+046668 Uncompressed Size     00000000 (0)\n+04666C Filename Length       0074 (116)\n+04666E Extra Length          0009 (9)\n+046670 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x46670: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0466E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0466E6   Length              0005 (5)\n+0466E8   Flags               01 (1) 'Modification'\n+0466E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0466ED PAYLOAD\n+\n+04790A DATA DESCRIPTOR       08074B50 (134695760)\n+04790E CRC                   2E84B239 (780448313)\n+047912 Compressed Size       0000121D (4637)\n+047916 Uncompressed Size     0000121D (4637)\n+\n+04791A LOCAL HEADER #146     04034B50 (67324752)\n+04791E Extract Zip Spec      14 (20) '2.0'\n+04791F Extract OS            00 (0) 'MS-DOS'\n+047920 General Purpose Flag  0000 (0)\n+047922 Compression Method    0000 (0) 'Stored'\n+047924 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+047928 CRC                   00000000 (0)\n+04792C Compressed Size       00000000 (0)\n+047930 Uncompressed Size     00000000 (0)\n+047934 Filename Length       0078 (120)\n+047936 Extra Length          0009 (9)\n+047938 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x47938: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0479B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0479B2   Length              0005 (5)\n+0479B4   Flags               01 (1) 'Modification'\n+0479B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0479B9 LOCAL HEADER #147     04034B50 (67324752)\n+0479BD Extract Zip Spec      14 (20) '2.0'\n+0479BE Extract OS            00 (0) 'MS-DOS'\n+0479BF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0479C1 Compression Method    0000 (0) 'Stored'\n+0479C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0479C7 CRC                   00000000 (0)\n+0479CB Compressed Size       00000000 (0)\n+0479CF Uncompressed Size     00000000 (0)\n+0479D3 Filename Length       008E (142)\n+0479D5 Extra Length          0009 (9)\n+0479D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0x4400F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x479D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04409D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04409F   Length              0005 (5)\n-0440A1   Flags               01 (1) 'Modification'\n-0440A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0440A6 PAYLOAD\n-\n-0447A1 DATA DESCRIPTOR       08074B50 (134695760)\n-0447A5 CRC                   10E7267F (283584127)\n-0447A9 Compressed Size       000006FB (1787)\n-0447AD Uncompressed Size     000006FB (1787)\n-\n-0447B1 LOCAL HEADER #148     04034B50 (67324752)\n-0447B5 Extract Zip Spec      14 (20) '2.0'\n-0447B6 Extract OS            00 (0) 'MS-DOS'\n-0447B7 General Purpose Flag  0000 (0)\n-0447B9 Compression Method    0000 (0) 'Stored'\n-0447BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0447BF CRC                   00000000 (0)\n-0447C3 Compressed Size       00000000 (0)\n-0447C7 Uncompressed Size     00000000 (0)\n-0447CB Filename Length       0079 (121)\n-0447CD Extra Length          0009 (9)\n-0447CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x447CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-044848 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04484A   Length              0005 (5)\n-04484C   Flags               01 (1) 'Modification'\n-04484D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-044851 LOCAL HEADER #149     04034B50 (67324752)\n-044855 Extract Zip Spec      14 (20) '2.0'\n-044856 Extract OS            00 (0) 'MS-DOS'\n-044857 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-044859 Compression Method    0000 (0) 'Stored'\n-04485B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04485F CRC                   00000000 (0)\n-044863 Compressed Size       00000000 (0)\n-044867 Uncompressed Size     00000000 (0)\n-04486B Filename Length       008F (143)\n-04486D Extra Length          0009 (9)\n-04486F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+047A65 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+047A67   Length              0005 (5)\n+047A69   Flags               01 (1) 'Modification'\n+047A6A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+047A6E PAYLOAD\n+\n+048169 DATA DESCRIPTOR       08074B50 (134695760)\n+04816D CRC                   10E7267F (283584127)\n+048171 Compressed Size       000006FB (1787)\n+048175 Uncompressed Size     000006FB (1787)\n+\n+048179 LOCAL HEADER #148     04034B50 (67324752)\n+04817D Extract Zip Spec      14 (20) '2.0'\n+04817E Extract OS            00 (0) 'MS-DOS'\n+04817F General Purpose Flag  0000 (0)\n+048181 Compression Method    0000 (0) 'Stored'\n+048183 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+048187 CRC                   00000000 (0)\n+04818B Compressed Size       00000000 (0)\n+04818F Uncompressed Size     00000000 (0)\n+048193 Filename Length       0079 (121)\n+048195 Extra Length          0009 (9)\n+048197 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x48197: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+048210 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+048212   Length              0005 (5)\n+048214   Flags               01 (1) 'Modification'\n+048215   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+048219 LOCAL HEADER #149     04034B50 (67324752)\n+04821D Extract Zip Spec      14 (20) '2.0'\n+04821E Extract OS            00 (0) 'MS-DOS'\n+04821F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+048221 Compression Method    0000 (0) 'Stored'\n+048223 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+048227 CRC                   00000000 (0)\n+04822B Compressed Size       00000000 (0)\n+04822F Uncompressed Size     00000000 (0)\n+048233 Filename Length       008F (143)\n+048235 Extra Length          0009 (9)\n+048237 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4486F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x48237: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0448FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-044900   Length              0005 (5)\n-044902   Flags               01 (1) 'Modification'\n-044903   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-044907 PAYLOAD\n-\n-045006 DATA DESCRIPTOR       08074B50 (134695760)\n-04500A CRC                   24E47A3B (618953275)\n-04500E Compressed Size       000006FF (1791)\n-045012 Uncompressed Size     000006FF (1791)\n-\n-045016 LOCAL HEADER #150     04034B50 (67324752)\n-04501A Extract Zip Spec      14 (20) '2.0'\n-04501B Extract OS            00 (0) 'MS-DOS'\n-04501C General Purpose Flag  0000 (0)\n-04501E Compression Method    0000 (0) 'Stored'\n-045020 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-045024 CRC                   00000000 (0)\n-045028 Compressed Size       00000000 (0)\n-04502C Uncompressed Size     00000000 (0)\n-045030 Filename Length       0074 (116)\n-045032 Extra Length          0009 (9)\n-045034 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x45034: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0450A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0450AA   Length              0005 (5)\n-0450AC   Flags               01 (1) 'Modification'\n-0450AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0450B1 LOCAL HEADER #151     04034B50 (67324752)\n-0450B5 Extract Zip Spec      14 (20) '2.0'\n-0450B6 Extract OS            00 (0) 'MS-DOS'\n-0450B7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0450B9 Compression Method    0000 (0) 'Stored'\n-0450BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0450BF CRC                   00000000 (0)\n-0450C3 Compressed Size       00000000 (0)\n-0450C7 Uncompressed Size     00000000 (0)\n-0450CB Filename Length       008A (138)\n-0450CD Extra Length          0009 (9)\n-0450CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0482C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0482C8   Length              0005 (5)\n+0482CA   Flags               01 (1) 'Modification'\n+0482CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0482CF PAYLOAD\n+\n+0489CE DATA DESCRIPTOR       08074B50 (134695760)\n+0489D2 CRC                   24E47A3B (618953275)\n+0489D6 Compressed Size       000006FF (1791)\n+0489DA Uncompressed Size     000006FF (1791)\n+\n+0489DE LOCAL HEADER #150     04034B50 (67324752)\n+0489E2 Extract Zip Spec      14 (20) '2.0'\n+0489E3 Extract OS            00 (0) 'MS-DOS'\n+0489E4 General Purpose Flag  0000 (0)\n+0489E6 Compression Method    0000 (0) 'Stored'\n+0489E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0489EC CRC                   00000000 (0)\n+0489F0 Compressed Size       00000000 (0)\n+0489F4 Uncompressed Size     00000000 (0)\n+0489F8 Filename Length       0074 (116)\n+0489FA Extra Length          0009 (9)\n+0489FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x489FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+048A70 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+048A72   Length              0005 (5)\n+048A74   Flags               01 (1) 'Modification'\n+048A75   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+048A79 LOCAL HEADER #151     04034B50 (67324752)\n+048A7D Extract Zip Spec      14 (20) '2.0'\n+048A7E Extract OS            00 (0) 'MS-DOS'\n+048A7F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+048A81 Compression Method    0000 (0) 'Stored'\n+048A83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+048A87 CRC                   00000000 (0)\n+048A8B Compressed Size       00000000 (0)\n+048A8F Uncompressed Size     00000000 (0)\n+048A93 Filename Length       008A (138)\n+048A95 Extra Length          0009 (9)\n+048A97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXX'\n #\n-# WARNING: Offset 0x450CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x48A97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-045159 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04515B   Length              0005 (5)\n-04515D   Flags               01 (1) 'Modification'\n-04515E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-045162 PAYLOAD\n-\n-0464C6 DATA DESCRIPTOR       08074B50 (134695760)\n-0464CA CRC                   042BB565 (69973349)\n-0464CE Compressed Size       00001364 (4964)\n-0464D2 Uncompressed Size     00001364 (4964)\n-\n-0464D6 LOCAL HEADER #152     04034B50 (67324752)\n-0464DA Extract Zip Spec      14 (20) '2.0'\n-0464DB Extract OS            00 (0) 'MS-DOS'\n-0464DC General Purpose Flag  0000 (0)\n-0464DE Compression Method    0000 (0) 'Stored'\n-0464E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0464E4 CRC                   00000000 (0)\n-0464E8 Compressed Size       00000000 (0)\n-0464EC Uncompressed Size     00000000 (0)\n-0464F0 Filename Length       0075 (117)\n-0464F2 Extra Length          0009 (9)\n-0464F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x464F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-046569 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04656B   Length              0005 (5)\n-04656D   Flags               01 (1) 'Modification'\n-04656E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-046572 LOCAL HEADER #153     04034B50 (67324752)\n-046576 Extract Zip Spec      14 (20) '2.0'\n-046577 Extract OS            00 (0) 'MS-DOS'\n-046578 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04657A Compression Method    0000 (0) 'Stored'\n-04657C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-046580 CRC                   00000000 (0)\n-046584 Compressed Size       00000000 (0)\n-046588 Uncompressed Size     00000000 (0)\n-04658C Filename Length       008B (139)\n-04658E Extra Length          0009 (9)\n-046590 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+048B21 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+048B23   Length              0005 (5)\n+048B25   Flags               01 (1) 'Modification'\n+048B26   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+048B2A PAYLOAD\n+\n+049E8E DATA DESCRIPTOR       08074B50 (134695760)\n+049E92 CRC                   042BB565 (69973349)\n+049E96 Compressed Size       00001364 (4964)\n+049E9A Uncompressed Size     00001364 (4964)\n+\n+049E9E LOCAL HEADER #152     04034B50 (67324752)\n+049EA2 Extract Zip Spec      14 (20) '2.0'\n+049EA3 Extract OS            00 (0) 'MS-DOS'\n+049EA4 General Purpose Flag  0000 (0)\n+049EA6 Compression Method    0000 (0) 'Stored'\n+049EA8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+049EAC CRC                   00000000 (0)\n+049EB0 Compressed Size       00000000 (0)\n+049EB4 Uncompressed Size     00000000 (0)\n+049EB8 Filename Length       0075 (117)\n+049EBA Extra Length          0009 (9)\n+049EBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x49EBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+049F31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+049F33   Length              0005 (5)\n+049F35   Flags               01 (1) 'Modification'\n+049F36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+049F3A LOCAL HEADER #153     04034B50 (67324752)\n+049F3E Extract Zip Spec      14 (20) '2.0'\n+049F3F Extract OS            00 (0) 'MS-DOS'\n+049F40 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+049F42 Compression Method    0000 (0) 'Stored'\n+049F44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+049F48 CRC                   00000000 (0)\n+049F4C Compressed Size       00000000 (0)\n+049F50 Uncompressed Size     00000000 (0)\n+049F54 Filename Length       008B (139)\n+049F56 Extra Length          0009 (9)\n+049F58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXX'\n #\n-# WARNING: Offset 0x46590: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x49F58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04661B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04661D   Length              0005 (5)\n-04661F   Flags               01 (1) 'Modification'\n-046620   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-046624 PAYLOAD\n-\n-0479E4 DATA DESCRIPTOR       08074B50 (134695760)\n-0479E8 CRC                   7A63232B (2053317419)\n-0479EC Compressed Size       000013C0 (5056)\n-0479F0 Uncompressed Size     000013C0 (5056)\n-\n-0479F4 LOCAL HEADER #154     04034B50 (67324752)\n-0479F8 Extract Zip Spec      14 (20) '2.0'\n-0479F9 Extract OS            00 (0) 'MS-DOS'\n-0479FA General Purpose Flag  0000 (0)\n-0479FC Compression Method    0000 (0) 'Stored'\n-0479FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-047A02 CRC                   00000000 (0)\n-047A06 Compressed Size       00000000 (0)\n-047A0A Uncompressed Size     00000000 (0)\n-047A0E Filename Length       0026 (38)\n-047A10 Extra Length          0009 (9)\n-047A12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x47A12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-047A38 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-047A3A   Length              0005 (5)\n-047A3C   Flags               01 (1) 'Modification'\n-047A3D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-047A41 LOCAL HEADER #155     04034B50 (67324752)\n-047A45 Extract Zip Spec      14 (20) '2.0'\n-047A46 Extract OS            00 (0) 'MS-DOS'\n-047A47 General Purpose Flag  0000 (0)\n-047A49 Compression Method    0000 (0) 'Stored'\n-047A4B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-047A4F CRC                   00000000 (0)\n-047A53 Compressed Size       00000000 (0)\n-047A57 Uncompressed Size     00000000 (0)\n-047A5B Filename Length       002D (45)\n-047A5D Extra Length          0009 (9)\n-047A5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x47A5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-047A8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-047A8E   Length              0005 (5)\n-047A90   Flags               01 (1) 'Modification'\n-047A91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-047A95 LOCAL HEADER #156     04034B50 (67324752)\n-047A99 Extract Zip Spec      14 (20) '2.0'\n-047A9A Extract OS            00 (0) 'MS-DOS'\n-047A9B General Purpose Flag  0000 (0)\n-047A9D Compression Method    0000 (0) 'Stored'\n-047A9F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-047AA3 CRC                   00000000 (0)\n-047AA7 Compressed Size       00000000 (0)\n-047AAB Uncompressed Size     00000000 (0)\n-047AAF Filename Length       005E (94)\n-047AB1 Extra Length          0009 (9)\n-047AB3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x47AB3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-047B11 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-047B13   Length              0005 (5)\n-047B15   Flags               01 (1) 'Modification'\n-047B16   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-047B1A LOCAL HEADER #157     04034B50 (67324752)\n-047B1E Extract Zip Spec      14 (20) '2.0'\n-047B1F Extract OS            00 (0) 'MS-DOS'\n-047B20 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-047B22 Compression Method    0000 (0) 'Stored'\n-047B24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-047B28 CRC                   00000000 (0)\n-047B2C Compressed Size       00000000 (0)\n-047B30 Uncompressed Size     00000000 (0)\n-047B34 Filename Length       0074 (116)\n-047B36 Extra Length          0009 (9)\n-047B38 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x47B38: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-047BAC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-047BAE   Length              0005 (5)\n-047BB0   Flags               01 (1) 'Modification'\n-047BB1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-047BB5 PAYLOAD\n-\n-0484E3 DATA DESCRIPTOR       08074B50 (134695760)\n-0484E7 CRC                   19888393 (428376979)\n-0484EB Compressed Size       0000092E (2350)\n-0484EF Uncompressed Size     0000092E (2350)\n-\n-0484F3 LOCAL HEADER #158     04034B50 (67324752)\n-0484F7 Extract Zip Spec      14 (20) '2.0'\n-0484F8 Extract OS            00 (0) 'MS-DOS'\n-0484F9 General Purpose Flag  0000 (0)\n-0484FB Compression Method    0000 (0) 'Stored'\n-0484FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-048501 CRC                   00000000 (0)\n-048505 Compressed Size       00000000 (0)\n-048509 Uncompressed Size     00000000 (0)\n-04850D Filename Length       0026 (38)\n-04850F Extra Length          0009 (9)\n-048511 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x48511: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-048537 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-048539   Length              0005 (5)\n-04853B   Flags               01 (1) 'Modification'\n-04853C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-048540 LOCAL HEADER #159     04034B50 (67324752)\n-048544 Extract Zip Spec      14 (20) '2.0'\n-048545 Extract OS            00 (0) 'MS-DOS'\n-048546 General Purpose Flag  0000 (0)\n-048548 Compression Method    0000 (0) 'Stored'\n-04854A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04854E CRC                   00000000 (0)\n-048552 Compressed Size       00000000 (0)\n-048556 Uncompressed Size     00000000 (0)\n-04855A Filename Length       002D (45)\n-04855C Extra Length          0009 (9)\n-04855E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4855E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04858B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04858D   Length              0005 (5)\n-04858F   Flags               01 (1) 'Modification'\n-048590   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-048594 LOCAL HEADER #160     04034B50 (67324752)\n-048598 Extract Zip Spec      14 (20) '2.0'\n-048599 Extract OS            00 (0) 'MS-DOS'\n-04859A General Purpose Flag  0000 (0)\n-04859C Compression Method    0000 (0) 'Stored'\n-04859E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0485A2 CRC                   00000000 (0)\n-0485A6 Compressed Size       00000000 (0)\n-0485AA Uncompressed Size     00000000 (0)\n-0485AE Filename Length       0064 (100)\n-0485B0 Extra Length          0009 (9)\n-0485B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x485B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-048616 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-048618   Length              0005 (5)\n-04861A   Flags               01 (1) 'Modification'\n-04861B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04861F LOCAL HEADER #161     04034B50 (67324752)\n-048623 Extract Zip Spec      14 (20) '2.0'\n-048624 Extract OS            00 (0) 'MS-DOS'\n-048625 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-048627 Compression Method    0000 (0) 'Stored'\n-048629 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04862D CRC                   00000000 (0)\n-048631 Compressed Size       00000000 (0)\n-048635 Uncompressed Size     00000000 (0)\n-048639 Filename Length       007A (122)\n-04863B Extra Length          0009 (9)\n-04863D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4863D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0486B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0486B9   Length              0005 (5)\n-0486BB   Flags               01 (1) 'Modification'\n-0486BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0486C0 PAYLOAD\n-\n-04A751 DATA DESCRIPTOR       08074B50 (134695760)\n-04A755 CRC                   8B1E3BB7 (2334014391)\n-04A759 Compressed Size       00002091 (8337)\n-04A75D Uncompressed Size     00002091 (8337)\n-\n-04A761 LOCAL HEADER #162     04034B50 (67324752)\n-04A765 Extract Zip Spec      14 (20) '2.0'\n-04A766 Extract OS            00 (0) 'MS-DOS'\n-04A767 General Purpose Flag  0000 (0)\n-04A769 Compression Method    0000 (0) 'Stored'\n-04A76B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04A76F CRC                   00000000 (0)\n-04A773 Compressed Size       00000000 (0)\n-04A777 Uncompressed Size     00000000 (0)\n-04A77B Filename Length       0025 (37)\n-04A77D Extra Length          0009 (9)\n-04A77F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4A77F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04A7A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04A7A6   Length              0005 (5)\n-04A7A8   Flags               01 (1) 'Modification'\n-04A7A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04A7AD LOCAL HEADER #163     04034B50 (67324752)\n-04A7B1 Extract Zip Spec      14 (20) '2.0'\n-04A7B2 Extract OS            00 (0) 'MS-DOS'\n-04A7B3 General Purpose Flag  0000 (0)\n-04A7B5 Compression Method    0000 (0) 'Stored'\n-04A7B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04A7BB CRC                   00000000 (0)\n-04A7BF Compressed Size       00000000 (0)\n-04A7C3 Uncompressed Size     00000000 (0)\n-04A7C7 Filename Length       002C (44)\n-04A7C9 Extra Length          0009 (9)\n-04A7CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4A7CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04A7F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04A7F9   Length              0005 (5)\n-04A7FB   Flags               01 (1) 'Modification'\n-04A7FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04A800 LOCAL HEADER #164     04034B50 (67324752)\n-04A804 Extract Zip Spec      14 (20) '2.0'\n-04A805 Extract OS            00 (0) 'MS-DOS'\n-04A806 General Purpose Flag  0000 (0)\n-04A808 Compression Method    0000 (0) 'Stored'\n-04A80A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04A80E CRC                   00000000 (0)\n-04A812 Compressed Size       00000000 (0)\n-04A816 Uncompressed Size     00000000 (0)\n-04A81A Filename Length       0067 (103)\n-04A81C Extra Length          0009 (9)\n-04A81E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4A81E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04A885 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04A887   Length              0005 (5)\n-04A889   Flags               01 (1) 'Modification'\n-04A88A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04A88E LOCAL HEADER #165     04034B50 (67324752)\n-04A892 Extract Zip Spec      14 (20) '2.0'\n-04A893 Extract OS            00 (0) 'MS-DOS'\n-04A894 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04A896 Compression Method    0000 (0) 'Stored'\n-04A898 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04A89C CRC                   00000000 (0)\n-04A8A0 Compressed Size       00000000 (0)\n-04A8A4 Uncompressed Size     00000000 (0)\n-04A8A8 Filename Length       007D (125)\n-04A8AA Extra Length          0009 (9)\n-04A8AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4A8AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04A929 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04A92B   Length              0005 (5)\n-04A92D   Flags               01 (1) 'Modification'\n-04A92E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04A932 PAYLOAD\n-\n-04BDB3 DATA DESCRIPTOR       08074B50 (134695760)\n-04BDB7 CRC                   EAE74E6F (3941027439)\n-04BDBB Compressed Size       00001481 (5249)\n-04BDBF Uncompressed Size     00001481 (5249)\n-\n-04BDC3 LOCAL HEADER #166     04034B50 (67324752)\n-04BDC7 Extract Zip Spec      14 (20) '2.0'\n-04BDC8 Extract OS            00 (0) 'MS-DOS'\n-04BDC9 General Purpose Flag  0000 (0)\n-04BDCB Compression Method    0000 (0) 'Stored'\n-04BDCD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04BDD1 CRC                   00000000 (0)\n-04BDD5 Compressed Size       00000000 (0)\n-04BDD9 Uncompressed Size     00000000 (0)\n-04BDDD Filename Length       0057 (87)\n-04BDDF Extra Length          0009 (9)\n-04BDE1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4BDE1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04BE38 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04BE3A   Length              0005 (5)\n-04BE3C   Flags               01 (1) 'Modification'\n-04BE3D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04BE41 LOCAL HEADER #167     04034B50 (67324752)\n-04BE45 Extract Zip Spec      14 (20) '2.0'\n-04BE46 Extract OS            00 (0) 'MS-DOS'\n-04BE47 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04BE49 Compression Method    0000 (0) 'Stored'\n-04BE4B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04BE4F CRC                   00000000 (0)\n-04BE53 Compressed Size       00000000 (0)\n-04BE57 Uncompressed Size     00000000 (0)\n-04BE5B Filename Length       006D (109)\n-04BE5D Extra Length          0009 (9)\n-04BE5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4BE5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04BECC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04BECE   Length              0005 (5)\n-04BED0   Flags               01 (1) 'Modification'\n-04BED1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04BED5 PAYLOAD\n-\n-04E49E DATA DESCRIPTOR       08074B50 (134695760)\n-04E4A2 CRC                   49F8AFD7 (1241034711)\n-04E4A6 Compressed Size       000025C9 (9673)\n-04E4AA Uncompressed Size     000025C9 (9673)\n-\n-04E4AE LOCAL HEADER #168     04034B50 (67324752)\n-04E4B2 Extract Zip Spec      14 (20) '2.0'\n-04E4B3 Extract OS            00 (0) 'MS-DOS'\n-04E4B4 General Purpose Flag  0000 (0)\n-04E4B6 Compression Method    0000 (0) 'Stored'\n-04E4B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04E4BC CRC                   00000000 (0)\n-04E4C0 Compressed Size       00000000 (0)\n-04E4C4 Uncompressed Size     00000000 (0)\n-04E4C8 Filename Length       0056 (86)\n-04E4CA Extra Length          0009 (9)\n-04E4CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4E4CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04E522 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04E524   Length              0005 (5)\n-04E526   Flags               01 (1) 'Modification'\n-04E527   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04E52B LOCAL HEADER #169     04034B50 (67324752)\n-04E52F Extract Zip Spec      14 (20) '2.0'\n-04E530 Extract OS            00 (0) 'MS-DOS'\n-04E531 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04E533 Compression Method    0000 (0) 'Stored'\n-04E535 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04E539 CRC                   00000000 (0)\n-04E53D Compressed Size       00000000 (0)\n-04E541 Uncompressed Size     00000000 (0)\n-04E545 Filename Length       006C (108)\n-04E547 Extra Length          0009 (9)\n-04E549 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4E549: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04E5B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04E5B7   Length              0005 (5)\n-04E5B9   Flags               01 (1) 'Modification'\n-04E5BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04E5BE PAYLOAD\n-\n-04F3CE DATA DESCRIPTOR       08074B50 (134695760)\n-04F3D2 CRC                   332580F8 (858095864)\n-04F3D6 Compressed Size       00000E10 (3600)\n-04F3DA Uncompressed Size     00000E10 (3600)\n-\n-04F3DE LOCAL HEADER #170     04034B50 (67324752)\n-04F3E2 Extract Zip Spec      14 (20) '2.0'\n-04F3E3 Extract OS            00 (0) 'MS-DOS'\n-04F3E4 General Purpose Flag  0000 (0)\n-04F3E6 Compression Method    0000 (0) 'Stored'\n-04F3E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04F3EC CRC                   00000000 (0)\n-04F3F0 Compressed Size       00000000 (0)\n-04F3F4 Uncompressed Size     00000000 (0)\n-04F3F8 Filename Length       002E (46)\n-04F3FA Extra Length          0009 (9)\n-04F3FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4F3FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04F42A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04F42C   Length              0005 (5)\n-04F42E   Flags               01 (1) 'Modification'\n-04F42F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04F433 LOCAL HEADER #171     04034B50 (67324752)\n-04F437 Extract Zip Spec      14 (20) '2.0'\n-04F438 Extract OS            00 (0) 'MS-DOS'\n-04F439 General Purpose Flag  0000 (0)\n-04F43B Compression Method    0000 (0) 'Stored'\n-04F43D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04F441 CRC                   00000000 (0)\n-04F445 Compressed Size       00000000 (0)\n-04F449 Uncompressed Size     00000000 (0)\n-04F44D Filename Length       0035 (53)\n-04F44F Extra Length          0009 (9)\n-04F451 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4F451: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04F486 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04F488   Length              0005 (5)\n-04F48A   Flags               01 (1) 'Modification'\n-04F48B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04F48F LOCAL HEADER #172     04034B50 (67324752)\n-04F493 Extract Zip Spec      14 (20) '2.0'\n-04F494 Extract OS            00 (0) 'MS-DOS'\n-04F495 General Purpose Flag  0000 (0)\n-04F497 Compression Method    0000 (0) 'Stored'\n-04F499 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04F49D CRC                   00000000 (0)\n-04F4A1 Compressed Size       00000000 (0)\n-04F4A5 Uncompressed Size     00000000 (0)\n-04F4A9 Filename Length       0079 (121)\n-04F4AB Extra Length          0009 (9)\n-04F4AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4F4AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04F526 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04F528   Length              0005 (5)\n-04F52A   Flags               01 (1) 'Modification'\n-04F52B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04F52F LOCAL HEADER #173     04034B50 (67324752)\n-04F533 Extract Zip Spec      14 (20) '2.0'\n-04F534 Extract OS            00 (0) 'MS-DOS'\n-04F535 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04F537 Compression Method    0000 (0) 'Stored'\n-04F539 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04F53D CRC                   00000000 (0)\n-04F541 Compressed Size       00000000 (0)\n-04F545 Uncompressed Size     00000000 (0)\n-04F549 Filename Length       008F (143)\n-04F54B Extra Length          0009 (9)\n-04F54D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+049FE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+049FE5   Length              0005 (5)\n+049FE7   Flags               01 (1) 'Modification'\n+049FE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+049FEC PAYLOAD\n+\n+04B3AC DATA DESCRIPTOR       08074B50 (134695760)\n+04B3B0 CRC                   7A63232B (2053317419)\n+04B3B4 Compressed Size       000013C0 (5056)\n+04B3B8 Uncompressed Size     000013C0 (5056)\n+\n+04B3BC LOCAL HEADER #154     04034B50 (67324752)\n+04B3C0 Extract Zip Spec      14 (20) '2.0'\n+04B3C1 Extract OS            00 (0) 'MS-DOS'\n+04B3C2 General Purpose Flag  0000 (0)\n+04B3C4 Compression Method    0000 (0) 'Stored'\n+04B3C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04B3CA CRC                   00000000 (0)\n+04B3CE Compressed Size       00000000 (0)\n+04B3D2 Uncompressed Size     00000000 (0)\n+04B3D6 Filename Length       0026 (38)\n+04B3D8 Extra Length          0009 (9)\n+04B3DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4B3DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04B400 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04B402   Length              0005 (5)\n+04B404   Flags               01 (1) 'Modification'\n+04B405   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04B409 LOCAL HEADER #155     04034B50 (67324752)\n+04B40D Extract Zip Spec      14 (20) '2.0'\n+04B40E Extract OS            00 (0) 'MS-DOS'\n+04B40F General Purpose Flag  0000 (0)\n+04B411 Compression Method    0000 (0) 'Stored'\n+04B413 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04B417 CRC                   00000000 (0)\n+04B41B Compressed Size       00000000 (0)\n+04B41F Uncompressed Size     00000000 (0)\n+04B423 Filename Length       002D (45)\n+04B425 Extra Length          0009 (9)\n+04B427 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4B427: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04B454 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04B456   Length              0005 (5)\n+04B458   Flags               01 (1) 'Modification'\n+04B459   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04B45D LOCAL HEADER #156     04034B50 (67324752)\n+04B461 Extract Zip Spec      14 (20) '2.0'\n+04B462 Extract OS            00 (0) 'MS-DOS'\n+04B463 General Purpose Flag  0000 (0)\n+04B465 Compression Method    0000 (0) 'Stored'\n+04B467 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04B46B CRC                   00000000 (0)\n+04B46F Compressed Size       00000000 (0)\n+04B473 Uncompressed Size     00000000 (0)\n+04B477 Filename Length       005E (94)\n+04B479 Extra Length          0009 (9)\n+04B47B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4B47B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04B4D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04B4DB   Length              0005 (5)\n+04B4DD   Flags               01 (1) 'Modification'\n+04B4DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04B4E2 LOCAL HEADER #157     04034B50 (67324752)\n+04B4E6 Extract Zip Spec      14 (20) '2.0'\n+04B4E7 Extract OS            00 (0) 'MS-DOS'\n+04B4E8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04B4EA Compression Method    0000 (0) 'Stored'\n+04B4EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04B4F0 CRC                   00000000 (0)\n+04B4F4 Compressed Size       00000000 (0)\n+04B4F8 Uncompressed Size     00000000 (0)\n+04B4FC Filename Length       0074 (116)\n+04B4FE Extra Length          0009 (9)\n+04B500 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4B500: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04B574 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04B576   Length              0005 (5)\n+04B578   Flags               01 (1) 'Modification'\n+04B579   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04B57D PAYLOAD\n+\n+04BEAB DATA DESCRIPTOR       08074B50 (134695760)\n+04BEAF CRC                   19888393 (428376979)\n+04BEB3 Compressed Size       0000092E (2350)\n+04BEB7 Uncompressed Size     0000092E (2350)\n+\n+04BEBB LOCAL HEADER #158     04034B50 (67324752)\n+04BEBF Extract Zip Spec      14 (20) '2.0'\n+04BEC0 Extract OS            00 (0) 'MS-DOS'\n+04BEC1 General Purpose Flag  0000 (0)\n+04BEC3 Compression Method    0000 (0) 'Stored'\n+04BEC5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04BEC9 CRC                   00000000 (0)\n+04BECD Compressed Size       00000000 (0)\n+04BED1 Uncompressed Size     00000000 (0)\n+04BED5 Filename Length       0026 (38)\n+04BED7 Extra Length          0009 (9)\n+04BED9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4BED9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04BEFF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04BF01   Length              0005 (5)\n+04BF03   Flags               01 (1) 'Modification'\n+04BF04   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04BF08 LOCAL HEADER #159     04034B50 (67324752)\n+04BF0C Extract Zip Spec      14 (20) '2.0'\n+04BF0D Extract OS            00 (0) 'MS-DOS'\n+04BF0E General Purpose Flag  0000 (0)\n+04BF10 Compression Method    0000 (0) 'Stored'\n+04BF12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04BF16 CRC                   00000000 (0)\n+04BF1A Compressed Size       00000000 (0)\n+04BF1E Uncompressed Size     00000000 (0)\n+04BF22 Filename Length       002D (45)\n+04BF24 Extra Length          0009 (9)\n+04BF26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4BF26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04BF53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04BF55   Length              0005 (5)\n+04BF57   Flags               01 (1) 'Modification'\n+04BF58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04BF5C LOCAL HEADER #160     04034B50 (67324752)\n+04BF60 Extract Zip Spec      14 (20) '2.0'\n+04BF61 Extract OS            00 (0) 'MS-DOS'\n+04BF62 General Purpose Flag  0000 (0)\n+04BF64 Compression Method    0000 (0) 'Stored'\n+04BF66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04BF6A CRC                   00000000 (0)\n+04BF6E Compressed Size       00000000 (0)\n+04BF72 Uncompressed Size     00000000 (0)\n+04BF76 Filename Length       0064 (100)\n+04BF78 Extra Length          0009 (9)\n+04BF7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4BF7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04BFDE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04BFE0   Length              0005 (5)\n+04BFE2   Flags               01 (1) 'Modification'\n+04BFE3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04BFE7 LOCAL HEADER #161     04034B50 (67324752)\n+04BFEB Extract Zip Spec      14 (20) '2.0'\n+04BFEC Extract OS            00 (0) 'MS-DOS'\n+04BFED General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04BFEF Compression Method    0000 (0) 'Stored'\n+04BFF1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04BFF5 CRC                   00000000 (0)\n+04BFF9 Compressed Size       00000000 (0)\n+04BFFD Uncompressed Size     00000000 (0)\n+04C001 Filename Length       007A (122)\n+04C003 Extra Length          0009 (9)\n+04C005 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4C005: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04C07F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04C081   Length              0005 (5)\n+04C083   Flags               01 (1) 'Modification'\n+04C084   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04C088 PAYLOAD\n+\n+04E119 DATA DESCRIPTOR       08074B50 (134695760)\n+04E11D CRC                   8B1E3BB7 (2334014391)\n+04E121 Compressed Size       00002091 (8337)\n+04E125 Uncompressed Size     00002091 (8337)\n+\n+04E129 LOCAL HEADER #162     04034B50 (67324752)\n+04E12D Extract Zip Spec      14 (20) '2.0'\n+04E12E Extract OS            00 (0) 'MS-DOS'\n+04E12F General Purpose Flag  0000 (0)\n+04E131 Compression Method    0000 (0) 'Stored'\n+04E133 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04E137 CRC                   00000000 (0)\n+04E13B Compressed Size       00000000 (0)\n+04E13F Uncompressed Size     00000000 (0)\n+04E143 Filename Length       0025 (37)\n+04E145 Extra Length          0009 (9)\n+04E147 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4E147: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04E16C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04E16E   Length              0005 (5)\n+04E170   Flags               01 (1) 'Modification'\n+04E171   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04E175 LOCAL HEADER #163     04034B50 (67324752)\n+04E179 Extract Zip Spec      14 (20) '2.0'\n+04E17A Extract OS            00 (0) 'MS-DOS'\n+04E17B General Purpose Flag  0000 (0)\n+04E17D Compression Method    0000 (0) 'Stored'\n+04E17F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04E183 CRC                   00000000 (0)\n+04E187 Compressed Size       00000000 (0)\n+04E18B Uncompressed Size     00000000 (0)\n+04E18F Filename Length       002C (44)\n+04E191 Extra Length          0009 (9)\n+04E193 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4E193: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04E1BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04E1C1   Length              0005 (5)\n+04E1C3   Flags               01 (1) 'Modification'\n+04E1C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04E1C8 LOCAL HEADER #164     04034B50 (67324752)\n+04E1CC Extract Zip Spec      14 (20) '2.0'\n+04E1CD Extract OS            00 (0) 'MS-DOS'\n+04E1CE General Purpose Flag  0000 (0)\n+04E1D0 Compression Method    0000 (0) 'Stored'\n+04E1D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04E1D6 CRC                   00000000 (0)\n+04E1DA Compressed Size       00000000 (0)\n+04E1DE Uncompressed Size     00000000 (0)\n+04E1E2 Filename Length       0067 (103)\n+04E1E4 Extra Length          0009 (9)\n+04E1E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4E1E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04E24D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04E24F   Length              0005 (5)\n+04E251   Flags               01 (1) 'Modification'\n+04E252   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04E256 LOCAL HEADER #165     04034B50 (67324752)\n+04E25A Extract Zip Spec      14 (20) '2.0'\n+04E25B Extract OS            00 (0) 'MS-DOS'\n+04E25C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04E25E Compression Method    0000 (0) 'Stored'\n+04E260 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04E264 CRC                   00000000 (0)\n+04E268 Compressed Size       00000000 (0)\n+04E26C Uncompressed Size     00000000 (0)\n+04E270 Filename Length       007D (125)\n+04E272 Extra Length          0009 (9)\n+04E274 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4E274: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04E2F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04E2F3   Length              0005 (5)\n+04E2F5   Flags               01 (1) 'Modification'\n+04E2F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04E2FA PAYLOAD\n+\n+04F77B DATA DESCRIPTOR       08074B50 (134695760)\n+04F77F CRC                   EAE74E6F (3941027439)\n+04F783 Compressed Size       00001481 (5249)\n+04F787 Uncompressed Size     00001481 (5249)\n+\n+04F78B LOCAL HEADER #166     04034B50 (67324752)\n+04F78F Extract Zip Spec      14 (20) '2.0'\n+04F790 Extract OS            00 (0) 'MS-DOS'\n+04F791 General Purpose Flag  0000 (0)\n+04F793 Compression Method    0000 (0) 'Stored'\n+04F795 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04F799 CRC                   00000000 (0)\n+04F79D Compressed Size       00000000 (0)\n+04F7A1 Uncompressed Size     00000000 (0)\n+04F7A5 Filename Length       0057 (87)\n+04F7A7 Extra Length          0009 (9)\n+04F7A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4F7A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04F800 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04F802   Length              0005 (5)\n+04F804   Flags               01 (1) 'Modification'\n+04F805   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04F809 LOCAL HEADER #167     04034B50 (67324752)\n+04F80D Extract Zip Spec      14 (20) '2.0'\n+04F80E Extract OS            00 (0) 'MS-DOS'\n+04F80F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04F811 Compression Method    0000 (0) 'Stored'\n+04F813 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04F817 CRC                   00000000 (0)\n+04F81B Compressed Size       00000000 (0)\n+04F81F Uncompressed Size     00000000 (0)\n+04F823 Filename Length       006D (109)\n+04F825 Extra Length          0009 (9)\n+04F827 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4F827: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04F894 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04F896   Length              0005 (5)\n+04F898   Flags               01 (1) 'Modification'\n+04F899   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04F89D PAYLOAD\n+\n+051E66 DATA DESCRIPTOR       08074B50 (134695760)\n+051E6A CRC                   49F8AFD7 (1241034711)\n+051E6E Compressed Size       000025C9 (9673)\n+051E72 Uncompressed Size     000025C9 (9673)\n+\n+051E76 LOCAL HEADER #168     04034B50 (67324752)\n+051E7A Extract Zip Spec      14 (20) '2.0'\n+051E7B Extract OS            00 (0) 'MS-DOS'\n+051E7C General Purpose Flag  0000 (0)\n+051E7E Compression Method    0000 (0) 'Stored'\n+051E80 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+051E84 CRC                   00000000 (0)\n+051E88 Compressed Size       00000000 (0)\n+051E8C Uncompressed Size     00000000 (0)\n+051E90 Filename Length       0056 (86)\n+051E92 Extra Length          0009 (9)\n+051E94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+051EEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+051EEC   Length              0005 (5)\n+051EEE   Flags               01 (1) 'Modification'\n+051EEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+051EF3 LOCAL HEADER #169     04034B50 (67324752)\n+051EF7 Extract Zip Spec      14 (20) '2.0'\n+051EF8 Extract OS            00 (0) 'MS-DOS'\n+051EF9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+051EFB Compression Method    0000 (0) 'Stored'\n+051EFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+051F01 CRC                   00000000 (0)\n+051F05 Compressed Size       00000000 (0)\n+051F09 Uncompressed Size     00000000 (0)\n+051F0D Filename Length       006C (108)\n+051F0F Extra Length          0009 (9)\n+051F11 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F11: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+051F7D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+051F7F   Length              0005 (5)\n+051F81   Flags               01 (1) 'Modification'\n+051F82   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+051F86 PAYLOAD\n+\n+052D96 DATA DESCRIPTOR       08074B50 (134695760)\n+052D9A CRC                   332580F8 (858095864)\n+052D9E Compressed Size       00000E10 (3600)\n+052DA2 Uncompressed Size     00000E10 (3600)\n+\n+052DA6 LOCAL HEADER #170     04034B50 (67324752)\n+052DAA Extract Zip Spec      14 (20) '2.0'\n+052DAB Extract OS            00 (0) 'MS-DOS'\n+052DAC General Purpose Flag  0000 (0)\n+052DAE Compression Method    0000 (0) 'Stored'\n+052DB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+052DB4 CRC                   00000000 (0)\n+052DB8 Compressed Size       00000000 (0)\n+052DBC Uncompressed Size     00000000 (0)\n+052DC0 Filename Length       002E (46)\n+052DC2 Extra Length          0009 (9)\n+052DC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52DC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+052DF2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+052DF4   Length              0005 (5)\n+052DF6   Flags               01 (1) 'Modification'\n+052DF7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+052DFB LOCAL HEADER #171     04034B50 (67324752)\n+052DFF Extract Zip Spec      14 (20) '2.0'\n+052E00 Extract OS            00 (0) 'MS-DOS'\n+052E01 General Purpose Flag  0000 (0)\n+052E03 Compression Method    0000 (0) 'Stored'\n+052E05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+052E09 CRC                   00000000 (0)\n+052E0D Compressed Size       00000000 (0)\n+052E11 Uncompressed Size     00000000 (0)\n+052E15 Filename Length       0035 (53)\n+052E17 Extra Length          0009 (9)\n+052E19 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52E19: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+052E4E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+052E50   Length              0005 (5)\n+052E52   Flags               01 (1) 'Modification'\n+052E53   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+052E57 LOCAL HEADER #172     04034B50 (67324752)\n+052E5B Extract Zip Spec      14 (20) '2.0'\n+052E5C Extract OS            00 (0) 'MS-DOS'\n+052E5D General Purpose Flag  0000 (0)\n+052E5F Compression Method    0000 (0) 'Stored'\n+052E61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+052E65 CRC                   00000000 (0)\n+052E69 Compressed Size       00000000 (0)\n+052E6D Uncompressed Size     00000000 (0)\n+052E71 Filename Length       0079 (121)\n+052E73 Extra Length          0009 (9)\n+052E75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52E75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+052EEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+052EF0   Length              0005 (5)\n+052EF2   Flags               01 (1) 'Modification'\n+052EF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+052EF7 LOCAL HEADER #173     04034B50 (67324752)\n+052EFB Extract Zip Spec      14 (20) '2.0'\n+052EFC Extract OS            00 (0) 'MS-DOS'\n+052EFD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+052EFF Compression Method    0000 (0) 'Stored'\n+052F01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+052F05 CRC                   00000000 (0)\n+052F09 Compressed Size       00000000 (0)\n+052F0D Uncompressed Size     00000000 (0)\n+052F11 Filename Length       008F (143)\n+052F13 Extra Length          0009 (9)\n+052F15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4F54D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x52F15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04F5DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04F5DE   Length              0005 (5)\n-04F5E0   Flags               01 (1) 'Modification'\n-04F5E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04F5E5 PAYLOAD\n-\n-051060 DATA DESCRIPTOR       08074B50 (134695760)\n-051064 CRC                   0D142FFC (219426812)\n-051068 Compressed Size       00001A7B (6779)\n-05106C Uncompressed Size     00001A7B (6779)\n-\n-051070 LOCAL HEADER #174     04034B50 (67324752)\n-051074 Extract Zip Spec      14 (20) '2.0'\n-051075 Extract OS            00 (0) 'MS-DOS'\n-051076 General Purpose Flag  0000 (0)\n-051078 Compression Method    0000 (0) 'Stored'\n-05107A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05107E CRC                   00000000 (0)\n-051082 Compressed Size       00000000 (0)\n-051086 Uncompressed Size     00000000 (0)\n-05108A Filename Length       0031 (49)\n-05108C Extra Length          0009 (9)\n-05108E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5108E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0510BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0510C1   Length              0005 (5)\n-0510C3   Flags               01 (1) 'Modification'\n-0510C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0510C8 LOCAL HEADER #175     04034B50 (67324752)\n-0510CC Extract Zip Spec      14 (20) '2.0'\n-0510CD Extract OS            00 (0) 'MS-DOS'\n-0510CE General Purpose Flag  0000 (0)\n-0510D0 Compression Method    0000 (0) 'Stored'\n-0510D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0510D6 CRC                   00000000 (0)\n-0510DA Compressed Size       00000000 (0)\n-0510DE Uncompressed Size     00000000 (0)\n-0510E2 Filename Length       0038 (56)\n-0510E4 Extra Length          0009 (9)\n-0510E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x510E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05111E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-051120   Length              0005 (5)\n-051122   Flags               01 (1) 'Modification'\n-051123   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-051127 LOCAL HEADER #176     04034B50 (67324752)\n-05112B Extract Zip Spec      14 (20) '2.0'\n-05112C Extract OS            00 (0) 'MS-DOS'\n-05112D General Purpose Flag  0000 (0)\n-05112F Compression Method    0000 (0) 'Stored'\n-051131 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-051135 CRC                   00000000 (0)\n-051139 Compressed Size       00000000 (0)\n-05113D Uncompressed Size     00000000 (0)\n-051141 Filename Length       007F (127)\n-051143 Extra Length          0009 (9)\n-051145 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51145: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0511C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0511C6   Length              0005 (5)\n-0511C8   Flags               01 (1) 'Modification'\n-0511C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0511CD LOCAL HEADER #177     04034B50 (67324752)\n-0511D1 Extract Zip Spec      14 (20) '2.0'\n-0511D2 Extract OS            00 (0) 'MS-DOS'\n-0511D3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0511D5 Compression Method    0000 (0) 'Stored'\n-0511D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0511DB CRC                   00000000 (0)\n-0511DF Compressed Size       00000000 (0)\n-0511E3 Uncompressed Size     00000000 (0)\n-0511E7 Filename Length       0095 (149)\n-0511E9 Extra Length          0009 (9)\n-0511EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+052FA4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+052FA6   Length              0005 (5)\n+052FA8   Flags               01 (1) 'Modification'\n+052FA9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+052FAD PAYLOAD\n+\n+054A28 DATA DESCRIPTOR       08074B50 (134695760)\n+054A2C CRC                   0D142FFC (219426812)\n+054A30 Compressed Size       00001A7B (6779)\n+054A34 Uncompressed Size     00001A7B (6779)\n+\n+054A38 LOCAL HEADER #174     04034B50 (67324752)\n+054A3C Extract Zip Spec      14 (20) '2.0'\n+054A3D Extract OS            00 (0) 'MS-DOS'\n+054A3E General Purpose Flag  0000 (0)\n+054A40 Compression Method    0000 (0) 'Stored'\n+054A42 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+054A46 CRC                   00000000 (0)\n+054A4A Compressed Size       00000000 (0)\n+054A4E Uncompressed Size     00000000 (0)\n+054A52 Filename Length       0031 (49)\n+054A54 Extra Length          0009 (9)\n+054A56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54A56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+054A87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+054A89   Length              0005 (5)\n+054A8B   Flags               01 (1) 'Modification'\n+054A8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+054A90 LOCAL HEADER #175     04034B50 (67324752)\n+054A94 Extract Zip Spec      14 (20) '2.0'\n+054A95 Extract OS            00 (0) 'MS-DOS'\n+054A96 General Purpose Flag  0000 (0)\n+054A98 Compression Method    0000 (0) 'Stored'\n+054A9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+054A9E CRC                   00000000 (0)\n+054AA2 Compressed Size       00000000 (0)\n+054AA6 Uncompressed Size     00000000 (0)\n+054AAA Filename Length       0038 (56)\n+054AAC Extra Length          0009 (9)\n+054AAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54AAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+054AE6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+054AE8   Length              0005 (5)\n+054AEA   Flags               01 (1) 'Modification'\n+054AEB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+054AEF LOCAL HEADER #176     04034B50 (67324752)\n+054AF3 Extract Zip Spec      14 (20) '2.0'\n+054AF4 Extract OS            00 (0) 'MS-DOS'\n+054AF5 General Purpose Flag  0000 (0)\n+054AF7 Compression Method    0000 (0) 'Stored'\n+054AF9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+054AFD CRC                   00000000 (0)\n+054B01 Compressed Size       00000000 (0)\n+054B05 Uncompressed Size     00000000 (0)\n+054B09 Filename Length       007F (127)\n+054B0B Extra Length          0009 (9)\n+054B0D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54B0D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+054B8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+054B8E   Length              0005 (5)\n+054B90   Flags               01 (1) 'Modification'\n+054B91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+054B95 LOCAL HEADER #177     04034B50 (67324752)\n+054B99 Extract Zip Spec      14 (20) '2.0'\n+054B9A Extract OS            00 (0) 'MS-DOS'\n+054B9B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+054B9D Compression Method    0000 (0) 'Stored'\n+054B9F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+054BA3 CRC                   00000000 (0)\n+054BA7 Compressed Size       00000000 (0)\n+054BAB Uncompressed Size     00000000 (0)\n+054BAF Filename Length       0095 (149)\n+054BB1 Extra Length          0009 (9)\n+054BB3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x511EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x54BB3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-051280 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-051282   Length              0005 (5)\n-051284   Flags               01 (1) 'Modification'\n-051285   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-051289 PAYLOAD\n-\n-051B0F DATA DESCRIPTOR       08074B50 (134695760)\n-051B13 CRC                   726CFBF2 (1919745010)\n-051B17 Compressed Size       00000886 (2182)\n-051B1B Uncompressed Size     00000886 (2182)\n-\n-051B1F LOCAL HEADER #178     04034B50 (67324752)\n-051B23 Extract Zip Spec      14 (20) '2.0'\n-051B24 Extract OS            00 (0) 'MS-DOS'\n-051B25 General Purpose Flag  0000 (0)\n-051B27 Compression Method    0000 (0) 'Stored'\n-051B29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-051B2D CRC                   00000000 (0)\n-051B31 Compressed Size       00000000 (0)\n-051B35 Uncompressed Size     00000000 (0)\n-051B39 Filename Length       0086 (134)\n-051B3B Extra Length          0009 (9)\n-051B3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+054C48 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+054C4A   Length              0005 (5)\n+054C4C   Flags               01 (1) 'Modification'\n+054C4D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+054C51 PAYLOAD\n+\n+0554D7 DATA DESCRIPTOR       08074B50 (134695760)\n+0554DB CRC                   726CFBF2 (1919745010)\n+0554DF Compressed Size       00000886 (2182)\n+0554E3 Uncompressed Size     00000886 (2182)\n+\n+0554E7 LOCAL HEADER #178     04034B50 (67324752)\n+0554EB Extract Zip Spec      14 (20) '2.0'\n+0554EC Extract OS            00 (0) 'MS-DOS'\n+0554ED General Purpose Flag  0000 (0)\n+0554EF Compression Method    0000 (0) 'Stored'\n+0554F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0554F5 CRC                   00000000 (0)\n+0554F9 Compressed Size       00000000 (0)\n+0554FD Uncompressed Size     00000000 (0)\n+055501 Filename Length       0086 (134)\n+055503 Extra Length          0009 (9)\n+055505 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x51B3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x55505: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-051BC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-051BC5   Length              0005 (5)\n-051BC7   Flags               01 (1) 'Modification'\n-051BC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-051BCC LOCAL HEADER #179     04034B50 (67324752)\n-051BD0 Extract Zip Spec      14 (20) '2.0'\n-051BD1 Extract OS            00 (0) 'MS-DOS'\n-051BD2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-051BD4 Compression Method    0000 (0) 'Stored'\n-051BD6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-051BDA CRC                   00000000 (0)\n-051BDE Compressed Size       00000000 (0)\n-051BE2 Uncompressed Size     00000000 (0)\n-051BE6 Filename Length       009C (156)\n-051BE8 Extra Length          0009 (9)\n-051BEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+05558B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05558D   Length              0005 (5)\n+05558F   Flags               01 (1) 'Modification'\n+055590   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+055594 LOCAL HEADER #179     04034B50 (67324752)\n+055598 Extract Zip Spec      14 (20) '2.0'\n+055599 Extract OS            00 (0) 'MS-DOS'\n+05559A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05559C Compression Method    0000 (0) 'Stored'\n+05559E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0555A2 CRC                   00000000 (0)\n+0555A6 Compressed Size       00000000 (0)\n+0555AA Uncompressed Size     00000000 (0)\n+0555AE Filename Length       009C (156)\n+0555B0 Extra Length          0009 (9)\n+0555B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x51BEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x555B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-051C86 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-051C88   Length              0005 (5)\n-051C8A   Flags               01 (1) 'Modification'\n-051C8B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-051C8F PAYLOAD\n-\n-052D00 DATA DESCRIPTOR       08074B50 (134695760)\n-052D04 CRC                   0124A640 (19179072)\n-052D08 Compressed Size       00001071 (4209)\n-052D0C Uncompressed Size     00001071 (4209)\n-\n-052D10 LOCAL HEADER #180     04034B50 (67324752)\n-052D14 Extract Zip Spec      14 (20) '2.0'\n-052D15 Extract OS            00 (0) 'MS-DOS'\n-052D16 General Purpose Flag  0000 (0)\n-052D18 Compression Method    0000 (0) 'Stored'\n-052D1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-052D1E CRC                   00000000 (0)\n-052D22 Compressed Size       00000000 (0)\n-052D26 Uncompressed Size     00000000 (0)\n-052D2A Filename Length       0086 (134)\n-052D2C Extra Length          0009 (9)\n-052D2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+05564E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+055650   Length              0005 (5)\n+055652   Flags               01 (1) 'Modification'\n+055653   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+055657 PAYLOAD\n+\n+0566C8 DATA DESCRIPTOR       08074B50 (134695760)\n+0566CC CRC                   0124A640 (19179072)\n+0566D0 Compressed Size       00001071 (4209)\n+0566D4 Uncompressed Size     00001071 (4209)\n+\n+0566D8 LOCAL HEADER #180     04034B50 (67324752)\n+0566DC Extract Zip Spec      14 (20) '2.0'\n+0566DD Extract OS            00 (0) 'MS-DOS'\n+0566DE General Purpose Flag  0000 (0)\n+0566E0 Compression Method    0000 (0) 'Stored'\n+0566E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0566E6 CRC                   00000000 (0)\n+0566EA Compressed Size       00000000 (0)\n+0566EE Uncompressed Size     00000000 (0)\n+0566F2 Filename Length       0086 (134)\n+0566F4 Extra Length          0009 (9)\n+0566F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x52D2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x566F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-052DB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-052DB6   Length              0005 (5)\n-052DB8   Flags               01 (1) 'Modification'\n-052DB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-052DBD LOCAL HEADER #181     04034B50 (67324752)\n-052DC1 Extract Zip Spec      14 (20) '2.0'\n-052DC2 Extract OS            00 (0) 'MS-DOS'\n-052DC3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-052DC5 Compression Method    0000 (0) 'Stored'\n-052DC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-052DCB CRC                   00000000 (0)\n-052DCF Compressed Size       00000000 (0)\n-052DD3 Uncompressed Size     00000000 (0)\n-052DD7 Filename Length       009C (156)\n-052DD9 Extra Length          0009 (9)\n-052DDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+05677C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05677E   Length              0005 (5)\n+056780   Flags               01 (1) 'Modification'\n+056781   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+056785 LOCAL HEADER #181     04034B50 (67324752)\n+056789 Extract Zip Spec      14 (20) '2.0'\n+05678A Extract OS            00 (0) 'MS-DOS'\n+05678B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05678D Compression Method    0000 (0) 'Stored'\n+05678F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+056793 CRC                   00000000 (0)\n+056797 Compressed Size       00000000 (0)\n+05679B Uncompressed Size     00000000 (0)\n+05679F Filename Length       009C (156)\n+0567A1 Extra Length          0009 (9)\n+0567A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x52DDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x567A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-052E77 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-052E79   Length              0005 (5)\n-052E7B   Flags               01 (1) 'Modification'\n-052E7C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-052E80 PAYLOAD\n-\n-05374C DATA DESCRIPTOR       08074B50 (134695760)\n-053750 CRC                   7E793C9C (2121874588)\n-053754 Compressed Size       000008CC (2252)\n-053758 Uncompressed Size     000008CC (2252)\n-\n-05375C LOCAL HEADER #182     04034B50 (67324752)\n-053760 Extract Zip Spec      14 (20) '2.0'\n-053761 Extract OS            00 (0) 'MS-DOS'\n-053762 General Purpose Flag  0000 (0)\n-053764 Compression Method    0000 (0) 'Stored'\n-053766 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05376A CRC                   00000000 (0)\n-05376E Compressed Size       00000000 (0)\n-053772 Uncompressed Size     00000000 (0)\n-053776 Filename Length       0024 (36)\n-053778 Extra Length          0009 (9)\n-05377A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5377A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05379E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0537A0   Length              0005 (5)\n-0537A2   Flags               01 (1) 'Modification'\n-0537A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0537A7 LOCAL HEADER #183     04034B50 (67324752)\n-0537AB Extract Zip Spec      14 (20) '2.0'\n-0537AC Extract OS            00 (0) 'MS-DOS'\n-0537AD General Purpose Flag  0000 (0)\n-0537AF Compression Method    0000 (0) 'Stored'\n-0537B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0537B5 CRC                   00000000 (0)\n-0537B9 Compressed Size       00000000 (0)\n-0537BD Uncompressed Size     00000000 (0)\n-0537C1 Filename Length       002B (43)\n-0537C3 Extra Length          0009 (9)\n-0537C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x537C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0537F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0537F2   Length              0005 (5)\n-0537F4   Flags               01 (1) 'Modification'\n-0537F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0537F9 LOCAL HEADER #184     04034B50 (67324752)\n-0537FD Extract Zip Spec      14 (20) '2.0'\n-0537FE Extract OS            00 (0) 'MS-DOS'\n-0537FF General Purpose Flag  0000 (0)\n-053801 Compression Method    0000 (0) 'Stored'\n-053803 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-053807 CRC                   00000000 (0)\n-05380B Compressed Size       00000000 (0)\n-05380F Uncompressed Size     00000000 (0)\n-053813 Filename Length       0052 (82)\n-053815 Extra Length          0009 (9)\n-053817 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53817: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-053869 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05386B   Length              0005 (5)\n-05386D   Flags               01 (1) 'Modification'\n-05386E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-053872 LOCAL HEADER #185     04034B50 (67324752)\n-053876 Extract Zip Spec      14 (20) '2.0'\n-053877 Extract OS            00 (0) 'MS-DOS'\n-053878 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05387A Compression Method    0000 (0) 'Stored'\n-05387C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-053880 CRC                   00000000 (0)\n-053884 Compressed Size       00000000 (0)\n-053888 Uncompressed Size     00000000 (0)\n-05388C Filename Length       0068 (104)\n-05388E Extra Length          0009 (9)\n-053890 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53890: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0538F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0538FA   Length              0005 (5)\n-0538FC   Flags               01 (1) 'Modification'\n-0538FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-053901 PAYLOAD\n-\n-05400E DATA DESCRIPTOR       08074B50 (134695760)\n-054012 CRC                   A8584B88 (2824358792)\n-054016 Compressed Size       0000070D (1805)\n-05401A Uncompressed Size     0000070D (1805)\n-\n-05401E LOCAL HEADER #186     04034B50 (67324752)\n-054022 Extract Zip Spec      14 (20) '2.0'\n-054023 Extract OS            00 (0) 'MS-DOS'\n-054024 General Purpose Flag  0000 (0)\n-054026 Compression Method    0000 (0) 'Stored'\n-054028 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05402C CRC                   00000000 (0)\n-054030 Compressed Size       00000000 (0)\n-054034 Uncompressed Size     00000000 (0)\n-054038 Filename Length       004E (78)\n-05403A Extra Length          0009 (9)\n-05403C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5403C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05408A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05408C   Length              0005 (5)\n-05408E   Flags               01 (1) 'Modification'\n-05408F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-054093 LOCAL HEADER #187     04034B50 (67324752)\n-054097 Extract Zip Spec      14 (20) '2.0'\n-054098 Extract OS            00 (0) 'MS-DOS'\n-054099 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05409B Compression Method    0000 (0) 'Stored'\n-05409D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0540A1 CRC                   00000000 (0)\n-0540A5 Compressed Size       00000000 (0)\n-0540A9 Uncompressed Size     00000000 (0)\n-0540AD Filename Length       0064 (100)\n-0540AF Extra Length          0009 (9)\n-0540B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x540B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-054115 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-054117   Length              0005 (5)\n-054119   Flags               01 (1) 'Modification'\n-05411A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05411E PAYLOAD\n-\n-05487E DATA DESCRIPTOR       08074B50 (134695760)\n-054882 CRC                   A8336B4A (2821942090)\n-054886 Compressed Size       00000760 (1888)\n-05488A Uncompressed Size     00000760 (1888)\n-\n-05488E LOCAL HEADER #188     04034B50 (67324752)\n-054892 Extract Zip Spec      14 (20) '2.0'\n-054893 Extract OS            00 (0) 'MS-DOS'\n-054894 General Purpose Flag  0000 (0)\n-054896 Compression Method    0000 (0) 'Stored'\n-054898 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05489C CRC                   00000000 (0)\n-0548A0 Compressed Size       00000000 (0)\n-0548A4 Uncompressed Size     00000000 (0)\n-0548A8 Filename Length       004E (78)\n-0548AA Extra Length          0009 (9)\n-0548AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x548AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0548FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0548FC   Length              0005 (5)\n-0548FE   Flags               01 (1) 'Modification'\n-0548FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-054903 LOCAL HEADER #189     04034B50 (67324752)\n-054907 Extract Zip Spec      14 (20) '2.0'\n-054908 Extract OS            00 (0) 'MS-DOS'\n-054909 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05490B Compression Method    0000 (0) 'Stored'\n-05490D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-054911 CRC                   00000000 (0)\n-054915 Compressed Size       00000000 (0)\n-054919 Uncompressed Size     00000000 (0)\n-05491D Filename Length       0064 (100)\n-05491F Extra Length          0009 (9)\n-054921 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54921: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-054985 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-054987   Length              0005 (5)\n-054989   Flags               01 (1) 'Modification'\n-05498A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05498E PAYLOAD\n-\n-0550F2 DATA DESCRIPTOR       08074B50 (134695760)\n-0550F6 CRC                   7559BE1A (1968815642)\n-0550FA Compressed Size       00000764 (1892)\n-0550FE Uncompressed Size     00000764 (1892)\n-\n-055102 LOCAL HEADER #190     04034B50 (67324752)\n-055106 Extract Zip Spec      14 (20) '2.0'\n-055107 Extract OS            00 (0) 'MS-DOS'\n-055108 General Purpose Flag  0000 (0)\n-05510A Compression Method    0000 (0) 'Stored'\n-05510C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-055110 CRC                   00000000 (0)\n-055114 Compressed Size       00000000 (0)\n-055118 Uncompressed Size     00000000 (0)\n-05511C Filename Length       0050 (80)\n-05511E Extra Length          0009 (9)\n-055120 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x55120: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-055170 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-055172   Length              0005 (5)\n-055174   Flags               01 (1) 'Modification'\n-055175   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-055179 LOCAL HEADER #191     04034B50 (67324752)\n-05517D Extract Zip Spec      14 (20) '2.0'\n-05517E Extract OS            00 (0) 'MS-DOS'\n-05517F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-055181 Compression Method    0000 (0) 'Stored'\n-055183 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-055187 CRC                   00000000 (0)\n-05518B Compressed Size       00000000 (0)\n-05518F Uncompressed Size     00000000 (0)\n-055193 Filename Length       0066 (102)\n-055195 Extra Length          0009 (9)\n-055197 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x55197: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0551FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0551FF   Length              0005 (5)\n-055201   Flags               01 (1) 'Modification'\n-055202   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-055206 PAYLOAD\n-\n-05613B DATA DESCRIPTOR       08074B50 (134695760)\n-05613F CRC                   F2039839 (4060321849)\n-056143 Compressed Size       00000F35 (3893)\n-056147 Uncompressed Size     00000F35 (3893)\n-\n-05614B LOCAL HEADER #192     04034B50 (67324752)\n-05614F Extract Zip Spec      14 (20) '2.0'\n-056150 Extract OS            00 (0) 'MS-DOS'\n-056151 General Purpose Flag  0000 (0)\n-056153 Compression Method    0000 (0) 'Stored'\n-056155 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-056159 CRC                   00000000 (0)\n-05615D Compressed Size       00000000 (0)\n-056161 Uncompressed Size     00000000 (0)\n-056165 Filename Length       0026 (38)\n-056167 Extra Length          0009 (9)\n-056169 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x56169: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05618F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-056191   Length              0005 (5)\n-056193   Flags               01 (1) 'Modification'\n-056194   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-056198 LOCAL HEADER #193     04034B50 (67324752)\n-05619C Extract Zip Spec      14 (20) '2.0'\n-05619D Extract OS            00 (0) 'MS-DOS'\n-05619E General Purpose Flag  0000 (0)\n-0561A0 Compression Method    0000 (0) 'Stored'\n-0561A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0561A6 CRC                   00000000 (0)\n-0561AA Compressed Size       00000000 (0)\n-0561AE Uncompressed Size     00000000 (0)\n-0561B2 Filename Length       002D (45)\n-0561B4 Extra Length          0009 (9)\n-0561B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x561B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0561E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0561E5   Length              0005 (5)\n-0561E7   Flags               01 (1) 'Modification'\n-0561E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0561EC LOCAL HEADER #194     04034B50 (67324752)\n-0561F0 Extract Zip Spec      14 (20) '2.0'\n-0561F1 Extract OS            00 (0) 'MS-DOS'\n-0561F2 General Purpose Flag  0000 (0)\n-0561F4 Compression Method    0000 (0) 'Stored'\n-0561F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0561FA CRC                   00000000 (0)\n-0561FE Compressed Size       00000000 (0)\n-056202 Uncompressed Size     00000000 (0)\n-056206 Filename Length       005B (91)\n-056208 Extra Length          0009 (9)\n-05620A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5620A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-056265 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-056267   Length              0005 (5)\n-056269   Flags               01 (1) 'Modification'\n-05626A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05626E LOCAL HEADER #195     04034B50 (67324752)\n-056272 Extract Zip Spec      14 (20) '2.0'\n-056273 Extract OS            00 (0) 'MS-DOS'\n-056274 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-056276 Compression Method    0000 (0) 'Stored'\n-056278 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05627C CRC                   00000000 (0)\n-056280 Compressed Size       00000000 (0)\n-056284 Uncompressed Size     00000000 (0)\n-056288 Filename Length       0071 (113)\n-05628A Extra Length          0009 (9)\n-05628C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5628C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0562FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0562FF   Length              0005 (5)\n-056301   Flags               01 (1) 'Modification'\n-056302   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-056306 PAYLOAD\n-\n-056B67 DATA DESCRIPTOR       08074B50 (134695760)\n-056B6B CRC                   4C048087 (1275363463)\n-056B6F Compressed Size       00000861 (2145)\n-056B73 Uncompressed Size     00000861 (2145)\n-\n-056B77 LOCAL HEADER #196     04034B50 (67324752)\n-056B7B Extract Zip Spec      14 (20) '2.0'\n-056B7C Extract OS            00 (0) 'MS-DOS'\n-056B7D General Purpose Flag  0000 (0)\n-056B7F Compression Method    0000 (0) 'Stored'\n-056B81 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-056B85 CRC                   00000000 (0)\n-056B89 Compressed Size       00000000 (0)\n-056B8D Uncompressed Size     00000000 (0)\n-056B91 Filename Length       002D (45)\n-056B93 Extra Length          0009 (9)\n-056B95 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x56B95: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-056BC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-056BC4   Length              0005 (5)\n-056BC6   Flags               01 (1) 'Modification'\n-056BC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-056BCB LOCAL HEADER #197     04034B50 (67324752)\n-056BCF Extract Zip Spec      14 (20) '2.0'\n-056BD0 Extract OS            00 (0) 'MS-DOS'\n-056BD1 General Purpose Flag  0000 (0)\n-056BD3 Compression Method    0000 (0) 'Stored'\n-056BD5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-056BD9 CRC                   00000000 (0)\n-056BDD Compressed Size       00000000 (0)\n-056BE1 Uncompressed Size     00000000 (0)\n-056BE5 Filename Length       0034 (52)\n-056BE7 Extra Length          0009 (9)\n-056BE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x56BE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-056C1D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-056C1F   Length              0005 (5)\n-056C21   Flags               01 (1) 'Modification'\n-056C22   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-056C26 LOCAL HEADER #198     04034B50 (67324752)\n-056C2A Extract Zip Spec      14 (20) '2.0'\n-056C2B Extract OS            00 (0) 'MS-DOS'\n-056C2C General Purpose Flag  0000 (0)\n-056C2E Compression Method    0000 (0) 'Stored'\n-056C30 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-056C34 CRC                   00000000 (0)\n-056C38 Compressed Size       00000000 (0)\n-056C3C Uncompressed Size     00000000 (0)\n-056C40 Filename Length       0068 (104)\n-056C42 Extra Length          0009 (9)\n-056C44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x56C44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-056CAC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-056CAE   Length              0005 (5)\n-056CB0   Flags               01 (1) 'Modification'\n-056CB1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-056CB5 LOCAL HEADER #199     04034B50 (67324752)\n-056CB9 Extract Zip Spec      14 (20) '2.0'\n-056CBA Extract OS            00 (0) 'MS-DOS'\n-056CBB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-056CBD Compression Method    0000 (0) 'Stored'\n-056CBF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-056CC3 CRC                   00000000 (0)\n-056CC7 Compressed Size       00000000 (0)\n-056CCB Uncompressed Size     00000000 (0)\n-056CCF Filename Length       007E (126)\n-056CD1 Extra Length          0009 (9)\n-056CD3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x56CD3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-056D51 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-056D53   Length              0005 (5)\n-056D55   Flags               01 (1) 'Modification'\n-056D56   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-056D5A PAYLOAD\n-\n-058EB8 DATA DESCRIPTOR       08074B50 (134695760)\n-058EBC CRC                   877B2EE8 (2272997096)\n-058EC0 Compressed Size       0000215E (8542)\n-058EC4 Uncompressed Size     0000215E (8542)\n-\n-058EC8 LOCAL HEADER #200     04034B50 (67324752)\n-058ECC Extract Zip Spec      14 (20) '2.0'\n-058ECD Extract OS            00 (0) 'MS-DOS'\n-058ECE General Purpose Flag  0000 (0)\n-058ED0 Compression Method    0000 (0) 'Stored'\n-058ED2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-058ED6 CRC                   00000000 (0)\n-058EDA Compressed Size       00000000 (0)\n-058EDE Uncompressed Size     00000000 (0)\n-058EE2 Filename Length       006C (108)\n-058EE4 Extra Length          0009 (9)\n-058EE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x58EE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-058F52 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-058F54   Length              0005 (5)\n-058F56   Flags               01 (1) 'Modification'\n-058F57   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-058F5B LOCAL HEADER #201     04034B50 (67324752)\n-058F5F Extract Zip Spec      14 (20) '2.0'\n-058F60 Extract OS            00 (0) 'MS-DOS'\n-058F61 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-058F63 Compression Method    0000 (0) 'Stored'\n-058F65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-058F69 CRC                   00000000 (0)\n-058F6D Compressed Size       00000000 (0)\n-058F71 Uncompressed Size     00000000 (0)\n-058F75 Filename Length       0082 (130)\n-058F77 Extra Length          0009 (9)\n-058F79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x58F79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-058FFB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-058FFD   Length              0005 (5)\n-058FFF   Flags               01 (1) 'Modification'\n-059000   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-059004 PAYLOAD\n-\n-05A483 DATA DESCRIPTOR       08074B50 (134695760)\n-05A487 CRC                   E43D22D5 (3829211861)\n-05A48B Compressed Size       0000147F (5247)\n-05A48F Uncompressed Size     0000147F (5247)\n-\n-05A493 LOCAL HEADER #202     04034B50 (67324752)\n-05A497 Extract Zip Spec      14 (20) '2.0'\n-05A498 Extract OS            00 (0) 'MS-DOS'\n-05A499 General Purpose Flag  0000 (0)\n-05A49B Compression Method    0000 (0) 'Stored'\n-05A49D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05A4A1 CRC                   00000000 (0)\n-05A4A5 Compressed Size       00000000 (0)\n-05A4A9 Uncompressed Size     00000000 (0)\n-05A4AD Filename Length       005E (94)\n-05A4AF Extra Length          0009 (9)\n-05A4B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5A4B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05A50F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05A511   Length              0005 (5)\n-05A513   Flags               01 (1) 'Modification'\n-05A514   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05A518 LOCAL HEADER #203     04034B50 (67324752)\n-05A51C Extract Zip Spec      14 (20) '2.0'\n-05A51D Extract OS            00 (0) 'MS-DOS'\n-05A51E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05A520 Compression Method    0000 (0) 'Stored'\n-05A522 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05A526 CRC                   00000000 (0)\n-05A52A Compressed Size       00000000 (0)\n-05A52E Uncompressed Size     00000000 (0)\n-05A532 Filename Length       0074 (116)\n-05A534 Extra Length          0009 (9)\n-05A536 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5A536: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05A5AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05A5AC   Length              0005 (5)\n-05A5AE   Flags               01 (1) 'Modification'\n-05A5AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05A5B3 PAYLOAD\n-\n-05B613 DATA DESCRIPTOR       08074B50 (134695760)\n-05B617 CRC                   D765846F (3613754479)\n-05B61B Compressed Size       00001060 (4192)\n-05B61F Uncompressed Size     00001060 (4192)\n-\n-05B623 LOCAL HEADER #204     04034B50 (67324752)\n-05B627 Extract Zip Spec      14 (20) '2.0'\n-05B628 Extract OS            00 (0) 'MS-DOS'\n-05B629 General Purpose Flag  0000 (0)\n-05B62B Compression Method    0000 (0) 'Stored'\n-05B62D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05B631 CRC                   00000000 (0)\n-05B635 Compressed Size       00000000 (0)\n-05B639 Uncompressed Size     00000000 (0)\n-05B63D Filename Length       005E (94)\n-05B63F Extra Length          0009 (9)\n-05B641 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5B641: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05B69F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05B6A1   Length              0005 (5)\n-05B6A3   Flags               01 (1) 'Modification'\n-05B6A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05B6A8 LOCAL HEADER #205     04034B50 (67324752)\n-05B6AC Extract Zip Spec      14 (20) '2.0'\n-05B6AD Extract OS            00 (0) 'MS-DOS'\n-05B6AE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05B6B0 Compression Method    0000 (0) 'Stored'\n-05B6B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05B6B6 CRC                   00000000 (0)\n-05B6BA Compressed Size       00000000 (0)\n-05B6BE Uncompressed Size     00000000 (0)\n-05B6C2 Filename Length       0074 (116)\n-05B6C4 Extra Length          0009 (9)\n-05B6C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5B6C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05B73A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05B73C   Length              0005 (5)\n-05B73E   Flags               01 (1) 'Modification'\n-05B73F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05B743 PAYLOAD\n-\n-05C89F DATA DESCRIPTOR       08074B50 (134695760)\n-05C8A3 CRC                   57E394F3 (1474532595)\n-05C8A7 Compressed Size       0000115C (4444)\n-05C8AB Uncompressed Size     0000115C (4444)\n-\n-05C8AF LOCAL HEADER #206     04034B50 (67324752)\n-05C8B3 Extract Zip Spec      14 (20) '2.0'\n-05C8B4 Extract OS            00 (0) 'MS-DOS'\n-05C8B5 General Purpose Flag  0000 (0)\n-05C8B7 Compression Method    0000 (0) 'Stored'\n-05C8B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05C8BD CRC                   00000000 (0)\n-05C8C1 Compressed Size       00000000 (0)\n-05C8C5 Uncompressed Size     00000000 (0)\n-05C8C9 Filename Length       0028 (40)\n-05C8CB Extra Length          0009 (9)\n-05C8CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5C8CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05C8F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05C8F7   Length              0005 (5)\n-05C8F9   Flags               01 (1) 'Modification'\n-05C8FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05C8FE LOCAL HEADER #207     04034B50 (67324752)\n-05C902 Extract Zip Spec      14 (20) '2.0'\n-05C903 Extract OS            00 (0) 'MS-DOS'\n-05C904 General Purpose Flag  0000 (0)\n-05C906 Compression Method    0000 (0) 'Stored'\n-05C908 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05C90C CRC                   00000000 (0)\n-05C910 Compressed Size       00000000 (0)\n-05C914 Uncompressed Size     00000000 (0)\n-05C918 Filename Length       002F (47)\n-05C91A Extra Length          0009 (9)\n-05C91C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5C91C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05C94B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05C94D   Length              0005 (5)\n-05C94F   Flags               01 (1) 'Modification'\n-05C950   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05C954 LOCAL HEADER #208     04034B50 (67324752)\n-05C958 Extract Zip Spec      14 (20) '2.0'\n-05C959 Extract OS            00 (0) 'MS-DOS'\n-05C95A General Purpose Flag  0000 (0)\n-05C95C Compression Method    0000 (0) 'Stored'\n-05C95E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05C962 CRC                   00000000 (0)\n-05C966 Compressed Size       00000000 (0)\n-05C96A Uncompressed Size     00000000 (0)\n-05C96E Filename Length       006E (110)\n-05C970 Extra Length          0009 (9)\n-05C972 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5C972: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05C9E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05C9E2   Length              0005 (5)\n-05C9E4   Flags               01 (1) 'Modification'\n-05C9E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05C9E9 LOCAL HEADER #209     04034B50 (67324752)\n-05C9ED Extract Zip Spec      14 (20) '2.0'\n-05C9EE Extract OS            00 (0) 'MS-DOS'\n-05C9EF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05C9F1 Compression Method    0000 (0) 'Stored'\n-05C9F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05C9F7 CRC                   00000000 (0)\n-05C9FB Compressed Size       00000000 (0)\n-05C9FF Uncompressed Size     00000000 (0)\n-05CA03 Filename Length       0084 (132)\n-05CA05 Extra Length          0009 (9)\n-05CA07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+05683F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+056841   Length              0005 (5)\n+056843   Flags               01 (1) 'Modification'\n+056844   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+056848 PAYLOAD\n+\n+057114 DATA DESCRIPTOR       08074B50 (134695760)\n+057118 CRC                   7E793C9C (2121874588)\n+05711C Compressed Size       000008CC (2252)\n+057120 Uncompressed Size     000008CC (2252)\n+\n+057124 LOCAL HEADER #182     04034B50 (67324752)\n+057128 Extract Zip Spec      14 (20) '2.0'\n+057129 Extract OS            00 (0) 'MS-DOS'\n+05712A General Purpose Flag  0000 (0)\n+05712C Compression Method    0000 (0) 'Stored'\n+05712E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+057132 CRC                   00000000 (0)\n+057136 Compressed Size       00000000 (0)\n+05713A Uncompressed Size     00000000 (0)\n+05713E Filename Length       0024 (36)\n+057140 Extra Length          0009 (9)\n+057142 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x57142: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+057166 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+057168   Length              0005 (5)\n+05716A   Flags               01 (1) 'Modification'\n+05716B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05716F LOCAL HEADER #183     04034B50 (67324752)\n+057173 Extract Zip Spec      14 (20) '2.0'\n+057174 Extract OS            00 (0) 'MS-DOS'\n+057175 General Purpose Flag  0000 (0)\n+057177 Compression Method    0000 (0) 'Stored'\n+057179 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05717D CRC                   00000000 (0)\n+057181 Compressed Size       00000000 (0)\n+057185 Uncompressed Size     00000000 (0)\n+057189 Filename Length       002B (43)\n+05718B Extra Length          0009 (9)\n+05718D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5718D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0571B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0571BA   Length              0005 (5)\n+0571BC   Flags               01 (1) 'Modification'\n+0571BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0571C1 LOCAL HEADER #184     04034B50 (67324752)\n+0571C5 Extract Zip Spec      14 (20) '2.0'\n+0571C6 Extract OS            00 (0) 'MS-DOS'\n+0571C7 General Purpose Flag  0000 (0)\n+0571C9 Compression Method    0000 (0) 'Stored'\n+0571CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0571CF CRC                   00000000 (0)\n+0571D3 Compressed Size       00000000 (0)\n+0571D7 Uncompressed Size     00000000 (0)\n+0571DB Filename Length       0052 (82)\n+0571DD Extra Length          0009 (9)\n+0571DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x571DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+057231 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+057233   Length              0005 (5)\n+057235   Flags               01 (1) 'Modification'\n+057236   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05723A LOCAL HEADER #185     04034B50 (67324752)\n+05723E Extract Zip Spec      14 (20) '2.0'\n+05723F Extract OS            00 (0) 'MS-DOS'\n+057240 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+057242 Compression Method    0000 (0) 'Stored'\n+057244 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+057248 CRC                   00000000 (0)\n+05724C Compressed Size       00000000 (0)\n+057250 Uncompressed Size     00000000 (0)\n+057254 Filename Length       0068 (104)\n+057256 Extra Length          0009 (9)\n+057258 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x57258: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0572C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0572C2   Length              0005 (5)\n+0572C4   Flags               01 (1) 'Modification'\n+0572C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0572C9 PAYLOAD\n+\n+0579D6 DATA DESCRIPTOR       08074B50 (134695760)\n+0579DA CRC                   A8584B88 (2824358792)\n+0579DE Compressed Size       0000070D (1805)\n+0579E2 Uncompressed Size     0000070D (1805)\n+\n+0579E6 LOCAL HEADER #186     04034B50 (67324752)\n+0579EA Extract Zip Spec      14 (20) '2.0'\n+0579EB Extract OS            00 (0) 'MS-DOS'\n+0579EC General Purpose Flag  0000 (0)\n+0579EE Compression Method    0000 (0) 'Stored'\n+0579F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0579F4 CRC                   00000000 (0)\n+0579F8 Compressed Size       00000000 (0)\n+0579FC Uncompressed Size     00000000 (0)\n+057A00 Filename Length       004E (78)\n+057A02 Extra Length          0009 (9)\n+057A04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x57A04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+057A52 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+057A54   Length              0005 (5)\n+057A56   Flags               01 (1) 'Modification'\n+057A57   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+057A5B LOCAL HEADER #187     04034B50 (67324752)\n+057A5F Extract Zip Spec      14 (20) '2.0'\n+057A60 Extract OS            00 (0) 'MS-DOS'\n+057A61 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+057A63 Compression Method    0000 (0) 'Stored'\n+057A65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+057A69 CRC                   00000000 (0)\n+057A6D Compressed Size       00000000 (0)\n+057A71 Uncompressed Size     00000000 (0)\n+057A75 Filename Length       0064 (100)\n+057A77 Extra Length          0009 (9)\n+057A79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x57A79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+057ADD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+057ADF   Length              0005 (5)\n+057AE1   Flags               01 (1) 'Modification'\n+057AE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+057AE6 PAYLOAD\n+\n+058246 DATA DESCRIPTOR       08074B50 (134695760)\n+05824A CRC                   A8336B4A (2821942090)\n+05824E Compressed Size       00000760 (1888)\n+058252 Uncompressed Size     00000760 (1888)\n+\n+058256 LOCAL HEADER #188     04034B50 (67324752)\n+05825A Extract Zip Spec      14 (20) '2.0'\n+05825B Extract OS            00 (0) 'MS-DOS'\n+05825C General Purpose Flag  0000 (0)\n+05825E Compression Method    0000 (0) 'Stored'\n+058260 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+058264 CRC                   00000000 (0)\n+058268 Compressed Size       00000000 (0)\n+05826C Uncompressed Size     00000000 (0)\n+058270 Filename Length       004E (78)\n+058272 Extra Length          0009 (9)\n+058274 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x58274: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0582C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0582C4   Length              0005 (5)\n+0582C6   Flags               01 (1) 'Modification'\n+0582C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0582CB LOCAL HEADER #189     04034B50 (67324752)\n+0582CF Extract Zip Spec      14 (20) '2.0'\n+0582D0 Extract OS            00 (0) 'MS-DOS'\n+0582D1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0582D3 Compression Method    0000 (0) 'Stored'\n+0582D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0582D9 CRC                   00000000 (0)\n+0582DD Compressed Size       00000000 (0)\n+0582E1 Uncompressed Size     00000000 (0)\n+0582E5 Filename Length       0064 (100)\n+0582E7 Extra Length          0009 (9)\n+0582E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x582E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05834D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05834F   Length              0005 (5)\n+058351   Flags               01 (1) 'Modification'\n+058352   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+058356 PAYLOAD\n+\n+058ABA DATA DESCRIPTOR       08074B50 (134695760)\n+058ABE CRC                   7559BE1A (1968815642)\n+058AC2 Compressed Size       00000764 (1892)\n+058AC6 Uncompressed Size     00000764 (1892)\n+\n+058ACA LOCAL HEADER #190     04034B50 (67324752)\n+058ACE Extract Zip Spec      14 (20) '2.0'\n+058ACF Extract OS            00 (0) 'MS-DOS'\n+058AD0 General Purpose Flag  0000 (0)\n+058AD2 Compression Method    0000 (0) 'Stored'\n+058AD4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+058AD8 CRC                   00000000 (0)\n+058ADC Compressed Size       00000000 (0)\n+058AE0 Uncompressed Size     00000000 (0)\n+058AE4 Filename Length       0050 (80)\n+058AE6 Extra Length          0009 (9)\n+058AE8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x58AE8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+058B38 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+058B3A   Length              0005 (5)\n+058B3C   Flags               01 (1) 'Modification'\n+058B3D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+058B41 LOCAL HEADER #191     04034B50 (67324752)\n+058B45 Extract Zip Spec      14 (20) '2.0'\n+058B46 Extract OS            00 (0) 'MS-DOS'\n+058B47 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+058B49 Compression Method    0000 (0) 'Stored'\n+058B4B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+058B4F CRC                   00000000 (0)\n+058B53 Compressed Size       00000000 (0)\n+058B57 Uncompressed Size     00000000 (0)\n+058B5B Filename Length       0066 (102)\n+058B5D Extra Length          0009 (9)\n+058B5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x58B5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+058BC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+058BC7   Length              0005 (5)\n+058BC9   Flags               01 (1) 'Modification'\n+058BCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+058BCE PAYLOAD\n+\n+059B03 DATA DESCRIPTOR       08074B50 (134695760)\n+059B07 CRC                   F2039839 (4060321849)\n+059B0B Compressed Size       00000F35 (3893)\n+059B0F Uncompressed Size     00000F35 (3893)\n+\n+059B13 LOCAL HEADER #192     04034B50 (67324752)\n+059B17 Extract Zip Spec      14 (20) '2.0'\n+059B18 Extract OS            00 (0) 'MS-DOS'\n+059B19 General Purpose Flag  0000 (0)\n+059B1B Compression Method    0000 (0) 'Stored'\n+059B1D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+059B21 CRC                   00000000 (0)\n+059B25 Compressed Size       00000000 (0)\n+059B29 Uncompressed Size     00000000 (0)\n+059B2D Filename Length       0026 (38)\n+059B2F Extra Length          0009 (9)\n+059B31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x59B31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+059B57 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+059B59   Length              0005 (5)\n+059B5B   Flags               01 (1) 'Modification'\n+059B5C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+059B60 LOCAL HEADER #193     04034B50 (67324752)\n+059B64 Extract Zip Spec      14 (20) '2.0'\n+059B65 Extract OS            00 (0) 'MS-DOS'\n+059B66 General Purpose Flag  0000 (0)\n+059B68 Compression Method    0000 (0) 'Stored'\n+059B6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+059B6E CRC                   00000000 (0)\n+059B72 Compressed Size       00000000 (0)\n+059B76 Uncompressed Size     00000000 (0)\n+059B7A Filename Length       002D (45)\n+059B7C Extra Length          0009 (9)\n+059B7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x59B7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+059BAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+059BAD   Length              0005 (5)\n+059BAF   Flags               01 (1) 'Modification'\n+059BB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+059BB4 LOCAL HEADER #194     04034B50 (67324752)\n+059BB8 Extract Zip Spec      14 (20) '2.0'\n+059BB9 Extract OS            00 (0) 'MS-DOS'\n+059BBA General Purpose Flag  0000 (0)\n+059BBC Compression Method    0000 (0) 'Stored'\n+059BBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+059BC2 CRC                   00000000 (0)\n+059BC6 Compressed Size       00000000 (0)\n+059BCA Uncompressed Size     00000000 (0)\n+059BCE Filename Length       005B (91)\n+059BD0 Extra Length          0009 (9)\n+059BD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x59BD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+059C2D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+059C2F   Length              0005 (5)\n+059C31   Flags               01 (1) 'Modification'\n+059C32   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+059C36 LOCAL HEADER #195     04034B50 (67324752)\n+059C3A Extract Zip Spec      14 (20) '2.0'\n+059C3B Extract OS            00 (0) 'MS-DOS'\n+059C3C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+059C3E Compression Method    0000 (0) 'Stored'\n+059C40 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+059C44 CRC                   00000000 (0)\n+059C48 Compressed Size       00000000 (0)\n+059C4C Uncompressed Size     00000000 (0)\n+059C50 Filename Length       0071 (113)\n+059C52 Extra Length          0009 (9)\n+059C54 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x59C54: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+059CC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+059CC7   Length              0005 (5)\n+059CC9   Flags               01 (1) 'Modification'\n+059CCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+059CCE PAYLOAD\n+\n+05A52F DATA DESCRIPTOR       08074B50 (134695760)\n+05A533 CRC                   4C048087 (1275363463)\n+05A537 Compressed Size       00000861 (2145)\n+05A53B Uncompressed Size     00000861 (2145)\n+\n+05A53F LOCAL HEADER #196     04034B50 (67324752)\n+05A543 Extract Zip Spec      14 (20) '2.0'\n+05A544 Extract OS            00 (0) 'MS-DOS'\n+05A545 General Purpose Flag  0000 (0)\n+05A547 Compression Method    0000 (0) 'Stored'\n+05A549 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05A54D CRC                   00000000 (0)\n+05A551 Compressed Size       00000000 (0)\n+05A555 Uncompressed Size     00000000 (0)\n+05A559 Filename Length       002D (45)\n+05A55B Extra Length          0009 (9)\n+05A55D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5A55D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05A58A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05A58C   Length              0005 (5)\n+05A58E   Flags               01 (1) 'Modification'\n+05A58F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05A593 LOCAL HEADER #197     04034B50 (67324752)\n+05A597 Extract Zip Spec      14 (20) '2.0'\n+05A598 Extract OS            00 (0) 'MS-DOS'\n+05A599 General Purpose Flag  0000 (0)\n+05A59B Compression Method    0000 (0) 'Stored'\n+05A59D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05A5A1 CRC                   00000000 (0)\n+05A5A5 Compressed Size       00000000 (0)\n+05A5A9 Uncompressed Size     00000000 (0)\n+05A5AD Filename Length       0034 (52)\n+05A5AF Extra Length          0009 (9)\n+05A5B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5A5B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05A5E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05A5E7   Length              0005 (5)\n+05A5E9   Flags               01 (1) 'Modification'\n+05A5EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05A5EE LOCAL HEADER #198     04034B50 (67324752)\n+05A5F2 Extract Zip Spec      14 (20) '2.0'\n+05A5F3 Extract OS            00 (0) 'MS-DOS'\n+05A5F4 General Purpose Flag  0000 (0)\n+05A5F6 Compression Method    0000 (0) 'Stored'\n+05A5F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05A5FC CRC                   00000000 (0)\n+05A600 Compressed Size       00000000 (0)\n+05A604 Uncompressed Size     00000000 (0)\n+05A608 Filename Length       0068 (104)\n+05A60A Extra Length          0009 (9)\n+05A60C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5A60C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05A674 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05A676   Length              0005 (5)\n+05A678   Flags               01 (1) 'Modification'\n+05A679   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05A67D LOCAL HEADER #199     04034B50 (67324752)\n+05A681 Extract Zip Spec      14 (20) '2.0'\n+05A682 Extract OS            00 (0) 'MS-DOS'\n+05A683 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05A685 Compression Method    0000 (0) 'Stored'\n+05A687 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05A68B CRC                   00000000 (0)\n+05A68F Compressed Size       00000000 (0)\n+05A693 Uncompressed Size     00000000 (0)\n+05A697 Filename Length       007E (126)\n+05A699 Extra Length          0009 (9)\n+05A69B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5A69B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05A719 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05A71B   Length              0005 (5)\n+05A71D   Flags               01 (1) 'Modification'\n+05A71E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05A722 PAYLOAD\n+\n+05C880 DATA DESCRIPTOR       08074B50 (134695760)\n+05C884 CRC                   877B2EE8 (2272997096)\n+05C888 Compressed Size       0000215E (8542)\n+05C88C Uncompressed Size     0000215E (8542)\n+\n+05C890 LOCAL HEADER #200     04034B50 (67324752)\n+05C894 Extract Zip Spec      14 (20) '2.0'\n+05C895 Extract OS            00 (0) 'MS-DOS'\n+05C896 General Purpose Flag  0000 (0)\n+05C898 Compression Method    0000 (0) 'Stored'\n+05C89A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05C89E CRC                   00000000 (0)\n+05C8A2 Compressed Size       00000000 (0)\n+05C8A6 Uncompressed Size     00000000 (0)\n+05C8AA Filename Length       006C (108)\n+05C8AC Extra Length          0009 (9)\n+05C8AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5C8AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05C91A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05C91C   Length              0005 (5)\n+05C91E   Flags               01 (1) 'Modification'\n+05C91F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05C923 LOCAL HEADER #201     04034B50 (67324752)\n+05C927 Extract Zip Spec      14 (20) '2.0'\n+05C928 Extract OS            00 (0) 'MS-DOS'\n+05C929 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05C92B Compression Method    0000 (0) 'Stored'\n+05C92D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05C931 CRC                   00000000 (0)\n+05C935 Compressed Size       00000000 (0)\n+05C939 Uncompressed Size     00000000 (0)\n+05C93D Filename Length       0082 (130)\n+05C93F Extra Length          0009 (9)\n+05C941 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5C941: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05C9C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05C9C5   Length              0005 (5)\n+05C9C7   Flags               01 (1) 'Modification'\n+05C9C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05C9CC PAYLOAD\n+\n+05DE4B DATA DESCRIPTOR       08074B50 (134695760)\n+05DE4F CRC                   E43D22D5 (3829211861)\n+05DE53 Compressed Size       0000147F (5247)\n+05DE57 Uncompressed Size     0000147F (5247)\n+\n+05DE5B LOCAL HEADER #202     04034B50 (67324752)\n+05DE5F Extract Zip Spec      14 (20) '2.0'\n+05DE60 Extract OS            00 (0) 'MS-DOS'\n+05DE61 General Purpose Flag  0000 (0)\n+05DE63 Compression Method    0000 (0) 'Stored'\n+05DE65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05DE69 CRC                   00000000 (0)\n+05DE6D Compressed Size       00000000 (0)\n+05DE71 Uncompressed Size     00000000 (0)\n+05DE75 Filename Length       005E (94)\n+05DE77 Extra Length          0009 (9)\n+05DE79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5DE79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05DED7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05DED9   Length              0005 (5)\n+05DEDB   Flags               01 (1) 'Modification'\n+05DEDC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05DEE0 LOCAL HEADER #203     04034B50 (67324752)\n+05DEE4 Extract Zip Spec      14 (20) '2.0'\n+05DEE5 Extract OS            00 (0) 'MS-DOS'\n+05DEE6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05DEE8 Compression Method    0000 (0) 'Stored'\n+05DEEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05DEEE CRC                   00000000 (0)\n+05DEF2 Compressed Size       00000000 (0)\n+05DEF6 Uncompressed Size     00000000 (0)\n+05DEFA Filename Length       0074 (116)\n+05DEFC Extra Length          0009 (9)\n+05DEFE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5DEFE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05DF72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05DF74   Length              0005 (5)\n+05DF76   Flags               01 (1) 'Modification'\n+05DF77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05DF7B PAYLOAD\n+\n+05EFDB DATA DESCRIPTOR       08074B50 (134695760)\n+05EFDF CRC                   D765846F (3613754479)\n+05EFE3 Compressed Size       00001060 (4192)\n+05EFE7 Uncompressed Size     00001060 (4192)\n+\n+05EFEB LOCAL HEADER #204     04034B50 (67324752)\n+05EFEF Extract Zip Spec      14 (20) '2.0'\n+05EFF0 Extract OS            00 (0) 'MS-DOS'\n+05EFF1 General Purpose Flag  0000 (0)\n+05EFF3 Compression Method    0000 (0) 'Stored'\n+05EFF5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05EFF9 CRC                   00000000 (0)\n+05EFFD Compressed Size       00000000 (0)\n+05F001 Uncompressed Size     00000000 (0)\n+05F005 Filename Length       005E (94)\n+05F007 Extra Length          0009 (9)\n+05F009 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F009: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05F067 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05F069   Length              0005 (5)\n+05F06B   Flags               01 (1) 'Modification'\n+05F06C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05F070 LOCAL HEADER #205     04034B50 (67324752)\n+05F074 Extract Zip Spec      14 (20) '2.0'\n+05F075 Extract OS            00 (0) 'MS-DOS'\n+05F076 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05F078 Compression Method    0000 (0) 'Stored'\n+05F07A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05F07E CRC                   00000000 (0)\n+05F082 Compressed Size       00000000 (0)\n+05F086 Uncompressed Size     00000000 (0)\n+05F08A Filename Length       0074 (116)\n+05F08C Extra Length          0009 (9)\n+05F08E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F08E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05F102 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05F104   Length              0005 (5)\n+05F106   Flags               01 (1) 'Modification'\n+05F107   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05F10B PAYLOAD\n+\n+060267 DATA DESCRIPTOR       08074B50 (134695760)\n+06026B CRC                   57E394F3 (1474532595)\n+06026F Compressed Size       0000115C (4444)\n+060273 Uncompressed Size     0000115C (4444)\n+\n+060277 LOCAL HEADER #206     04034B50 (67324752)\n+06027B Extract Zip Spec      14 (20) '2.0'\n+06027C Extract OS            00 (0) 'MS-DOS'\n+06027D General Purpose Flag  0000 (0)\n+06027F Compression Method    0000 (0) 'Stored'\n+060281 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+060285 CRC                   00000000 (0)\n+060289 Compressed Size       00000000 (0)\n+06028D Uncompressed Size     00000000 (0)\n+060291 Filename Length       0028 (40)\n+060293 Extra Length          0009 (9)\n+060295 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x60295: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0602BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0602BF   Length              0005 (5)\n+0602C1   Flags               01 (1) 'Modification'\n+0602C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0602C6 LOCAL HEADER #207     04034B50 (67324752)\n+0602CA Extract Zip Spec      14 (20) '2.0'\n+0602CB Extract OS            00 (0) 'MS-DOS'\n+0602CC General Purpose Flag  0000 (0)\n+0602CE Compression Method    0000 (0) 'Stored'\n+0602D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0602D4 CRC                   00000000 (0)\n+0602D8 Compressed Size       00000000 (0)\n+0602DC Uncompressed Size     00000000 (0)\n+0602E0 Filename Length       002F (47)\n+0602E2 Extra Length          0009 (9)\n+0602E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x602E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+060313 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+060315   Length              0005 (5)\n+060317   Flags               01 (1) 'Modification'\n+060318   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06031C LOCAL HEADER #208     04034B50 (67324752)\n+060320 Extract Zip Spec      14 (20) '2.0'\n+060321 Extract OS            00 (0) 'MS-DOS'\n+060322 General Purpose Flag  0000 (0)\n+060324 Compression Method    0000 (0) 'Stored'\n+060326 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06032A CRC                   00000000 (0)\n+06032E Compressed Size       00000000 (0)\n+060332 Uncompressed Size     00000000 (0)\n+060336 Filename Length       006E (110)\n+060338 Extra Length          0009 (9)\n+06033A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6033A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0603A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0603AA   Length              0005 (5)\n+0603AC   Flags               01 (1) 'Modification'\n+0603AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0603B1 LOCAL HEADER #209     04034B50 (67324752)\n+0603B5 Extract Zip Spec      14 (20) '2.0'\n+0603B6 Extract OS            00 (0) 'MS-DOS'\n+0603B7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0603B9 Compression Method    0000 (0) 'Stored'\n+0603BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0603BF CRC                   00000000 (0)\n+0603C3 Compressed Size       00000000 (0)\n+0603C7 Uncompressed Size     00000000 (0)\n+0603CB Filename Length       0084 (132)\n+0603CD Extra Length          0009 (9)\n+0603CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x5CA07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x603CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-05CA8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05CA8D   Length              0005 (5)\n-05CA8F   Flags               01 (1) 'Modification'\n-05CA90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05CA94 PAYLOAD\n-\n-05E4C0 DATA DESCRIPTOR       08074B50 (134695760)\n-05E4C4 CRC                   4293EC30 (1116990512)\n-05E4C8 Compressed Size       00001A2C (6700)\n-05E4CC Uncompressed Size     00001A2C (6700)\n-\n-05E4D0 LOCAL HEADER #210     04034B50 (67324752)\n-05E4D4 Extract Zip Spec      14 (20) '2.0'\n-05E4D5 Extract OS            00 (0) 'MS-DOS'\n-05E4D6 General Purpose Flag  0000 (0)\n-05E4D8 Compression Method    0000 (0) 'Stored'\n-05E4DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05E4DE CRC                   00000000 (0)\n-05E4E2 Compressed Size       00000000 (0)\n-05E4E6 Uncompressed Size     00000000 (0)\n-05E4EA Filename Length       0068 (104)\n-05E4EC Extra Length          0009 (9)\n-05E4EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5E4EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05E556 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05E558   Length              0005 (5)\n-05E55A   Flags               01 (1) 'Modification'\n-05E55B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05E55F LOCAL HEADER #211     04034B50 (67324752)\n-05E563 Extract Zip Spec      14 (20) '2.0'\n-05E564 Extract OS            00 (0) 'MS-DOS'\n-05E565 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05E567 Compression Method    0000 (0) 'Stored'\n-05E569 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05E56D CRC                   00000000 (0)\n-05E571 Compressed Size       00000000 (0)\n-05E575 Uncompressed Size     00000000 (0)\n-05E579 Filename Length       007E (126)\n-05E57B Extra Length          0009 (9)\n-05E57D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5E57D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05E5FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05E5FD   Length              0005 (5)\n-05E5FF   Flags               01 (1) 'Modification'\n-05E600   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05E604 PAYLOAD\n-\n-05FFF3 DATA DESCRIPTOR       08074B50 (134695760)\n-05FFF7 CRC                   83659368 (2204472168)\n-05FFFB Compressed Size       000019EF (6639)\n-05FFFF Uncompressed Size     000019EF (6639)\n-\n-060003 LOCAL HEADER #212     04034B50 (67324752)\n-060007 Extract Zip Spec      14 (20) '2.0'\n-060008 Extract OS            00 (0) 'MS-DOS'\n-060009 General Purpose Flag  0000 (0)\n-06000B Compression Method    0000 (0) 'Stored'\n-06000D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-060011 CRC                   00000000 (0)\n-060015 Compressed Size       00000000 (0)\n-060019 Uncompressed Size     00000000 (0)\n-06001D Filename Length       006E (110)\n-06001F Extra Length          0009 (9)\n-060021 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x60021: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06008F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-060091   Length              0005 (5)\n-060093   Flags               01 (1) 'Modification'\n-060094   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-060098 LOCAL HEADER #213     04034B50 (67324752)\n-06009C Extract Zip Spec      14 (20) '2.0'\n-06009D Extract OS            00 (0) 'MS-DOS'\n-06009E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0600A0 Compression Method    0000 (0) 'Stored'\n-0600A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0600A6 CRC                   00000000 (0)\n-0600AA Compressed Size       00000000 (0)\n-0600AE Uncompressed Size     00000000 (0)\n-0600B2 Filename Length       0084 (132)\n-0600B4 Extra Length          0009 (9)\n-0600B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+060453 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+060455   Length              0005 (5)\n+060457   Flags               01 (1) 'Modification'\n+060458   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06045C PAYLOAD\n+\n+061E88 DATA DESCRIPTOR       08074B50 (134695760)\n+061E8C CRC                   4293EC30 (1116990512)\n+061E90 Compressed Size       00001A2C (6700)\n+061E94 Uncompressed Size     00001A2C (6700)\n+\n+061E98 LOCAL HEADER #210     04034B50 (67324752)\n+061E9C Extract Zip Spec      14 (20) '2.0'\n+061E9D Extract OS            00 (0) 'MS-DOS'\n+061E9E General Purpose Flag  0000 (0)\n+061EA0 Compression Method    0000 (0) 'Stored'\n+061EA2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+061EA6 CRC                   00000000 (0)\n+061EAA Compressed Size       00000000 (0)\n+061EAE Uncompressed Size     00000000 (0)\n+061EB2 Filename Length       0068 (104)\n+061EB4 Extra Length          0009 (9)\n+061EB6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x61EB6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+061F1E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+061F20   Length              0005 (5)\n+061F22   Flags               01 (1) 'Modification'\n+061F23   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+061F27 LOCAL HEADER #211     04034B50 (67324752)\n+061F2B Extract Zip Spec      14 (20) '2.0'\n+061F2C Extract OS            00 (0) 'MS-DOS'\n+061F2D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+061F2F Compression Method    0000 (0) 'Stored'\n+061F31 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+061F35 CRC                   00000000 (0)\n+061F39 Compressed Size       00000000 (0)\n+061F3D Uncompressed Size     00000000 (0)\n+061F41 Filename Length       007E (126)\n+061F43 Extra Length          0009 (9)\n+061F45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x61F45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+061FC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+061FC5   Length              0005 (5)\n+061FC7   Flags               01 (1) 'Modification'\n+061FC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+061FCC PAYLOAD\n+\n+0639BB DATA DESCRIPTOR       08074B50 (134695760)\n+0639BF CRC                   83659368 (2204472168)\n+0639C3 Compressed Size       000019EF (6639)\n+0639C7 Uncompressed Size     000019EF (6639)\n+\n+0639CB LOCAL HEADER #212     04034B50 (67324752)\n+0639CF Extract Zip Spec      14 (20) '2.0'\n+0639D0 Extract OS            00 (0) 'MS-DOS'\n+0639D1 General Purpose Flag  0000 (0)\n+0639D3 Compression Method    0000 (0) 'Stored'\n+0639D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0639D9 CRC                   00000000 (0)\n+0639DD Compressed Size       00000000 (0)\n+0639E1 Uncompressed Size     00000000 (0)\n+0639E5 Filename Length       006E (110)\n+0639E7 Extra Length          0009 (9)\n+0639E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x639E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+063A57 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+063A59   Length              0005 (5)\n+063A5B   Flags               01 (1) 'Modification'\n+063A5C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+063A60 LOCAL HEADER #213     04034B50 (67324752)\n+063A64 Extract Zip Spec      14 (20) '2.0'\n+063A65 Extract OS            00 (0) 'MS-DOS'\n+063A66 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+063A68 Compression Method    0000 (0) 'Stored'\n+063A6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+063A6E CRC                   00000000 (0)\n+063A72 Compressed Size       00000000 (0)\n+063A76 Uncompressed Size     00000000 (0)\n+063A7A Filename Length       0084 (132)\n+063A7C Extra Length          0009 (9)\n+063A7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x600B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x63A7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-06013A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06013C   Length              0005 (5)\n-06013E   Flags               01 (1) 'Modification'\n-06013F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-060143 PAYLOAD\n-\n-061C3D DATA DESCRIPTOR       08074B50 (134695760)\n-061C41 CRC                   73F3DBE5 (1945361381)\n-061C45 Compressed Size       00001AFA (6906)\n-061C49 Uncompressed Size     00001AFA (6906)\n-\n-061C4D LOCAL HEADER #214     04034B50 (67324752)\n-061C51 Extract Zip Spec      14 (20) '2.0'\n-061C52 Extract OS            00 (0) 'MS-DOS'\n-061C53 General Purpose Flag  0000 (0)\n-061C55 Compression Method    0000 (0) 'Stored'\n-061C57 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-061C5B CRC                   00000000 (0)\n-061C5F Compressed Size       00000000 (0)\n-061C63 Uncompressed Size     00000000 (0)\n-061C67 Filename Length       0068 (104)\n-061C69 Extra Length          0009 (9)\n-061C6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x61C6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-061CD3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-061CD5   Length              0005 (5)\n-061CD7   Flags               01 (1) 'Modification'\n-061CD8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-061CDC LOCAL HEADER #215     04034B50 (67324752)\n-061CE0 Extract Zip Spec      14 (20) '2.0'\n-061CE1 Extract OS            00 (0) 'MS-DOS'\n-061CE2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-061CE4 Compression Method    0000 (0) 'Stored'\n-061CE6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-061CEA CRC                   00000000 (0)\n-061CEE Compressed Size       00000000 (0)\n-061CF2 Uncompressed Size     00000000 (0)\n-061CF6 Filename Length       007E (126)\n-061CF8 Extra Length          0009 (9)\n-061CFA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x61CFA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-061D78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-061D7A   Length              0005 (5)\n-061D7C   Flags               01 (1) 'Modification'\n-061D7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-061D81 PAYLOAD\n-\n-063C04 DATA DESCRIPTOR       08074B50 (134695760)\n-063C08 CRC                   847E83D6 (2222883798)\n-063C0C Compressed Size       00001E83 (7811)\n-063C10 Uncompressed Size     00001E83 (7811)\n-\n-063C14 LOCAL HEADER #216     04034B50 (67324752)\n-063C18 Extract Zip Spec      14 (20) '2.0'\n-063C19 Extract OS            00 (0) 'MS-DOS'\n-063C1A General Purpose Flag  0000 (0)\n-063C1C Compression Method    0000 (0) 'Stored'\n-063C1E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-063C22 CRC                   00000000 (0)\n-063C26 Compressed Size       00000000 (0)\n-063C2A Uncompressed Size     00000000 (0)\n-063C2E Filename Length       0028 (40)\n-063C30 Extra Length          0009 (9)\n-063C32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x63C32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-063C5A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-063C5C   Length              0005 (5)\n-063C5E   Flags               01 (1) 'Modification'\n-063C5F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-063C63 LOCAL HEADER #217     04034B50 (67324752)\n-063C67 Extract Zip Spec      14 (20) '2.0'\n-063C68 Extract OS            00 (0) 'MS-DOS'\n-063C69 General Purpose Flag  0000 (0)\n-063C6B Compression Method    0000 (0) 'Stored'\n-063C6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-063C71 CRC                   00000000 (0)\n-063C75 Compressed Size       00000000 (0)\n-063C79 Uncompressed Size     00000000 (0)\n-063C7D Filename Length       002F (47)\n-063C7F Extra Length          0009 (9)\n-063C81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x63C81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-063CB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-063CB2   Length              0005 (5)\n-063CB4   Flags               01 (1) 'Modification'\n-063CB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-063CB9 LOCAL HEADER #218     04034B50 (67324752)\n-063CBD Extract Zip Spec      14 (20) '2.0'\n-063CBE Extract OS            00 (0) 'MS-DOS'\n-063CBF General Purpose Flag  0000 (0)\n-063CC1 Compression Method    0000 (0) 'Stored'\n-063CC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-063CC7 CRC                   00000000 (0)\n-063CCB Compressed Size       00000000 (0)\n-063CCF Uncompressed Size     00000000 (0)\n-063CD3 Filename Length       006E (110)\n-063CD5 Extra Length          0009 (9)\n-063CD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x63CD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-063D45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-063D47   Length              0005 (5)\n-063D49   Flags               01 (1) 'Modification'\n-063D4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-063D4E LOCAL HEADER #219     04034B50 (67324752)\n-063D52 Extract Zip Spec      14 (20) '2.0'\n-063D53 Extract OS            00 (0) 'MS-DOS'\n-063D54 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-063D56 Compression Method    0000 (0) 'Stored'\n-063D58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-063D5C CRC                   00000000 (0)\n-063D60 Compressed Size       00000000 (0)\n-063D64 Uncompressed Size     00000000 (0)\n-063D68 Filename Length       0084 (132)\n-063D6A Extra Length          0009 (9)\n-063D6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+063B02 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+063B04   Length              0005 (5)\n+063B06   Flags               01 (1) 'Modification'\n+063B07   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+063B0B PAYLOAD\n+\n+065605 DATA DESCRIPTOR       08074B50 (134695760)\n+065609 CRC                   73F3DBE5 (1945361381)\n+06560D Compressed Size       00001AFA (6906)\n+065611 Uncompressed Size     00001AFA (6906)\n+\n+065615 LOCAL HEADER #214     04034B50 (67324752)\n+065619 Extract Zip Spec      14 (20) '2.0'\n+06561A Extract OS            00 (0) 'MS-DOS'\n+06561B General Purpose Flag  0000 (0)\n+06561D Compression Method    0000 (0) 'Stored'\n+06561F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+065623 CRC                   00000000 (0)\n+065627 Compressed Size       00000000 (0)\n+06562B Uncompressed Size     00000000 (0)\n+06562F Filename Length       0068 (104)\n+065631 Extra Length          0009 (9)\n+065633 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65633: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06569B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06569D   Length              0005 (5)\n+06569F   Flags               01 (1) 'Modification'\n+0656A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0656A4 LOCAL HEADER #215     04034B50 (67324752)\n+0656A8 Extract Zip Spec      14 (20) '2.0'\n+0656A9 Extract OS            00 (0) 'MS-DOS'\n+0656AA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0656AC Compression Method    0000 (0) 'Stored'\n+0656AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0656B2 CRC                   00000000 (0)\n+0656B6 Compressed Size       00000000 (0)\n+0656BA Uncompressed Size     00000000 (0)\n+0656BE Filename Length       007E (126)\n+0656C0 Extra Length          0009 (9)\n+0656C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+065740 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+065742   Length              0005 (5)\n+065744   Flags               01 (1) 'Modification'\n+065745   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+065749 PAYLOAD\n+\n+0675CC DATA DESCRIPTOR       08074B50 (134695760)\n+0675D0 CRC                   847E83D6 (2222883798)\n+0675D4 Compressed Size       00001E83 (7811)\n+0675D8 Uncompressed Size     00001E83 (7811)\n+\n+0675DC LOCAL HEADER #216     04034B50 (67324752)\n+0675E0 Extract Zip Spec      14 (20) '2.0'\n+0675E1 Extract OS            00 (0) 'MS-DOS'\n+0675E2 General Purpose Flag  0000 (0)\n+0675E4 Compression Method    0000 (0) 'Stored'\n+0675E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0675EA CRC                   00000000 (0)\n+0675EE Compressed Size       00000000 (0)\n+0675F2 Uncompressed Size     00000000 (0)\n+0675F6 Filename Length       0028 (40)\n+0675F8 Extra Length          0009 (9)\n+0675FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x675FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+067622 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+067624   Length              0005 (5)\n+067626   Flags               01 (1) 'Modification'\n+067627   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06762B LOCAL HEADER #217     04034B50 (67324752)\n+06762F Extract Zip Spec      14 (20) '2.0'\n+067630 Extract OS            00 (0) 'MS-DOS'\n+067631 General Purpose Flag  0000 (0)\n+067633 Compression Method    0000 (0) 'Stored'\n+067635 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+067639 CRC                   00000000 (0)\n+06763D Compressed Size       00000000 (0)\n+067641 Uncompressed Size     00000000 (0)\n+067645 Filename Length       002F (47)\n+067647 Extra Length          0009 (9)\n+067649 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x67649: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+067678 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06767A   Length              0005 (5)\n+06767C   Flags               01 (1) 'Modification'\n+06767D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+067681 LOCAL HEADER #218     04034B50 (67324752)\n+067685 Extract Zip Spec      14 (20) '2.0'\n+067686 Extract OS            00 (0) 'MS-DOS'\n+067687 General Purpose Flag  0000 (0)\n+067689 Compression Method    0000 (0) 'Stored'\n+06768B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06768F CRC                   00000000 (0)\n+067693 Compressed Size       00000000 (0)\n+067697 Uncompressed Size     00000000 (0)\n+06769B Filename Length       006E (110)\n+06769D Extra Length          0009 (9)\n+06769F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6769F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06770D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06770F   Length              0005 (5)\n+067711   Flags               01 (1) 'Modification'\n+067712   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+067716 LOCAL HEADER #219     04034B50 (67324752)\n+06771A Extract Zip Spec      14 (20) '2.0'\n+06771B Extract OS            00 (0) 'MS-DOS'\n+06771C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06771E Compression Method    0000 (0) 'Stored'\n+067720 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+067724 CRC                   00000000 (0)\n+067728 Compressed Size       00000000 (0)\n+06772C Uncompressed Size     00000000 (0)\n+067730 Filename Length       0084 (132)\n+067732 Extra Length          0009 (9)\n+067734 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x63D6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x67734: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-063DF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-063DF2   Length              0005 (5)\n-063DF4   Flags               01 (1) 'Modification'\n-063DF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-063DF9 PAYLOAD\n-\n-067BF4 DATA DESCRIPTOR       08074B50 (134695760)\n-067BF8 CRC                   8DCDE743 (2379081539)\n-067BFC Compressed Size       00003DFB (15867)\n-067C00 Uncompressed Size     00003DFB (15867)\n-\n-067C04 LOCAL HEADER #220     04034B50 (67324752)\n-067C08 Extract Zip Spec      14 (20) '2.0'\n-067C09 Extract OS            00 (0) 'MS-DOS'\n-067C0A General Purpose Flag  0000 (0)\n-067C0C Compression Method    0000 (0) 'Stored'\n-067C0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-067C12 CRC                   00000000 (0)\n-067C16 Compressed Size       00000000 (0)\n-067C1A Uncompressed Size     00000000 (0)\n-067C1E Filename Length       0068 (104)\n-067C20 Extra Length          0009 (9)\n-067C22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x67C22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-067C8A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-067C8C   Length              0005 (5)\n-067C8E   Flags               01 (1) 'Modification'\n-067C8F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-067C93 LOCAL HEADER #221     04034B50 (67324752)\n-067C97 Extract Zip Spec      14 (20) '2.0'\n-067C98 Extract OS            00 (0) 'MS-DOS'\n-067C99 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-067C9B Compression Method    0000 (0) 'Stored'\n-067C9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-067CA1 CRC                   00000000 (0)\n-067CA5 Compressed Size       00000000 (0)\n-067CA9 Uncompressed Size     00000000 (0)\n-067CAD Filename Length       007E (126)\n-067CAF Extra Length          0009 (9)\n-067CB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x67CB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-067D2F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-067D31   Length              0005 (5)\n-067D33   Flags               01 (1) 'Modification'\n-067D34   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-067D38 PAYLOAD\n-\n-06BAEF DATA DESCRIPTOR       08074B50 (134695760)\n-06BAF3 CRC                   46F84C94 (1190677652)\n-06BAF7 Compressed Size       00003DB7 (15799)\n-06BAFB Uncompressed Size     00003DB7 (15799)\n-\n-06BAFF LOCAL HEADER #222     04034B50 (67324752)\n-06BB03 Extract Zip Spec      14 (20) '2.0'\n-06BB04 Extract OS            00 (0) 'MS-DOS'\n-06BB05 General Purpose Flag  0000 (0)\n-06BB07 Compression Method    0000 (0) 'Stored'\n-06BB09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06BB0D CRC                   00000000 (0)\n-06BB11 Compressed Size       00000000 (0)\n-06BB15 Uncompressed Size     00000000 (0)\n-06BB19 Filename Length       006E (110)\n-06BB1B Extra Length          0009 (9)\n-06BB1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6BB1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06BB8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06BB8D   Length              0005 (5)\n-06BB8F   Flags               01 (1) 'Modification'\n-06BB90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06BB94 LOCAL HEADER #223     04034B50 (67324752)\n-06BB98 Extract Zip Spec      14 (20) '2.0'\n-06BB99 Extract OS            00 (0) 'MS-DOS'\n-06BB9A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06BB9C Compression Method    0000 (0) 'Stored'\n-06BB9E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06BBA2 CRC                   00000000 (0)\n-06BBA6 Compressed Size       00000000 (0)\n-06BBAA Uncompressed Size     00000000 (0)\n-06BBAE Filename Length       0084 (132)\n-06BBB0 Extra Length          0009 (9)\n-06BBB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0677B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0677BA   Length              0005 (5)\n+0677BC   Flags               01 (1) 'Modification'\n+0677BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0677C1 PAYLOAD\n+\n+06B5BC DATA DESCRIPTOR       08074B50 (134695760)\n+06B5C0 CRC                   8DCDE743 (2379081539)\n+06B5C4 Compressed Size       00003DFB (15867)\n+06B5C8 Uncompressed Size     00003DFB (15867)\n+\n+06B5CC LOCAL HEADER #220     04034B50 (67324752)\n+06B5D0 Extract Zip Spec      14 (20) '2.0'\n+06B5D1 Extract OS            00 (0) 'MS-DOS'\n+06B5D2 General Purpose Flag  0000 (0)\n+06B5D4 Compression Method    0000 (0) 'Stored'\n+06B5D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06B5DA CRC                   00000000 (0)\n+06B5DE Compressed Size       00000000 (0)\n+06B5E2 Uncompressed Size     00000000 (0)\n+06B5E6 Filename Length       0068 (104)\n+06B5E8 Extra Length          0009 (9)\n+06B5EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6B5EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06B652 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06B654   Length              0005 (5)\n+06B656   Flags               01 (1) 'Modification'\n+06B657   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06B65B LOCAL HEADER #221     04034B50 (67324752)\n+06B65F Extract Zip Spec      14 (20) '2.0'\n+06B660 Extract OS            00 (0) 'MS-DOS'\n+06B661 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06B663 Compression Method    0000 (0) 'Stored'\n+06B665 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06B669 CRC                   00000000 (0)\n+06B66D Compressed Size       00000000 (0)\n+06B671 Uncompressed Size     00000000 (0)\n+06B675 Filename Length       007E (126)\n+06B677 Extra Length          0009 (9)\n+06B679 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6B679: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06B6F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06B6F9   Length              0005 (5)\n+06B6FB   Flags               01 (1) 'Modification'\n+06B6FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06B700 PAYLOAD\n+\n+06F4B7 DATA DESCRIPTOR       08074B50 (134695760)\n+06F4BB CRC                   46F84C94 (1190677652)\n+06F4BF Compressed Size       00003DB7 (15799)\n+06F4C3 Uncompressed Size     00003DB7 (15799)\n+\n+06F4C7 LOCAL HEADER #222     04034B50 (67324752)\n+06F4CB Extract Zip Spec      14 (20) '2.0'\n+06F4CC Extract OS            00 (0) 'MS-DOS'\n+06F4CD General Purpose Flag  0000 (0)\n+06F4CF Compression Method    0000 (0) 'Stored'\n+06F4D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06F4D5 CRC                   00000000 (0)\n+06F4D9 Compressed Size       00000000 (0)\n+06F4DD Uncompressed Size     00000000 (0)\n+06F4E1 Filename Length       006E (110)\n+06F4E3 Extra Length          0009 (9)\n+06F4E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6F4E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06F553 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06F555   Length              0005 (5)\n+06F557   Flags               01 (1) 'Modification'\n+06F558   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06F55C LOCAL HEADER #223     04034B50 (67324752)\n+06F560 Extract Zip Spec      14 (20) '2.0'\n+06F561 Extract OS            00 (0) 'MS-DOS'\n+06F562 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06F564 Compression Method    0000 (0) 'Stored'\n+06F566 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06F56A CRC                   00000000 (0)\n+06F56E Compressed Size       00000000 (0)\n+06F572 Uncompressed Size     00000000 (0)\n+06F576 Filename Length       0084 (132)\n+06F578 Extra Length          0009 (9)\n+06F57A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x6BBB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6F57A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-06BC36 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06BC38   Length              0005 (5)\n-06BC3A   Flags               01 (1) 'Modification'\n-06BC3B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06BC3F PAYLOAD\n-\n-06E50E DATA DESCRIPTOR       08074B50 (134695760)\n-06E512 CRC                   96FAF425 (2533028901)\n-06E516 Compressed Size       000028CF (10447)\n-06E51A Uncompressed Size     000028CF (10447)\n-\n-06E51E LOCAL HEADER #224     04034B50 (67324752)\n-06E522 Extract Zip Spec      14 (20) '2.0'\n-06E523 Extract OS            00 (0) 'MS-DOS'\n-06E524 General Purpose Flag  0000 (0)\n-06E526 Compression Method    0000 (0) 'Stored'\n-06E528 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06E52C CRC                   00000000 (0)\n-06E530 Compressed Size       00000000 (0)\n-06E534 Uncompressed Size     00000000 (0)\n-06E538 Filename Length       0068 (104)\n-06E53A Extra Length          0009 (9)\n-06E53C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6E53C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06E5A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06E5A6   Length              0005 (5)\n-06E5A8   Flags               01 (1) 'Modification'\n-06E5A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06E5AD LOCAL HEADER #225     04034B50 (67324752)\n-06E5B1 Extract Zip Spec      14 (20) '2.0'\n-06E5B2 Extract OS            00 (0) 'MS-DOS'\n-06E5B3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06E5B5 Compression Method    0000 (0) 'Stored'\n-06E5B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06E5BB CRC                   00000000 (0)\n-06E5BF Compressed Size       00000000 (0)\n-06E5C3 Uncompressed Size     00000000 (0)\n-06E5C7 Filename Length       007E (126)\n-06E5C9 Extra Length          0009 (9)\n-06E5CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6E5CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06E649 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06E64B   Length              0005 (5)\n-06E64D   Flags               01 (1) 'Modification'\n-06E64E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06E652 PAYLOAD\n-\n-07129C DATA DESCRIPTOR       08074B50 (134695760)\n-0712A0 CRC                   77DFCD97 (2011155863)\n-0712A4 Compressed Size       00002C4A (11338)\n-0712A8 Uncompressed Size     00002C4A (11338)\n-\n-0712AC LOCAL HEADER #226     04034B50 (67324752)\n-0712B0 Extract Zip Spec      14 (20) '2.0'\n-0712B1 Extract OS            00 (0) 'MS-DOS'\n-0712B2 General Purpose Flag  0000 (0)\n-0712B4 Compression Method    0000 (0) 'Stored'\n-0712B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0712BA CRC                   00000000 (0)\n-0712BE Compressed Size       00000000 (0)\n-0712C2 Uncompressed Size     00000000 (0)\n-0712C6 Filename Length       0028 (40)\n-0712C8 Extra Length          0009 (9)\n-0712CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x712CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0712F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0712F4   Length              0005 (5)\n-0712F6   Flags               01 (1) 'Modification'\n-0712F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0712FB LOCAL HEADER #227     04034B50 (67324752)\n-0712FF Extract Zip Spec      14 (20) '2.0'\n-071300 Extract OS            00 (0) 'MS-DOS'\n-071301 General Purpose Flag  0000 (0)\n-071303 Compression Method    0000 (0) 'Stored'\n-071305 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-071309 CRC                   00000000 (0)\n-07130D Compressed Size       00000000 (0)\n-071311 Uncompressed Size     00000000 (0)\n-071315 Filename Length       002F (47)\n-071317 Extra Length          0009 (9)\n-071319 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x71319: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-071348 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07134A   Length              0005 (5)\n-07134C   Flags               01 (1) 'Modification'\n-07134D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-071351 LOCAL HEADER #228     04034B50 (67324752)\n-071355 Extract Zip Spec      14 (20) '2.0'\n-071356 Extract OS            00 (0) 'MS-DOS'\n-071357 General Purpose Flag  0000 (0)\n-071359 Compression Method    0000 (0) 'Stored'\n-07135B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-07135F CRC                   00000000 (0)\n-071363 Compressed Size       00000000 (0)\n-071367 Uncompressed Size     00000000 (0)\n-07136B Filename Length       006E (110)\n-07136D Extra Length          0009 (9)\n-07136F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x7136F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0713DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0713DF   Length              0005 (5)\n-0713E1   Flags               01 (1) 'Modification'\n-0713E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0713E6 LOCAL HEADER #229     04034B50 (67324752)\n-0713EA Extract Zip Spec      14 (20) '2.0'\n-0713EB Extract OS            00 (0) 'MS-DOS'\n-0713EC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0713EE Compression Method    0000 (0) 'Stored'\n-0713F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0713F4 CRC                   00000000 (0)\n-0713F8 Compressed Size       00000000 (0)\n-0713FC Uncompressed Size     00000000 (0)\n-071400 Filename Length       0084 (132)\n-071402 Extra Length          0009 (9)\n-071404 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+06F5FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06F600   Length              0005 (5)\n+06F602   Flags               01 (1) 'Modification'\n+06F603   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06F607 PAYLOAD\n+\n+071ED6 DATA DESCRIPTOR       08074B50 (134695760)\n+071EDA CRC                   96FAF425 (2533028901)\n+071EDE Compressed Size       000028CF (10447)\n+071EE2 Uncompressed Size     000028CF (10447)\n+\n+071EE6 LOCAL HEADER #224     04034B50 (67324752)\n+071EEA Extract Zip Spec      14 (20) '2.0'\n+071EEB Extract OS            00 (0) 'MS-DOS'\n+071EEC General Purpose Flag  0000 (0)\n+071EEE Compression Method    0000 (0) 'Stored'\n+071EF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+071EF4 CRC                   00000000 (0)\n+071EF8 Compressed Size       00000000 (0)\n+071EFC Uncompressed Size     00000000 (0)\n+071F00 Filename Length       0068 (104)\n+071F02 Extra Length          0009 (9)\n+071F04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x71F04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+071F6C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+071F6E   Length              0005 (5)\n+071F70   Flags               01 (1) 'Modification'\n+071F71   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+071F75 LOCAL HEADER #225     04034B50 (67324752)\n+071F79 Extract Zip Spec      14 (20) '2.0'\n+071F7A Extract OS            00 (0) 'MS-DOS'\n+071F7B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+071F7D Compression Method    0000 (0) 'Stored'\n+071F7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+071F83 CRC                   00000000 (0)\n+071F87 Compressed Size       00000000 (0)\n+071F8B Uncompressed Size     00000000 (0)\n+071F8F Filename Length       007E (126)\n+071F91 Extra Length          0009 (9)\n+071F93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x71F93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+072011 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+072013   Length              0005 (5)\n+072015   Flags               01 (1) 'Modification'\n+072016   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+07201A PAYLOAD\n+\n+074C64 DATA DESCRIPTOR       08074B50 (134695760)\n+074C68 CRC                   77DFCD97 (2011155863)\n+074C6C Compressed Size       00002C4A (11338)\n+074C70 Uncompressed Size     00002C4A (11338)\n+\n+074C74 LOCAL HEADER #226     04034B50 (67324752)\n+074C78 Extract Zip Spec      14 (20) '2.0'\n+074C79 Extract OS            00 (0) 'MS-DOS'\n+074C7A General Purpose Flag  0000 (0)\n+074C7C Compression Method    0000 (0) 'Stored'\n+074C7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+074C82 CRC                   00000000 (0)\n+074C86 Compressed Size       00000000 (0)\n+074C8A Uncompressed Size     00000000 (0)\n+074C8E Filename Length       0028 (40)\n+074C90 Extra Length          0009 (9)\n+074C92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x74C92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+074CBA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+074CBC   Length              0005 (5)\n+074CBE   Flags               01 (1) 'Modification'\n+074CBF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+074CC3 LOCAL HEADER #227     04034B50 (67324752)\n+074CC7 Extract Zip Spec      14 (20) '2.0'\n+074CC8 Extract OS            00 (0) 'MS-DOS'\n+074CC9 General Purpose Flag  0000 (0)\n+074CCB Compression Method    0000 (0) 'Stored'\n+074CCD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+074CD1 CRC                   00000000 (0)\n+074CD5 Compressed Size       00000000 (0)\n+074CD9 Uncompressed Size     00000000 (0)\n+074CDD Filename Length       002F (47)\n+074CDF Extra Length          0009 (9)\n+074CE1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x74CE1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+074D10 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+074D12   Length              0005 (5)\n+074D14   Flags               01 (1) 'Modification'\n+074D15   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+074D19 LOCAL HEADER #228     04034B50 (67324752)\n+074D1D Extract Zip Spec      14 (20) '2.0'\n+074D1E Extract OS            00 (0) 'MS-DOS'\n+074D1F General Purpose Flag  0000 (0)\n+074D21 Compression Method    0000 (0) 'Stored'\n+074D23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+074D27 CRC                   00000000 (0)\n+074D2B Compressed Size       00000000 (0)\n+074D2F Uncompressed Size     00000000 (0)\n+074D33 Filename Length       006E (110)\n+074D35 Extra Length          0009 (9)\n+074D37 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x74D37: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+074DA5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+074DA7   Length              0005 (5)\n+074DA9   Flags               01 (1) 'Modification'\n+074DAA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+074DAE LOCAL HEADER #229     04034B50 (67324752)\n+074DB2 Extract Zip Spec      14 (20) '2.0'\n+074DB3 Extract OS            00 (0) 'MS-DOS'\n+074DB4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+074DB6 Compression Method    0000 (0) 'Stored'\n+074DB8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+074DBC CRC                   00000000 (0)\n+074DC0 Compressed Size       00000000 (0)\n+074DC4 Uncompressed Size     00000000 (0)\n+074DC8 Filename Length       0084 (132)\n+074DCA Extra Length          0009 (9)\n+074DCC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x71404: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x74DCC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-071488 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07148A   Length              0005 (5)\n-07148C   Flags               01 (1) 'Modification'\n-07148D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-071491 PAYLOAD\n-\n-076592 DATA DESCRIPTOR       08074B50 (134695760)\n-076596 CRC                   249CCFCD (614256589)\n-07659A Compressed Size       00005101 (20737)\n-07659E Uncompressed Size     00005101 (20737)\n-\n-0765A2 LOCAL HEADER #230     04034B50 (67324752)\n-0765A6 Extract Zip Spec      14 (20) '2.0'\n-0765A7 Extract OS            00 (0) 'MS-DOS'\n-0765A8 General Purpose Flag  0000 (0)\n-0765AA Compression Method    0000 (0) 'Stored'\n-0765AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0765B0 CRC                   00000000 (0)\n-0765B4 Compressed Size       00000000 (0)\n-0765B8 Uncompressed Size     00000000 (0)\n-0765BC Filename Length       0068 (104)\n-0765BE Extra Length          0009 (9)\n-0765C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x765C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-076628 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07662A   Length              0005 (5)\n-07662C   Flags               01 (1) 'Modification'\n-07662D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-076631 LOCAL HEADER #231     04034B50 (67324752)\n-076635 Extract Zip Spec      14 (20) '2.0'\n-076636 Extract OS            00 (0) 'MS-DOS'\n-076637 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-076639 Compression Method    0000 (0) 'Stored'\n-07663B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-07663F CRC                   00000000 (0)\n-076643 Compressed Size       00000000 (0)\n-076647 Uncompressed Size     00000000 (0)\n-07664B Filename Length       007E (126)\n-07664D Extra Length          0009 (9)\n-07664F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x7664F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0766CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0766CF   Length              0005 (5)\n-0766D1   Flags               01 (1) 'Modification'\n-0766D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0766D6 PAYLOAD\n-\n-07A48D DATA DESCRIPTOR       08074B50 (134695760)\n-07A491 CRC                   46DA6369 (1188717417)\n-07A495 Compressed Size       00003DB7 (15799)\n-07A499 Uncompressed Size     00003DB7 (15799)\n-\n-07A49D LOCAL HEADER #232     04034B50 (67324752)\n-07A4A1 Extract Zip Spec      14 (20) '2.0'\n-07A4A2 Extract OS            00 (0) 'MS-DOS'\n-07A4A3 General Purpose Flag  0000 (0)\n-07A4A5 Compression Method    0000 (0) 'Stored'\n-07A4A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-07A4AB CRC                   00000000 (0)\n-07A4AF Compressed Size       00000000 (0)\n-07A4B3 Uncompressed Size     00000000 (0)\n-07A4B7 Filename Length       006E (110)\n-07A4B9 Extra Length          0009 (9)\n-07A4BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x7A4BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07A529 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07A52B   Length              0005 (5)\n-07A52D   Flags               01 (1) 'Modification'\n-07A52E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-07A532 LOCAL HEADER #233     04034B50 (67324752)\n-07A536 Extract Zip Spec      14 (20) '2.0'\n-07A537 Extract OS            00 (0) 'MS-DOS'\n-07A538 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-07A53A Compression Method    0000 (0) 'Stored'\n-07A53C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-07A540 CRC                   00000000 (0)\n-07A544 Compressed Size       00000000 (0)\n-07A548 Uncompressed Size     00000000 (0)\n-07A54C Filename Length       0084 (132)\n-07A54E Extra Length          0009 (9)\n-07A550 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+074E50 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+074E52   Length              0005 (5)\n+074E54   Flags               01 (1) 'Modification'\n+074E55   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+074E59 PAYLOAD\n+\n+079F5A DATA DESCRIPTOR       08074B50 (134695760)\n+079F5E CRC                   249CCFCD (614256589)\n+079F62 Compressed Size       00005101 (20737)\n+079F66 Uncompressed Size     00005101 (20737)\n+\n+079F6A LOCAL HEADER #230     04034B50 (67324752)\n+079F6E Extract Zip Spec      14 (20) '2.0'\n+079F6F Extract OS            00 (0) 'MS-DOS'\n+079F70 General Purpose Flag  0000 (0)\n+079F72 Compression Method    0000 (0) 'Stored'\n+079F74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+079F78 CRC                   00000000 (0)\n+079F7C Compressed Size       00000000 (0)\n+079F80 Uncompressed Size     00000000 (0)\n+079F84 Filename Length       0068 (104)\n+079F86 Extra Length          0009 (9)\n+079F88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x79F88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+079FF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+079FF2   Length              0005 (5)\n+079FF4   Flags               01 (1) 'Modification'\n+079FF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+079FF9 LOCAL HEADER #231     04034B50 (67324752)\n+079FFD Extract Zip Spec      14 (20) '2.0'\n+079FFE Extract OS            00 (0) 'MS-DOS'\n+079FFF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+07A001 Compression Method    0000 (0) 'Stored'\n+07A003 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07A007 CRC                   00000000 (0)\n+07A00B Compressed Size       00000000 (0)\n+07A00F Uncompressed Size     00000000 (0)\n+07A013 Filename Length       007E (126)\n+07A015 Extra Length          0009 (9)\n+07A017 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7A017: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07A095 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+07A097   Length              0005 (5)\n+07A099   Flags               01 (1) 'Modification'\n+07A09A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+07A09E PAYLOAD\n+\n+07DE55 DATA DESCRIPTOR       08074B50 (134695760)\n+07DE59 CRC                   46DA6369 (1188717417)\n+07DE5D Compressed Size       00003DB7 (15799)\n+07DE61 Uncompressed Size     00003DB7 (15799)\n+\n+07DE65 LOCAL HEADER #232     04034B50 (67324752)\n+07DE69 Extract Zip Spec      14 (20) '2.0'\n+07DE6A Extract OS            00 (0) 'MS-DOS'\n+07DE6B General Purpose Flag  0000 (0)\n+07DE6D Compression Method    0000 (0) 'Stored'\n+07DE6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07DE73 CRC                   00000000 (0)\n+07DE77 Compressed Size       00000000 (0)\n+07DE7B Uncompressed Size     00000000 (0)\n+07DE7F Filename Length       006E (110)\n+07DE81 Extra Length          0009 (9)\n+07DE83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7DE83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07DEF1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+07DEF3   Length              0005 (5)\n+07DEF5   Flags               01 (1) 'Modification'\n+07DEF6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+07DEFA LOCAL HEADER #233     04034B50 (67324752)\n+07DEFE Extract Zip Spec      14 (20) '2.0'\n+07DEFF Extract OS            00 (0) 'MS-DOS'\n+07DF00 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+07DF02 Compression Method    0000 (0) 'Stored'\n+07DF04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07DF08 CRC                   00000000 (0)\n+07DF0C Compressed Size       00000000 (0)\n+07DF10 Uncompressed Size     00000000 (0)\n+07DF14 Filename Length       0084 (132)\n+07DF16 Extra Length          0009 (9)\n+07DF18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x7A550: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7DF18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-07A5D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07A5D6   Length              0005 (5)\n-07A5D8   Flags               01 (1) 'Modification'\n-07A5D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-07A5DD PAYLOAD\n-\n-084218 DATA DESCRIPTOR       08074B50 (134695760)\n-08421C CRC                   6668C19E (1718141342)\n-084220 Compressed Size       00009C3B (39995)\n-084224 Uncompressed Size     00009C3B (39995)\n-\n-084228 LOCAL HEADER #234     04034B50 (67324752)\n-08422C Extract Zip Spec      14 (20) '2.0'\n-08422D Extract OS            00 (0) 'MS-DOS'\n-08422E General Purpose Flag  0000 (0)\n-084230 Compression Method    0000 (0) 'Stored'\n-084232 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-084236 CRC                   00000000 (0)\n-08423A Compressed Size       00000000 (0)\n-08423E Uncompressed Size     00000000 (0)\n-084242 Filename Length       0068 (104)\n-084244 Extra Length          0009 (9)\n-084246 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x84246: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0842AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0842B0   Length              0005 (5)\n-0842B2   Flags               01 (1) 'Modification'\n-0842B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0842B7 LOCAL HEADER #235     04034B50 (67324752)\n-0842BB Extract Zip Spec      14 (20) '2.0'\n-0842BC Extract OS            00 (0) 'MS-DOS'\n-0842BD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0842BF Compression Method    0000 (0) 'Stored'\n-0842C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0842C5 CRC                   00000000 (0)\n-0842C9 Compressed Size       00000000 (0)\n-0842CD Uncompressed Size     00000000 (0)\n-0842D1 Filename Length       007E (126)\n-0842D3 Extra Length          0009 (9)\n-0842D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x842D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-084353 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-084355   Length              0005 (5)\n-084357   Flags               01 (1) 'Modification'\n-084358   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08435C PAYLOAD\n-\n-086FA6 DATA DESCRIPTOR       08074B50 (134695760)\n-086FAA CRC                   23E20FDA (602017754)\n-086FAE Compressed Size       00002C4A (11338)\n-086FB2 Uncompressed Size     00002C4A (11338)\n-\n-086FB6 LOCAL HEADER #236     04034B50 (67324752)\n-086FBA Extract Zip Spec      14 (20) '2.0'\n-086FBB Extract OS            00 (0) 'MS-DOS'\n-086FBC General Purpose Flag  0000 (0)\n-086FBE Compression Method    0000 (0) 'Stored'\n-086FC0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-086FC4 CRC                   00000000 (0)\n-086FC8 Compressed Size       00000000 (0)\n-086FCC Uncompressed Size     00000000 (0)\n-086FD0 Filename Length       0023 (35)\n-086FD2 Extra Length          0009 (9)\n-086FD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x86FD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-086FF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-086FF9   Length              0005 (5)\n-086FFB   Flags               01 (1) 'Modification'\n-086FFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-087000 LOCAL HEADER #237     04034B50 (67324752)\n-087004 Extract Zip Spec      14 (20) '2.0'\n-087005 Extract OS            00 (0) 'MS-DOS'\n-087006 General Purpose Flag  0000 (0)\n-087008 Compression Method    0000 (0) 'Stored'\n-08700A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08700E CRC                   00000000 (0)\n-087012 Compressed Size       00000000 (0)\n-087016 Uncompressed Size     00000000 (0)\n-08701A Filename Length       002A (42)\n-08701C Extra Length          0009 (9)\n-08701E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8701E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-087048 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08704A   Length              0005 (5)\n-08704C   Flags               01 (1) 'Modification'\n-08704D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-087051 LOCAL HEADER #238     04034B50 (67324752)\n-087055 Extract Zip Spec      14 (20) '2.0'\n-087056 Extract OS            00 (0) 'MS-DOS'\n-087057 General Purpose Flag  0000 (0)\n-087059 Compression Method    0000 (0) 'Stored'\n-08705B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08705F CRC                   00000000 (0)\n-087063 Compressed Size       00000000 (0)\n-087067 Uncompressed Size     00000000 (0)\n-08706B Filename Length       0052 (82)\n-08706D Extra Length          0009 (9)\n-08706F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8706F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0870C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0870C3   Length              0005 (5)\n-0870C5   Flags               01 (1) 'Modification'\n-0870C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0870CA LOCAL HEADER #239     04034B50 (67324752)\n-0870CE Extract Zip Spec      14 (20) '2.0'\n-0870CF Extract OS            00 (0) 'MS-DOS'\n-0870D0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0870D2 Compression Method    0000 (0) 'Stored'\n-0870D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0870D8 CRC                   00000000 (0)\n-0870DC Compressed Size       00000000 (0)\n-0870E0 Uncompressed Size     00000000 (0)\n-0870E4 Filename Length       0068 (104)\n-0870E6 Extra Length          0009 (9)\n-0870E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x870E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-087150 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-087152   Length              0005 (5)\n-087154   Flags               01 (1) 'Modification'\n-087155   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-087159 PAYLOAD\n-\n-088C16 DATA DESCRIPTOR       08074B50 (134695760)\n-088C1A CRC                   90D14EC3 (2429636291)\n-088C1E Compressed Size       00001ABD (6845)\n-088C22 Uncompressed Size     00001ABD (6845)\n-\n-088C26 LOCAL HEADER #240     04034B50 (67324752)\n-088C2A Extract Zip Spec      14 (20) '2.0'\n-088C2B Extract OS            00 (0) 'MS-DOS'\n-088C2C General Purpose Flag  0000 (0)\n-088C2E Compression Method    0000 (0) 'Stored'\n-088C30 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-088C34 CRC                   00000000 (0)\n-088C38 Compressed Size       00000000 (0)\n-088C3C Uncompressed Size     00000000 (0)\n-088C40 Filename Length       002E (46)\n-088C42 Extra Length          0009 (9)\n-088C44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x88C44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-088C72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-088C74   Length              0005 (5)\n-088C76   Flags               01 (1) 'Modification'\n-088C77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-088C7B LOCAL HEADER #241     04034B50 (67324752)\n-088C7F Extract Zip Spec      14 (20) '2.0'\n-088C80 Extract OS            00 (0) 'MS-DOS'\n-088C81 General Purpose Flag  0000 (0)\n-088C83 Compression Method    0000 (0) 'Stored'\n-088C85 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-088C89 CRC                   00000000 (0)\n-088C8D Compressed Size       00000000 (0)\n-088C91 Uncompressed Size     00000000 (0)\n-088C95 Filename Length       0035 (53)\n-088C97 Extra Length          0009 (9)\n-088C99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x88C99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-088CCE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-088CD0   Length              0005 (5)\n-088CD2   Flags               01 (1) 'Modification'\n-088CD3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-088CD7 LOCAL HEADER #242     04034B50 (67324752)\n-088CDB Extract Zip Spec      14 (20) '2.0'\n-088CDC Extract OS            00 (0) 'MS-DOS'\n-088CDD General Purpose Flag  0000 (0)\n-088CDF Compression Method    0000 (0) 'Stored'\n-088CE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-088CE5 CRC                   00000000 (0)\n-088CE9 Compressed Size       00000000 (0)\n-088CED Uncompressed Size     00000000 (0)\n-088CF1 Filename Length       005E (94)\n-088CF3 Extra Length          0009 (9)\n-088CF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x88CF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-088D53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-088D55   Length              0005 (5)\n-088D57   Flags               01 (1) 'Modification'\n-088D58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-088D5C LOCAL HEADER #243     04034B50 (67324752)\n-088D60 Extract Zip Spec      14 (20) '2.0'\n-088D61 Extract OS            00 (0) 'MS-DOS'\n-088D62 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-088D64 Compression Method    0000 (0) 'Stored'\n-088D66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-088D6A CRC                   00000000 (0)\n-088D6E Compressed Size       00000000 (0)\n-088D72 Uncompressed Size     00000000 (0)\n-088D76 Filename Length       0074 (116)\n-088D78 Extra Length          0009 (9)\n-088D7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x88D7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-088DEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-088DF0   Length              0005 (5)\n-088DF2   Flags               01 (1) 'Modification'\n-088DF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-088DF7 PAYLOAD\n-\n-089CCF DATA DESCRIPTOR       08074B50 (134695760)\n-089CD3 CRC                   F19E6303 (4053689091)\n-089CD7 Compressed Size       00000ED8 (3800)\n-089CDB Uncompressed Size     00000ED8 (3800)\n-\n-089CDF LOCAL HEADER #244     04034B50 (67324752)\n-089CE3 Extract Zip Spec      14 (20) '2.0'\n-089CE4 Extract OS            00 (0) 'MS-DOS'\n-089CE5 General Purpose Flag  0000 (0)\n-089CE7 Compression Method    0000 (0) 'Stored'\n-089CE9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-089CED CRC                   00000000 (0)\n-089CF1 Compressed Size       00000000 (0)\n-089CF5 Uncompressed Size     00000000 (0)\n-089CF9 Filename Length       0064 (100)\n-089CFB Extra Length          0009 (9)\n-089CFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x89CFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-089D61 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-089D63   Length              0005 (5)\n-089D65   Flags               01 (1) 'Modification'\n-089D66   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-089D6A LOCAL HEADER #245     04034B50 (67324752)\n-089D6E Extract Zip Spec      14 (20) '2.0'\n-089D6F Extract OS            00 (0) 'MS-DOS'\n-089D70 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-089D72 Compression Method    0000 (0) 'Stored'\n-089D74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-089D78 CRC                   00000000 (0)\n-089D7C Compressed Size       00000000 (0)\n-089D80 Uncompressed Size     00000000 (0)\n-089D84 Filename Length       007A (122)\n-089D86 Extra Length          0009 (9)\n-089D88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x89D88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-089E02 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-089E04   Length              0005 (5)\n-089E06   Flags               01 (1) 'Modification'\n-089E07   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-089E0B PAYLOAD\n-\n-08B4E2 DATA DESCRIPTOR       08074B50 (134695760)\n-08B4E6 CRC                   51B4F745 (1370814277)\n-08B4EA Compressed Size       000016D7 (5847)\n-08B4EE Uncompressed Size     000016D7 (5847)\n-\n-08B4F2 LOCAL HEADER #246     04034B50 (67324752)\n-08B4F6 Extract Zip Spec      14 (20) '2.0'\n-08B4F7 Extract OS            00 (0) 'MS-DOS'\n-08B4F8 General Purpose Flag  0000 (0)\n-08B4FA Compression Method    0000 (0) 'Stored'\n-08B4FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08B500 CRC                   00000000 (0)\n-08B504 Compressed Size       00000000 (0)\n-08B508 Uncompressed Size     00000000 (0)\n-08B50C Filename Length       0026 (38)\n-08B50E Extra Length          0009 (9)\n-08B510 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8B510: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08B536 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08B538   Length              0005 (5)\n-08B53A   Flags               01 (1) 'Modification'\n-08B53B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08B53F LOCAL HEADER #247     04034B50 (67324752)\n-08B543 Extract Zip Spec      14 (20) '2.0'\n-08B544 Extract OS            00 (0) 'MS-DOS'\n-08B545 General Purpose Flag  0000 (0)\n-08B547 Compression Method    0000 (0) 'Stored'\n-08B549 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08B54D CRC                   00000000 (0)\n-08B551 Compressed Size       00000000 (0)\n-08B555 Uncompressed Size     00000000 (0)\n-08B559 Filename Length       002D (45)\n-08B55B Extra Length          0009 (9)\n-08B55D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8B55D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08B58A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08B58C   Length              0005 (5)\n-08B58E   Flags               01 (1) 'Modification'\n-08B58F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08B593 LOCAL HEADER #248     04034B50 (67324752)\n-08B597 Extract Zip Spec      14 (20) '2.0'\n-08B598 Extract OS            00 (0) 'MS-DOS'\n-08B599 General Purpose Flag  0000 (0)\n-08B59B Compression Method    0000 (0) 'Stored'\n-08B59D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08B5A1 CRC                   00000000 (0)\n-08B5A5 Compressed Size       00000000 (0)\n-08B5A9 Uncompressed Size     00000000 (0)\n-08B5AD Filename Length       005C (92)\n-08B5AF Extra Length          0009 (9)\n-08B5B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8B5B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08B60D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08B60F   Length              0005 (5)\n-08B611   Flags               01 (1) 'Modification'\n-08B612   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08B616 LOCAL HEADER #249     04034B50 (67324752)\n-08B61A Extract Zip Spec      14 (20) '2.0'\n-08B61B Extract OS            00 (0) 'MS-DOS'\n-08B61C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08B61E Compression Method    0000 (0) 'Stored'\n-08B620 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08B624 CRC                   00000000 (0)\n-08B628 Compressed Size       00000000 (0)\n-08B62C Uncompressed Size     00000000 (0)\n-08B630 Filename Length       0072 (114)\n-08B632 Extra Length          0009 (9)\n-08B634 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8B634: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08B6A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08B6A8   Length              0005 (5)\n-08B6AA   Flags               01 (1) 'Modification'\n-08B6AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08B6AF PAYLOAD\n-\n-08BD75 DATA DESCRIPTOR       08074B50 (134695760)\n-08BD79 CRC                   357DA477 (897426551)\n-08BD7D Compressed Size       000006C6 (1734)\n-08BD81 Uncompressed Size     000006C6 (1734)\n-\n-08BD85 LOCAL HEADER #250     04034B50 (67324752)\n-08BD89 Extract Zip Spec      14 (20) '2.0'\n-08BD8A Extract OS            00 (0) 'MS-DOS'\n-08BD8B General Purpose Flag  0000 (0)\n-08BD8D Compression Method    0000 (0) 'Stored'\n-08BD8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08BD93 CRC                   00000000 (0)\n-08BD97 Compressed Size       00000000 (0)\n-08BD9B Uncompressed Size     00000000 (0)\n-08BD9F Filename Length       0059 (89)\n-08BDA1 Extra Length          0009 (9)\n-08BDA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8BDA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08BDFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08BDFE   Length              0005 (5)\n-08BE00   Flags               01 (1) 'Modification'\n-08BE01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08BE05 LOCAL HEADER #251     04034B50 (67324752)\n-08BE09 Extract Zip Spec      14 (20) '2.0'\n-08BE0A Extract OS            00 (0) 'MS-DOS'\n-08BE0B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08BE0D Compression Method    0000 (0) 'Stored'\n-08BE0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08BE13 CRC                   00000000 (0)\n-08BE17 Compressed Size       00000000 (0)\n-08BE1B Uncompressed Size     00000000 (0)\n-08BE1F Filename Length       006F (111)\n-08BE21 Extra Length          0009 (9)\n-08BE23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8BE23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08BE92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08BE94   Length              0005 (5)\n-08BE96   Flags               01 (1) 'Modification'\n-08BE97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08BE9B PAYLOAD\n-\n-08C857 DATA DESCRIPTOR       08074B50 (134695760)\n-08C85B CRC                   F9CAC97B (4190816635)\n-08C85F Compressed Size       000009BC (2492)\n-08C863 Uncompressed Size     000009BC (2492)\n-\n-08C867 LOCAL HEADER #252     04034B50 (67324752)\n-08C86B Extract Zip Spec      14 (20) '2.0'\n-08C86C Extract OS            00 (0) 'MS-DOS'\n-08C86D General Purpose Flag  0000 (0)\n-08C86F Compression Method    0000 (0) 'Stored'\n-08C871 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08C875 CRC                   00000000 (0)\n-08C879 Compressed Size       00000000 (0)\n-08C87D Uncompressed Size     00000000 (0)\n-08C881 Filename Length       005F (95)\n-08C883 Extra Length          0009 (9)\n-08C885 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8C885: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08C8E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08C8E6   Length              0005 (5)\n-08C8E8   Flags               01 (1) 'Modification'\n-08C8E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08C8ED LOCAL HEADER #253     04034B50 (67324752)\n-08C8F1 Extract Zip Spec      14 (20) '2.0'\n-08C8F2 Extract OS            00 (0) 'MS-DOS'\n-08C8F3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08C8F5 Compression Method    0000 (0) 'Stored'\n-08C8F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08C8FB CRC                   00000000 (0)\n-08C8FF Compressed Size       00000000 (0)\n-08C903 Uncompressed Size     00000000 (0)\n-08C907 Filename Length       0075 (117)\n-08C909 Extra Length          0009 (9)\n-08C90B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8C90B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08C980 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08C982   Length              0005 (5)\n-08C984   Flags               01 (1) 'Modification'\n-08C985   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08C989 PAYLOAD\n-\n-08D390 DATA DESCRIPTOR       08074B50 (134695760)\n-08D394 CRC                   9DEB8C8B (2649459851)\n-08D398 Compressed Size       00000A07 (2567)\n-08D39C Uncompressed Size     00000A07 (2567)\n-\n-08D3A0 LOCAL HEADER #254     04034B50 (67324752)\n-08D3A4 Extract Zip Spec      14 (20) '2.0'\n-08D3A5 Extract OS            00 (0) 'MS-DOS'\n-08D3A6 General Purpose Flag  0000 (0)\n-08D3A8 Compression Method    0000 (0) 'Stored'\n-08D3AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08D3AE CRC                   00000000 (0)\n-08D3B2 Compressed Size       00000000 (0)\n-08D3B6 Uncompressed Size     00000000 (0)\n-08D3BA Filename Length       0059 (89)\n-08D3BC Extra Length          0009 (9)\n-08D3BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8D3BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08D417 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08D419   Length              0005 (5)\n-08D41B   Flags               01 (1) 'Modification'\n-08D41C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08D420 LOCAL HEADER #255     04034B50 (67324752)\n-08D424 Extract Zip Spec      14 (20) '2.0'\n-08D425 Extract OS            00 (0) 'MS-DOS'\n-08D426 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08D428 Compression Method    0000 (0) 'Stored'\n-08D42A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08D42E CRC                   00000000 (0)\n-08D432 Compressed Size       00000000 (0)\n-08D436 Uncompressed Size     00000000 (0)\n-08D43A Filename Length       006F (111)\n-08D43C Extra Length          0009 (9)\n-08D43E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8D43E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08D4AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08D4AF   Length              0005 (5)\n-08D4B1   Flags               01 (1) 'Modification'\n-08D4B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08D4B6 PAYLOAD\n-\n-08E294 DATA DESCRIPTOR       08074B50 (134695760)\n-08E298 CRC                   85B17459 (2242999385)\n-08E29C Compressed Size       00000DDE (3550)\n-08E2A0 Uncompressed Size     00000DDE (3550)\n-\n-08E2A4 LOCAL HEADER #256     04034B50 (67324752)\n-08E2A8 Extract Zip Spec      14 (20) '2.0'\n-08E2A9 Extract OS            00 (0) 'MS-DOS'\n-08E2AA General Purpose Flag  0000 (0)\n-08E2AC Compression Method    0000 (0) 'Stored'\n-08E2AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08E2B2 CRC                   00000000 (0)\n-08E2B6 Compressed Size       00000000 (0)\n-08E2BA Uncompressed Size     00000000 (0)\n-08E2BE Filename Length       0064 (100)\n-08E2C0 Extra Length          0009 (9)\n-08E2C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8E2C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08E326 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08E328   Length              0005 (5)\n-08E32A   Flags               01 (1) 'Modification'\n-08E32B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08E32F LOCAL HEADER #257     04034B50 (67324752)\n-08E333 Extract Zip Spec      14 (20) '2.0'\n-08E334 Extract OS            00 (0) 'MS-DOS'\n-08E335 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08E337 Compression Method    0000 (0) 'Stored'\n-08E339 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08E33D CRC                   00000000 (0)\n-08E341 Compressed Size       00000000 (0)\n-08E345 Uncompressed Size     00000000 (0)\n-08E349 Filename Length       007A (122)\n-08E34B Extra Length          0009 (9)\n-08E34D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8E34D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08E3C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08E3C9   Length              0005 (5)\n-08E3CB   Flags               01 (1) 'Modification'\n-08E3CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08E3D0 PAYLOAD\n-\n-08E99F DATA DESCRIPTOR       08074B50 (134695760)\n-08E9A3 CRC                   9C229073 (2619510899)\n-08E9A7 Compressed Size       000005CF (1487)\n-08E9AB Uncompressed Size     000005CF (1487)\n-\n-08E9AF LOCAL HEADER #258     04034B50 (67324752)\n-08E9B3 Extract Zip Spec      14 (20) '2.0'\n-08E9B4 Extract OS            00 (0) 'MS-DOS'\n-08E9B5 General Purpose Flag  0000 (0)\n-08E9B7 Compression Method    0000 (0) 'Stored'\n-08E9B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08E9BD CRC                   00000000 (0)\n-08E9C1 Compressed Size       00000000 (0)\n-08E9C5 Uncompressed Size     00000000 (0)\n-08E9C9 Filename Length       0064 (100)\n-08E9CB Extra Length          0009 (9)\n-08E9CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8E9CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08EA31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08EA33   Length              0005 (5)\n-08EA35   Flags               01 (1) 'Modification'\n-08EA36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08EA3A LOCAL HEADER #259     04034B50 (67324752)\n-08EA3E Extract Zip Spec      14 (20) '2.0'\n-08EA3F Extract OS            00 (0) 'MS-DOS'\n-08EA40 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08EA42 Compression Method    0000 (0) 'Stored'\n-08EA44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08EA48 CRC                   00000000 (0)\n-08EA4C Compressed Size       00000000 (0)\n-08EA50 Uncompressed Size     00000000 (0)\n-08EA54 Filename Length       007A (122)\n-08EA56 Extra Length          0009 (9)\n-08EA58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8EA58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08EAD2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08EAD4   Length              0005 (5)\n-08EAD6   Flags               01 (1) 'Modification'\n-08EAD7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08EADB PAYLOAD\n-\n-08F09D DATA DESCRIPTOR       08074B50 (134695760)\n-08F0A1 CRC                   A57691CD (2776011213)\n-08F0A5 Compressed Size       000005C2 (1474)\n-08F0A9 Uncompressed Size     000005C2 (1474)\n-\n-08F0AD LOCAL HEADER #260     04034B50 (67324752)\n-08F0B1 Extract Zip Spec      14 (20) '2.0'\n-08F0B2 Extract OS            00 (0) 'MS-DOS'\n-08F0B3 General Purpose Flag  0000 (0)\n-08F0B5 Compression Method    0000 (0) 'Stored'\n-08F0B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08F0BB CRC                   00000000 (0)\n-08F0BF Compressed Size       00000000 (0)\n-08F0C3 Uncompressed Size     00000000 (0)\n-08F0C7 Filename Length       0063 (99)\n-08F0C9 Extra Length          0009 (9)\n-08F0CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8F0CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08F12E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08F130   Length              0005 (5)\n-08F132   Flags               01 (1) 'Modification'\n-08F133   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08F137 LOCAL HEADER #261     04034B50 (67324752)\n-08F13B Extract Zip Spec      14 (20) '2.0'\n-08F13C Extract OS            00 (0) 'MS-DOS'\n-08F13D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08F13F Compression Method    0000 (0) 'Stored'\n-08F141 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08F145 CRC                   00000000 (0)\n-08F149 Compressed Size       00000000 (0)\n-08F14D Uncompressed Size     00000000 (0)\n-08F151 Filename Length       0079 (121)\n-08F153 Extra Length          0009 (9)\n-08F155 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8F155: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08F1CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08F1D0   Length              0005 (5)\n-08F1D2   Flags               01 (1) 'Modification'\n-08F1D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08F1D7 PAYLOAD\n-\n-08F911 DATA DESCRIPTOR       08074B50 (134695760)\n-08F915 CRC                   6CD31445 (1825772613)\n-08F919 Compressed Size       0000073A (1850)\n-08F91D Uncompressed Size     0000073A (1850)\n-\n-08F921 LOCAL HEADER #262     04034B50 (67324752)\n-08F925 Extract Zip Spec      14 (20) '2.0'\n-08F926 Extract OS            00 (0) 'MS-DOS'\n-08F927 General Purpose Flag  0000 (0)\n-08F929 Compression Method    0000 (0) 'Stored'\n-08F92B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08F92F CRC                   00000000 (0)\n-08F933 Compressed Size       00000000 (0)\n-08F937 Uncompressed Size     00000000 (0)\n-08F93B Filename Length       0061 (97)\n-08F93D Extra Length          0009 (9)\n-08F93F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8F93F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08F9A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08F9A2   Length              0005 (5)\n-08F9A4   Flags               01 (1) 'Modification'\n-08F9A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08F9A9 LOCAL HEADER #263     04034B50 (67324752)\n-08F9AD Extract Zip Spec      14 (20) '2.0'\n-08F9AE Extract OS            00 (0) 'MS-DOS'\n-08F9AF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08F9B1 Compression Method    0000 (0) 'Stored'\n-08F9B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08F9B7 CRC                   00000000 (0)\n-08F9BB Compressed Size       00000000 (0)\n-08F9BF Uncompressed Size     00000000 (0)\n-08F9C3 Filename Length       0077 (119)\n-08F9C5 Extra Length          0009 (9)\n-08F9C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8F9C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08FA3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08FA40   Length              0005 (5)\n-08FA42   Flags               01 (1) 'Modification'\n-08FA43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08FA47 PAYLOAD\n-\n-0904D9 DATA DESCRIPTOR       08074B50 (134695760)\n-0904DD CRC                   C97DF8D6 (3380476118)\n-0904E1 Compressed Size       00000A92 (2706)\n-0904E5 Uncompressed Size     00000A92 (2706)\n-\n-0904E9 LOCAL HEADER #264     04034B50 (67324752)\n-0904ED Extract Zip Spec      14 (20) '2.0'\n-0904EE Extract OS            00 (0) 'MS-DOS'\n-0904EF General Purpose Flag  0000 (0)\n-0904F1 Compression Method    0000 (0) 'Stored'\n-0904F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0904F7 CRC                   00000000 (0)\n-0904FB Compressed Size       00000000 (0)\n-0904FF Uncompressed Size     00000000 (0)\n-090503 Filename Length       0023 (35)\n-090505 Extra Length          0009 (9)\n-090507 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x90507: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09052A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09052C   Length              0005 (5)\n-09052E   Flags               01 (1) 'Modification'\n-09052F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-090533 LOCAL HEADER #265     04034B50 (67324752)\n-090537 Extract Zip Spec      14 (20) '2.0'\n-090538 Extract OS            00 (0) 'MS-DOS'\n-090539 General Purpose Flag  0000 (0)\n-09053B Compression Method    0000 (0) 'Stored'\n-09053D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-090541 CRC                   00000000 (0)\n-090545 Compressed Size       00000000 (0)\n-090549 Uncompressed Size     00000000 (0)\n-09054D Filename Length       002A (42)\n-09054F Extra Length          0009 (9)\n-090551 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x90551: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09057B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09057D   Length              0005 (5)\n-09057F   Flags               01 (1) 'Modification'\n-090580   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-090584 LOCAL HEADER #266     04034B50 (67324752)\n-090588 Extract Zip Spec      14 (20) '2.0'\n-090589 Extract OS            00 (0) 'MS-DOS'\n-09058A General Purpose Flag  0000 (0)\n-09058C Compression Method    0000 (0) 'Stored'\n-09058E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-090592 CRC                   00000000 (0)\n-090596 Compressed Size       00000000 (0)\n-09059A Uncompressed Size     00000000 (0)\n-09059E Filename Length       0056 (86)\n-0905A0 Extra Length          0009 (9)\n-0905A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x905A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0905F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0905FA   Length              0005 (5)\n-0905FC   Flags               01 (1) 'Modification'\n-0905FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-090601 LOCAL HEADER #267     04034B50 (67324752)\n-090605 Extract Zip Spec      14 (20) '2.0'\n-090606 Extract OS            00 (0) 'MS-DOS'\n-090607 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-090609 Compression Method    0000 (0) 'Stored'\n-09060B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09060F CRC                   00000000 (0)\n-090613 Compressed Size       00000000 (0)\n-090617 Uncompressed Size     00000000 (0)\n-09061B Filename Length       006C (108)\n-09061D Extra Length          0009 (9)\n-09061F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9061F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09068B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09068D   Length              0005 (5)\n-09068F   Flags               01 (1) 'Modification'\n-090690   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-090694 PAYLOAD\n-\n-090E29 DATA DESCRIPTOR       08074B50 (134695760)\n-090E2D CRC                   0B04A112 (184852754)\n-090E31 Compressed Size       00000795 (1941)\n-090E35 Uncompressed Size     00000795 (1941)\n-\n-090E39 LOCAL HEADER #268     04034B50 (67324752)\n-090E3D Extract Zip Spec      14 (20) '2.0'\n-090E3E Extract OS            00 (0) 'MS-DOS'\n-090E3F General Purpose Flag  0000 (0)\n-090E41 Compression Method    0000 (0) 'Stored'\n-090E43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-090E47 CRC                   00000000 (0)\n-090E4B Compressed Size       00000000 (0)\n-090E4F Uncompressed Size     00000000 (0)\n-090E53 Filename Length       0031 (49)\n-090E55 Extra Length          0009 (9)\n-090E57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x90E57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-090E88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-090E8A   Length              0005 (5)\n-090E8C   Flags               01 (1) 'Modification'\n-090E8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-090E91 LOCAL HEADER #269     04034B50 (67324752)\n-090E95 Extract Zip Spec      14 (20) '2.0'\n-090E96 Extract OS            00 (0) 'MS-DOS'\n-090E97 General Purpose Flag  0000 (0)\n-090E99 Compression Method    0000 (0) 'Stored'\n-090E9B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-090E9F CRC                   00000000 (0)\n-090EA3 Compressed Size       00000000 (0)\n-090EA7 Uncompressed Size     00000000 (0)\n-090EAB Filename Length       0038 (56)\n-090EAD Extra Length          0009 (9)\n-090EAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x90EAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-090EE7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-090EE9   Length              0005 (5)\n-090EEB   Flags               01 (1) 'Modification'\n-090EEC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-090EF0 LOCAL HEADER #270     04034B50 (67324752)\n-090EF4 Extract Zip Spec      14 (20) '2.0'\n-090EF5 Extract OS            00 (0) 'MS-DOS'\n-090EF6 General Purpose Flag  0000 (0)\n-090EF8 Compression Method    0000 (0) 'Stored'\n-090EFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-090EFE CRC                   00000000 (0)\n-090F02 Compressed Size       00000000 (0)\n-090F06 Uncompressed Size     00000000 (0)\n-090F0A Filename Length       006A (106)\n-090F0C Extra Length          0009 (9)\n-090F0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x90F0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-090F78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-090F7A   Length              0005 (5)\n-090F7C   Flags               01 (1) 'Modification'\n-090F7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-090F81 LOCAL HEADER #271     04034B50 (67324752)\n-090F85 Extract Zip Spec      14 (20) '2.0'\n-090F86 Extract OS            00 (0) 'MS-DOS'\n-090F87 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-090F89 Compression Method    0000 (0) 'Stored'\n-090F8B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-090F8F CRC                   00000000 (0)\n-090F93 Compressed Size       00000000 (0)\n-090F97 Uncompressed Size     00000000 (0)\n-090F9B Filename Length       0080 (128)\n-090F9D Extra Length          0009 (9)\n-090F9F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x90F9F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09101F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-091021   Length              0005 (5)\n-091023   Flags               01 (1) 'Modification'\n-091024   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-091028 PAYLOAD\n-\n-0918D3 DATA DESCRIPTOR       08074B50 (134695760)\n-0918D7 CRC                   9A51A289 (2589041289)\n-0918DB Compressed Size       000008AB (2219)\n-0918DF Uncompressed Size     000008AB (2219)\n-\n-0918E3 LOCAL HEADER #272     04034B50 (67324752)\n-0918E7 Extract Zip Spec      14 (20) '2.0'\n-0918E8 Extract OS            00 (0) 'MS-DOS'\n-0918E9 General Purpose Flag  0000 (0)\n-0918EB Compression Method    0000 (0) 'Stored'\n-0918ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0918F1 CRC                   00000000 (0)\n-0918F5 Compressed Size       00000000 (0)\n-0918F9 Uncompressed Size     00000000 (0)\n-0918FD Filename Length       0022 (34)\n-0918FF Extra Length          0009 (9)\n-091901 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x91901: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-091923 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-091925   Length              0005 (5)\n-091927   Flags               01 (1) 'Modification'\n-091928   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09192C LOCAL HEADER #273     04034B50 (67324752)\n-091930 Extract Zip Spec      14 (20) '2.0'\n-091931 Extract OS            00 (0) 'MS-DOS'\n-091932 General Purpose Flag  0000 (0)\n-091934 Compression Method    0000 (0) 'Stored'\n-091936 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09193A CRC                   00000000 (0)\n-09193E Compressed Size       00000000 (0)\n-091942 Uncompressed Size     00000000 (0)\n-091946 Filename Length       0029 (41)\n-091948 Extra Length          0009 (9)\n-09194A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9194A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-091973 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-091975   Length              0005 (5)\n-091977   Flags               01 (1) 'Modification'\n-091978   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09197C LOCAL HEADER #274     04034B50 (67324752)\n-091980 Extract Zip Spec      14 (20) '2.0'\n-091981 Extract OS            00 (0) 'MS-DOS'\n-091982 General Purpose Flag  0000 (0)\n-091984 Compression Method    0000 (0) 'Stored'\n-091986 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09198A CRC                   00000000 (0)\n-09198E Compressed Size       00000000 (0)\n-091992 Uncompressed Size     00000000 (0)\n-091996 Filename Length       004B (75)\n-091998 Extra Length          0009 (9)\n-09199A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9199A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0919E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0919E7   Length              0005 (5)\n-0919E9   Flags               01 (1) 'Modification'\n-0919EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0919EE LOCAL HEADER #275     04034B50 (67324752)\n-0919F2 Extract Zip Spec      14 (20) '2.0'\n-0919F3 Extract OS            00 (0) 'MS-DOS'\n-0919F4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0919F6 Compression Method    0000 (0) 'Stored'\n-0919F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0919FC CRC                   00000000 (0)\n-091A00 Compressed Size       00000000 (0)\n-091A04 Uncompressed Size     00000000 (0)\n-091A08 Filename Length       0061 (97)\n-091A0A Extra Length          0009 (9)\n-091A0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x91A0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-091A6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-091A6F   Length              0005 (5)\n-091A71   Flags               01 (1) 'Modification'\n-091A72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-091A76 PAYLOAD\n-\n-0953E5 DATA DESCRIPTOR       08074B50 (134695760)\n-0953E9 CRC                   BEAE3D9C (3199090076)\n-0953ED Compressed Size       0000396F (14703)\n-0953F1 Uncompressed Size     0000396F (14703)\n-\n-0953F5 LOCAL HEADER #276     04034B50 (67324752)\n-0953F9 Extract Zip Spec      14 (20) '2.0'\n-0953FA Extract OS            00 (0) 'MS-DOS'\n-0953FB General Purpose Flag  0000 (0)\n-0953FD Compression Method    0000 (0) 'Stored'\n-0953FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-095403 CRC                   00000000 (0)\n-095407 Compressed Size       00000000 (0)\n-09540B Uncompressed Size     00000000 (0)\n-09540F Filename Length       0063 (99)\n-095411 Extra Length          0009 (9)\n-095413 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x95413: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-095476 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-095478   Length              0005 (5)\n-09547A   Flags               01 (1) 'Modification'\n-09547B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09547F LOCAL HEADER #277     04034B50 (67324752)\n-095483 Extract Zip Spec      14 (20) '2.0'\n-095484 Extract OS            00 (0) 'MS-DOS'\n-095485 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-095487 Compression Method    0000 (0) 'Stored'\n-095489 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09548D CRC                   00000000 (0)\n-095491 Compressed Size       00000000 (0)\n-095495 Uncompressed Size     00000000 (0)\n-095499 Filename Length       0079 (121)\n-09549B Extra Length          0009 (9)\n-09549D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9549D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-095516 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-095518   Length              0005 (5)\n-09551A   Flags               01 (1) 'Modification'\n-09551B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09551F PAYLOAD\n-\n-096363 DATA DESCRIPTOR       08074B50 (134695760)\n-096367 CRC                   28034B81 (671304577)\n-09636B Compressed Size       00000E44 (3652)\n-09636F Uncompressed Size     00000E44 (3652)\n-\n-096373 LOCAL HEADER #278     04034B50 (67324752)\n-096377 Extract Zip Spec      14 (20) '2.0'\n-096378 Extract OS            00 (0) 'MS-DOS'\n-096379 General Purpose Flag  0000 (0)\n-09637B Compression Method    0000 (0) 'Stored'\n-09637D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-096381 CRC                   00000000 (0)\n-096385 Compressed Size       00000000 (0)\n-096389 Uncompressed Size     00000000 (0)\n-09638D Filename Length       0030 (48)\n-09638F Extra Length          0009 (9)\n-096391 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x96391: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0963C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0963C3   Length              0005 (5)\n-0963C5   Flags               01 (1) 'Modification'\n-0963C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0963CA LOCAL HEADER #279     04034B50 (67324752)\n-0963CE Extract Zip Spec      14 (20) '2.0'\n-0963CF Extract OS            00 (0) 'MS-DOS'\n-0963D0 General Purpose Flag  0000 (0)\n-0963D2 Compression Method    0000 (0) 'Stored'\n-0963D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0963D8 CRC                   00000000 (0)\n-0963DC Compressed Size       00000000 (0)\n-0963E0 Uncompressed Size     00000000 (0)\n-0963E4 Filename Length       0037 (55)\n-0963E6 Extra Length          0009 (9)\n-0963E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x963E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09641F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-096421   Length              0005 (5)\n-096423   Flags               01 (1) 'Modification'\n-096424   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-096428 LOCAL HEADER #280     04034B50 (67324752)\n-09642C Extract Zip Spec      14 (20) '2.0'\n-09642D Extract OS            00 (0) 'MS-DOS'\n-09642E General Purpose Flag  0000 (0)\n-096430 Compression Method    0000 (0) 'Stored'\n-096432 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-096436 CRC                   00000000 (0)\n-09643A Compressed Size       00000000 (0)\n-09643E Uncompressed Size     00000000 (0)\n-096442 Filename Length       0068 (104)\n-096444 Extra Length          0009 (9)\n-096446 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x96446: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0964AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0964B0   Length              0005 (5)\n-0964B2   Flags               01 (1) 'Modification'\n-0964B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0964B7 LOCAL HEADER #281     04034B50 (67324752)\n-0964BB Extract Zip Spec      14 (20) '2.0'\n-0964BC Extract OS            00 (0) 'MS-DOS'\n-0964BD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0964BF Compression Method    0000 (0) 'Stored'\n-0964C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0964C5 CRC                   00000000 (0)\n-0964C9 Compressed Size       00000000 (0)\n-0964CD Uncompressed Size     00000000 (0)\n-0964D1 Filename Length       007E (126)\n-0964D3 Extra Length          0009 (9)\n-0964D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x964D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-096553 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-096555   Length              0005 (5)\n-096557   Flags               01 (1) 'Modification'\n-096558   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09655C PAYLOAD\n-\n-09897D DATA DESCRIPTOR       08074B50 (134695760)\n-098981 CRC                   29D620BA (701898938)\n-098985 Compressed Size       00002421 (9249)\n-098989 Uncompressed Size     00002421 (9249)\n-\n-09898D LOCAL HEADER #282     04034B50 (67324752)\n-098991 Extract Zip Spec      14 (20) '2.0'\n-098992 Extract OS            00 (0) 'MS-DOS'\n-098993 General Purpose Flag  0000 (0)\n-098995 Compression Method    0000 (0) 'Stored'\n-098997 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09899B CRC                   00000000 (0)\n-09899F Compressed Size       00000000 (0)\n-0989A3 Uncompressed Size     00000000 (0)\n-0989A7 Filename Length       003C (60)\n-0989A9 Extra Length          0009 (9)\n-0989AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x989AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0989E7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0989E9   Length              0005 (5)\n-0989EB   Flags               01 (1) 'Modification'\n-0989EC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0989F0 LOCAL HEADER #283     04034B50 (67324752)\n-0989F4 Extract Zip Spec      14 (20) '2.0'\n-0989F5 Extract OS            00 (0) 'MS-DOS'\n-0989F6 General Purpose Flag  0000 (0)\n-0989F8 Compression Method    0000 (0) 'Stored'\n-0989FA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0989FE CRC                   00000000 (0)\n-098A02 Compressed Size       00000000 (0)\n-098A06 Uncompressed Size     00000000 (0)\n-098A0A Filename Length       0043 (67)\n-098A0C Extra Length          0009 (9)\n-098A0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x98A0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-098A51 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-098A53   Length              0005 (5)\n-098A55   Flags               01 (1) 'Modification'\n-098A56   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-098A5A LOCAL HEADER #284     04034B50 (67324752)\n-098A5E Extract Zip Spec      14 (20) '2.0'\n-098A5F Extract OS            00 (0) 'MS-DOS'\n-098A60 General Purpose Flag  0000 (0)\n-098A62 Compression Method    0000 (0) 'Stored'\n-098A64 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-098A68 CRC                   00000000 (0)\n-098A6C Compressed Size       00000000 (0)\n-098A70 Uncompressed Size     00000000 (0)\n-098A74 Filename Length       0061 (97)\n-098A76 Extra Length          0009 (9)\n-098A78 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x98A78: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-098AD9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-098ADB   Length              0005 (5)\n-098ADD   Flags               01 (1) 'Modification'\n-098ADE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-098AE2 LOCAL HEADER #285     04034B50 (67324752)\n-098AE6 Extract Zip Spec      14 (20) '2.0'\n-098AE7 Extract OS            00 (0) 'MS-DOS'\n-098AE8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-098AEA Compression Method    0000 (0) 'Stored'\n-098AEC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-098AF0 CRC                   00000000 (0)\n-098AF4 Compressed Size       00000000 (0)\n-098AF8 Uncompressed Size     00000000 (0)\n-098AFC Filename Length       0077 (119)\n-098AFE Extra Length          0009 (9)\n-098B00 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x98B00: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-098B77 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-098B79   Length              0005 (5)\n-098B7B   Flags               01 (1) 'Modification'\n-098B7C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-098B80 PAYLOAD\n-\n-09C267 DATA DESCRIPTOR       08074B50 (134695760)\n-09C26B CRC                   9ED7BE90 (2664939152)\n-09C26F Compressed Size       000036E7 (14055)\n-09C273 Uncompressed Size     000036E7 (14055)\n-\n-09C277 LOCAL HEADER #286     04034B50 (67324752)\n-09C27B Extract Zip Spec      14 (20) '2.0'\n-09C27C Extract OS            00 (0) 'MS-DOS'\n-09C27D General Purpose Flag  0000 (0)\n-09C27F Compression Method    0000 (0) 'Stored'\n-09C281 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09C285 CRC                   00000000 (0)\n-09C289 Compressed Size       00000000 (0)\n-09C28D Uncompressed Size     00000000 (0)\n-09C291 Filename Length       0061 (97)\n-09C293 Extra Length          0009 (9)\n-09C295 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9C295: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09C2F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09C2F8   Length              0005 (5)\n-09C2FA   Flags               01 (1) 'Modification'\n-09C2FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09C2FF LOCAL HEADER #287     04034B50 (67324752)\n-09C303 Extract Zip Spec      14 (20) '2.0'\n-09C304 Extract OS            00 (0) 'MS-DOS'\n-09C305 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-09C307 Compression Method    0000 (0) 'Stored'\n-09C309 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09C30D CRC                   00000000 (0)\n-09C311 Compressed Size       00000000 (0)\n-09C315 Uncompressed Size     00000000 (0)\n-09C319 Filename Length       0077 (119)\n-09C31B Extra Length          0009 (9)\n-09C31D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9C31D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09C394 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09C396   Length              0005 (5)\n-09C398   Flags               01 (1) 'Modification'\n-09C399   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09C39D PAYLOAD\n-\n-0A0B2F DATA DESCRIPTOR       08074B50 (134695760)\n-0A0B33 CRC                   B51FDD91 (3038764433)\n-0A0B37 Compressed Size       00004792 (18322)\n-0A0B3B Uncompressed Size     00004792 (18322)\n-\n-0A0B3F LOCAL HEADER #288     04034B50 (67324752)\n-0A0B43 Extract Zip Spec      14 (20) '2.0'\n-0A0B44 Extract OS            00 (0) 'MS-DOS'\n-0A0B45 General Purpose Flag  0000 (0)\n-0A0B47 Compression Method    0000 (0) 'Stored'\n-0A0B49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A0B4D CRC                   00000000 (0)\n-0A0B51 Compressed Size       00000000 (0)\n-0A0B55 Uncompressed Size     00000000 (0)\n-0A0B59 Filename Length       0063 (99)\n-0A0B5B Extra Length          0009 (9)\n-0A0B5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA0B5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A0BC0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A0BC2   Length              0005 (5)\n-0A0BC4   Flags               01 (1) 'Modification'\n-0A0BC5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A0BC9 LOCAL HEADER #289     04034B50 (67324752)\n-0A0BCD Extract Zip Spec      14 (20) '2.0'\n-0A0BCE Extract OS            00 (0) 'MS-DOS'\n-0A0BCF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A0BD1 Compression Method    0000 (0) 'Stored'\n-0A0BD3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A0BD7 CRC                   00000000 (0)\n-0A0BDB Compressed Size       00000000 (0)\n-0A0BDF Uncompressed Size     00000000 (0)\n-0A0BE3 Filename Length       0079 (121)\n-0A0BE5 Extra Length          0009 (9)\n-0A0BE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA0BE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A0C60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A0C62   Length              0005 (5)\n-0A0C64   Flags               01 (1) 'Modification'\n-0A0C65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A0C69 PAYLOAD\n-\n-0A6A45 DATA DESCRIPTOR       08074B50 (134695760)\n-0A6A49 CRC                   27CFA48B (667919499)\n-0A6A4D Compressed Size       00005DDC (24028)\n-0A6A51 Uncompressed Size     00005DDC (24028)\n-\n-0A6A55 LOCAL HEADER #290     04034B50 (67324752)\n-0A6A59 Extract Zip Spec      14 (20) '2.0'\n-0A6A5A Extract OS            00 (0) 'MS-DOS'\n-0A6A5B General Purpose Flag  0000 (0)\n-0A6A5D Compression Method    0000 (0) 'Stored'\n-0A6A5F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A6A63 CRC                   00000000 (0)\n-0A6A67 Compressed Size       00000000 (0)\n-0A6A6B Uncompressed Size     00000000 (0)\n-0A6A6F Filename Length       0067 (103)\n-0A6A71 Extra Length          0009 (9)\n-0A6A73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA6A73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A6ADA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A6ADC   Length              0005 (5)\n-0A6ADE   Flags               01 (1) 'Modification'\n-0A6ADF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A6AE3 LOCAL HEADER #291     04034B50 (67324752)\n-0A6AE7 Extract Zip Spec      14 (20) '2.0'\n-0A6AE8 Extract OS            00 (0) 'MS-DOS'\n-0A6AE9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A6AEB Compression Method    0000 (0) 'Stored'\n-0A6AED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A6AF1 CRC                   00000000 (0)\n-0A6AF5 Compressed Size       00000000 (0)\n-0A6AF9 Uncompressed Size     00000000 (0)\n-0A6AFD Filename Length       007D (125)\n-0A6AFF Extra Length          0009 (9)\n-0A6B01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA6B01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A6B7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A6B80   Length              0005 (5)\n-0A6B82   Flags               01 (1) 'Modification'\n-0A6B83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A6B87 PAYLOAD\n-\n-0AA6C1 DATA DESCRIPTOR       08074B50 (134695760)\n-0AA6C5 CRC                   620AB78F (1644869519)\n-0AA6C9 Compressed Size       00003B3A (15162)\n-0AA6CD Uncompressed Size     00003B3A (15162)\n-\n-0AA6D1 LOCAL HEADER #292     04034B50 (67324752)\n-0AA6D5 Extract Zip Spec      14 (20) '2.0'\n-0AA6D6 Extract OS            00 (0) 'MS-DOS'\n-0AA6D7 General Purpose Flag  0000 (0)\n-0AA6D9 Compression Method    0000 (0) 'Stored'\n-0AA6DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AA6DF CRC                   00000000 (0)\n-0AA6E3 Compressed Size       00000000 (0)\n-0AA6E7 Uncompressed Size     00000000 (0)\n-0AA6EB Filename Length       0067 (103)\n-0AA6ED Extra Length          0009 (9)\n-0AA6EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAA6EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AA756 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AA758   Length              0005 (5)\n-0AA75A   Flags               01 (1) 'Modification'\n-0AA75B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0AA75F LOCAL HEADER #293     04034B50 (67324752)\n-0AA763 Extract Zip Spec      14 (20) '2.0'\n-0AA764 Extract OS            00 (0) 'MS-DOS'\n-0AA765 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0AA767 Compression Method    0000 (0) 'Stored'\n-0AA769 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AA76D CRC                   00000000 (0)\n-0AA771 Compressed Size       00000000 (0)\n-0AA775 Uncompressed Size     00000000 (0)\n-0AA779 Filename Length       007D (125)\n-0AA77B Extra Length          0009 (9)\n-0AA77D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAA77D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AA7FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AA7FC   Length              0005 (5)\n-0AA7FE   Flags               01 (1) 'Modification'\n-0AA7FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0AA803 PAYLOAD\n-\n-0AF06C DATA DESCRIPTOR       08074B50 (134695760)\n-0AF070 CRC                   937A07E6 (2474248166)\n-0AF074 Compressed Size       00004869 (18537)\n-0AF078 Uncompressed Size     00004869 (18537)\n-\n-0AF07C LOCAL HEADER #294     04034B50 (67324752)\n-0AF080 Extract Zip Spec      14 (20) '2.0'\n-0AF081 Extract OS            00 (0) 'MS-DOS'\n-0AF082 General Purpose Flag  0000 (0)\n-0AF084 Compression Method    0000 (0) 'Stored'\n-0AF086 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AF08A CRC                   00000000 (0)\n-0AF08E Compressed Size       00000000 (0)\n-0AF092 Uncompressed Size     00000000 (0)\n-0AF096 Filename Length       006B (107)\n-0AF098 Extra Length          0009 (9)\n-0AF09A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAF09A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AF105 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AF107   Length              0005 (5)\n-0AF109   Flags               01 (1) 'Modification'\n-0AF10A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0AF10E LOCAL HEADER #295     04034B50 (67324752)\n-0AF112 Extract Zip Spec      14 (20) '2.0'\n-0AF113 Extract OS            00 (0) 'MS-DOS'\n-0AF114 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0AF116 Compression Method    0000 (0) 'Stored'\n-0AF118 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AF11C CRC                   00000000 (0)\n-0AF120 Compressed Size       00000000 (0)\n-0AF124 Uncompressed Size     00000000 (0)\n-0AF128 Filename Length       0081 (129)\n-0AF12A Extra Length          0009 (9)\n-0AF12C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAF12C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AF1AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AF1AF   Length              0005 (5)\n-0AF1B1   Flags               01 (1) 'Modification'\n-0AF1B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0AF1B6 PAYLOAD\n-\n-0AFC95 DATA DESCRIPTOR       08074B50 (134695760)\n-0AFC99 CRC                   53DFF1D7 (1407185367)\n-0AFC9D Compressed Size       00000ADF (2783)\n-0AFCA1 Uncompressed Size     00000ADF (2783)\n-\n-0AFCA5 LOCAL HEADER #296     04034B50 (67324752)\n-0AFCA9 Extract Zip Spec      14 (20) '2.0'\n-0AFCAA Extract OS            00 (0) 'MS-DOS'\n-0AFCAB General Purpose Flag  0000 (0)\n-0AFCAD Compression Method    0000 (0) 'Stored'\n-0AFCAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AFCB3 CRC                   00000000 (0)\n-0AFCB7 Compressed Size       00000000 (0)\n-0AFCBB Uncompressed Size     00000000 (0)\n-0AFCBF Filename Length       0067 (103)\n-0AFCC1 Extra Length          0009 (9)\n-0AFCC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAFCC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AFD2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AFD2C   Length              0005 (5)\n-0AFD2E   Flags               01 (1) 'Modification'\n-0AFD2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0AFD33 LOCAL HEADER #297     04034B50 (67324752)\n-0AFD37 Extract Zip Spec      14 (20) '2.0'\n-0AFD38 Extract OS            00 (0) 'MS-DOS'\n-0AFD39 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0AFD3B Compression Method    0000 (0) 'Stored'\n-0AFD3D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AFD41 CRC                   00000000 (0)\n-0AFD45 Compressed Size       00000000 (0)\n-0AFD49 Uncompressed Size     00000000 (0)\n-0AFD4D Filename Length       007D (125)\n-0AFD4F Extra Length          0009 (9)\n-0AFD51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAFD51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AFDCE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AFDD0   Length              0005 (5)\n-0AFDD2   Flags               01 (1) 'Modification'\n-0AFDD3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0AFDD7 PAYLOAD\n-\n-0B0710 DATA DESCRIPTOR       08074B50 (134695760)\n-0B0714 CRC                   6D3A5445 (1832539205)\n-0B0718 Compressed Size       00000939 (2361)\n-0B071C Uncompressed Size     00000939 (2361)\n-\n-0B0720 LOCAL HEADER #298     04034B50 (67324752)\n-0B0724 Extract Zip Spec      14 (20) '2.0'\n-0B0725 Extract OS            00 (0) 'MS-DOS'\n-0B0726 General Purpose Flag  0000 (0)\n-0B0728 Compression Method    0000 (0) 'Stored'\n-0B072A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B072E CRC                   00000000 (0)\n-0B0732 Compressed Size       00000000 (0)\n-0B0736 Uncompressed Size     00000000 (0)\n-0B073A Filename Length       0076 (118)\n-0B073C Extra Length          0009 (9)\n-0B073E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB073E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B07B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B07B6   Length              0005 (5)\n-0B07B8   Flags               01 (1) 'Modification'\n-0B07B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B07BD LOCAL HEADER #299     04034B50 (67324752)\n-0B07C1 Extract Zip Spec      14 (20) '2.0'\n-0B07C2 Extract OS            00 (0) 'MS-DOS'\n-0B07C3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B07C5 Compression Method    0000 (0) 'Stored'\n-0B07C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B07CB CRC                   00000000 (0)\n-0B07CF Compressed Size       00000000 (0)\n-0B07D3 Uncompressed Size     00000000 (0)\n-0B07D7 Filename Length       008C (140)\n-0B07D9 Extra Length          0009 (9)\n-0B07DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+07DF9C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+07DF9E   Length              0005 (5)\n+07DFA0   Flags               01 (1) 'Modification'\n+07DFA1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+07DFA5 PAYLOAD\n+\n+087BE0 DATA DESCRIPTOR       08074B50 (134695760)\n+087BE4 CRC                   6668C19E (1718141342)\n+087BE8 Compressed Size       00009C3B (39995)\n+087BEC Uncompressed Size     00009C3B (39995)\n+\n+087BF0 LOCAL HEADER #234     04034B50 (67324752)\n+087BF4 Extract Zip Spec      14 (20) '2.0'\n+087BF5 Extract OS            00 (0) 'MS-DOS'\n+087BF6 General Purpose Flag  0000 (0)\n+087BF8 Compression Method    0000 (0) 'Stored'\n+087BFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+087BFE CRC                   00000000 (0)\n+087C02 Compressed Size       00000000 (0)\n+087C06 Uncompressed Size     00000000 (0)\n+087C0A Filename Length       0068 (104)\n+087C0C Extra Length          0009 (9)\n+087C0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x87C0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+087C76 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+087C78   Length              0005 (5)\n+087C7A   Flags               01 (1) 'Modification'\n+087C7B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+087C7F LOCAL HEADER #235     04034B50 (67324752)\n+087C83 Extract Zip Spec      14 (20) '2.0'\n+087C84 Extract OS            00 (0) 'MS-DOS'\n+087C85 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+087C87 Compression Method    0000 (0) 'Stored'\n+087C89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+087C8D CRC                   00000000 (0)\n+087C91 Compressed Size       00000000 (0)\n+087C95 Uncompressed Size     00000000 (0)\n+087C99 Filename Length       007E (126)\n+087C9B Extra Length          0009 (9)\n+087C9D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x87C9D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+087D1B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+087D1D   Length              0005 (5)\n+087D1F   Flags               01 (1) 'Modification'\n+087D20   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+087D24 PAYLOAD\n+\n+08A96E DATA DESCRIPTOR       08074B50 (134695760)\n+08A972 CRC                   23E20FDA (602017754)\n+08A976 Compressed Size       00002C4A (11338)\n+08A97A Uncompressed Size     00002C4A (11338)\n+\n+08A97E LOCAL HEADER #236     04034B50 (67324752)\n+08A982 Extract Zip Spec      14 (20) '2.0'\n+08A983 Extract OS            00 (0) 'MS-DOS'\n+08A984 General Purpose Flag  0000 (0)\n+08A986 Compression Method    0000 (0) 'Stored'\n+08A988 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08A98C CRC                   00000000 (0)\n+08A990 Compressed Size       00000000 (0)\n+08A994 Uncompressed Size     00000000 (0)\n+08A998 Filename Length       0023 (35)\n+08A99A Extra Length          0009 (9)\n+08A99C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8A99C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08A9BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08A9C1   Length              0005 (5)\n+08A9C3   Flags               01 (1) 'Modification'\n+08A9C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08A9C8 LOCAL HEADER #237     04034B50 (67324752)\n+08A9CC Extract Zip Spec      14 (20) '2.0'\n+08A9CD Extract OS            00 (0) 'MS-DOS'\n+08A9CE General Purpose Flag  0000 (0)\n+08A9D0 Compression Method    0000 (0) 'Stored'\n+08A9D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08A9D6 CRC                   00000000 (0)\n+08A9DA Compressed Size       00000000 (0)\n+08A9DE Uncompressed Size     00000000 (0)\n+08A9E2 Filename Length       002A (42)\n+08A9E4 Extra Length          0009 (9)\n+08A9E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8A9E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08AA10 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08AA12   Length              0005 (5)\n+08AA14   Flags               01 (1) 'Modification'\n+08AA15   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08AA19 LOCAL HEADER #238     04034B50 (67324752)\n+08AA1D Extract Zip Spec      14 (20) '2.0'\n+08AA1E Extract OS            00 (0) 'MS-DOS'\n+08AA1F General Purpose Flag  0000 (0)\n+08AA21 Compression Method    0000 (0) 'Stored'\n+08AA23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08AA27 CRC                   00000000 (0)\n+08AA2B Compressed Size       00000000 (0)\n+08AA2F Uncompressed Size     00000000 (0)\n+08AA33 Filename Length       0052 (82)\n+08AA35 Extra Length          0009 (9)\n+08AA37 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8AA37: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08AA89 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08AA8B   Length              0005 (5)\n+08AA8D   Flags               01 (1) 'Modification'\n+08AA8E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08AA92 LOCAL HEADER #239     04034B50 (67324752)\n+08AA96 Extract Zip Spec      14 (20) '2.0'\n+08AA97 Extract OS            00 (0) 'MS-DOS'\n+08AA98 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08AA9A Compression Method    0000 (0) 'Stored'\n+08AA9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08AAA0 CRC                   00000000 (0)\n+08AAA4 Compressed Size       00000000 (0)\n+08AAA8 Uncompressed Size     00000000 (0)\n+08AAAC Filename Length       0068 (104)\n+08AAAE Extra Length          0009 (9)\n+08AAB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8AAB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08AB18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08AB1A   Length              0005 (5)\n+08AB1C   Flags               01 (1) 'Modification'\n+08AB1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08AB21 PAYLOAD\n+\n+08C5DE DATA DESCRIPTOR       08074B50 (134695760)\n+08C5E2 CRC                   90D14EC3 (2429636291)\n+08C5E6 Compressed Size       00001ABD (6845)\n+08C5EA Uncompressed Size     00001ABD (6845)\n+\n+08C5EE LOCAL HEADER #240     04034B50 (67324752)\n+08C5F2 Extract Zip Spec      14 (20) '2.0'\n+08C5F3 Extract OS            00 (0) 'MS-DOS'\n+08C5F4 General Purpose Flag  0000 (0)\n+08C5F6 Compression Method    0000 (0) 'Stored'\n+08C5F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08C5FC CRC                   00000000 (0)\n+08C600 Compressed Size       00000000 (0)\n+08C604 Uncompressed Size     00000000 (0)\n+08C608 Filename Length       002E (46)\n+08C60A Extra Length          0009 (9)\n+08C60C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8C60C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08C63A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08C63C   Length              0005 (5)\n+08C63E   Flags               01 (1) 'Modification'\n+08C63F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08C643 LOCAL HEADER #241     04034B50 (67324752)\n+08C647 Extract Zip Spec      14 (20) '2.0'\n+08C648 Extract OS            00 (0) 'MS-DOS'\n+08C649 General Purpose Flag  0000 (0)\n+08C64B Compression Method    0000 (0) 'Stored'\n+08C64D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08C651 CRC                   00000000 (0)\n+08C655 Compressed Size       00000000 (0)\n+08C659 Uncompressed Size     00000000 (0)\n+08C65D Filename Length       0035 (53)\n+08C65F Extra Length          0009 (9)\n+08C661 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8C661: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08C696 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08C698   Length              0005 (5)\n+08C69A   Flags               01 (1) 'Modification'\n+08C69B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08C69F LOCAL HEADER #242     04034B50 (67324752)\n+08C6A3 Extract Zip Spec      14 (20) '2.0'\n+08C6A4 Extract OS            00 (0) 'MS-DOS'\n+08C6A5 General Purpose Flag  0000 (0)\n+08C6A7 Compression Method    0000 (0) 'Stored'\n+08C6A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08C6AD CRC                   00000000 (0)\n+08C6B1 Compressed Size       00000000 (0)\n+08C6B5 Uncompressed Size     00000000 (0)\n+08C6B9 Filename Length       005E (94)\n+08C6BB Extra Length          0009 (9)\n+08C6BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8C6BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08C71B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08C71D   Length              0005 (5)\n+08C71F   Flags               01 (1) 'Modification'\n+08C720   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08C724 LOCAL HEADER #243     04034B50 (67324752)\n+08C728 Extract Zip Spec      14 (20) '2.0'\n+08C729 Extract OS            00 (0) 'MS-DOS'\n+08C72A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08C72C Compression Method    0000 (0) 'Stored'\n+08C72E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08C732 CRC                   00000000 (0)\n+08C736 Compressed Size       00000000 (0)\n+08C73A Uncompressed Size     00000000 (0)\n+08C73E Filename Length       0074 (116)\n+08C740 Extra Length          0009 (9)\n+08C742 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8C742: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08C7B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08C7B8   Length              0005 (5)\n+08C7BA   Flags               01 (1) 'Modification'\n+08C7BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08C7BF PAYLOAD\n+\n+08D697 DATA DESCRIPTOR       08074B50 (134695760)\n+08D69B CRC                   F19E6303 (4053689091)\n+08D69F Compressed Size       00000ED8 (3800)\n+08D6A3 Uncompressed Size     00000ED8 (3800)\n+\n+08D6A7 LOCAL HEADER #244     04034B50 (67324752)\n+08D6AB Extract Zip Spec      14 (20) '2.0'\n+08D6AC Extract OS            00 (0) 'MS-DOS'\n+08D6AD General Purpose Flag  0000 (0)\n+08D6AF Compression Method    0000 (0) 'Stored'\n+08D6B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08D6B5 CRC                   00000000 (0)\n+08D6B9 Compressed Size       00000000 (0)\n+08D6BD Uncompressed Size     00000000 (0)\n+08D6C1 Filename Length       0064 (100)\n+08D6C3 Extra Length          0009 (9)\n+08D6C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8D6C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08D729 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08D72B   Length              0005 (5)\n+08D72D   Flags               01 (1) 'Modification'\n+08D72E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08D732 LOCAL HEADER #245     04034B50 (67324752)\n+08D736 Extract Zip Spec      14 (20) '2.0'\n+08D737 Extract OS            00 (0) 'MS-DOS'\n+08D738 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08D73A Compression Method    0000 (0) 'Stored'\n+08D73C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08D740 CRC                   00000000 (0)\n+08D744 Compressed Size       00000000 (0)\n+08D748 Uncompressed Size     00000000 (0)\n+08D74C Filename Length       007A (122)\n+08D74E Extra Length          0009 (9)\n+08D750 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8D750: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08D7CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08D7CC   Length              0005 (5)\n+08D7CE   Flags               01 (1) 'Modification'\n+08D7CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08D7D3 PAYLOAD\n+\n+08EEAA DATA DESCRIPTOR       08074B50 (134695760)\n+08EEAE CRC                   51B4F745 (1370814277)\n+08EEB2 Compressed Size       000016D7 (5847)\n+08EEB6 Uncompressed Size     000016D7 (5847)\n+\n+08EEBA LOCAL HEADER #246     04034B50 (67324752)\n+08EEBE Extract Zip Spec      14 (20) '2.0'\n+08EEBF Extract OS            00 (0) 'MS-DOS'\n+08EEC0 General Purpose Flag  0000 (0)\n+08EEC2 Compression Method    0000 (0) 'Stored'\n+08EEC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08EEC8 CRC                   00000000 (0)\n+08EECC Compressed Size       00000000 (0)\n+08EED0 Uncompressed Size     00000000 (0)\n+08EED4 Filename Length       0026 (38)\n+08EED6 Extra Length          0009 (9)\n+08EED8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8EED8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08EEFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08EF00   Length              0005 (5)\n+08EF02   Flags               01 (1) 'Modification'\n+08EF03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08EF07 LOCAL HEADER #247     04034B50 (67324752)\n+08EF0B Extract Zip Spec      14 (20) '2.0'\n+08EF0C Extract OS            00 (0) 'MS-DOS'\n+08EF0D General Purpose Flag  0000 (0)\n+08EF0F Compression Method    0000 (0) 'Stored'\n+08EF11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08EF15 CRC                   00000000 (0)\n+08EF19 Compressed Size       00000000 (0)\n+08EF1D Uncompressed Size     00000000 (0)\n+08EF21 Filename Length       002D (45)\n+08EF23 Extra Length          0009 (9)\n+08EF25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8EF25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08EF52 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08EF54   Length              0005 (5)\n+08EF56   Flags               01 (1) 'Modification'\n+08EF57   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08EF5B LOCAL HEADER #248     04034B50 (67324752)\n+08EF5F Extract Zip Spec      14 (20) '2.0'\n+08EF60 Extract OS            00 (0) 'MS-DOS'\n+08EF61 General Purpose Flag  0000 (0)\n+08EF63 Compression Method    0000 (0) 'Stored'\n+08EF65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08EF69 CRC                   00000000 (0)\n+08EF6D Compressed Size       00000000 (0)\n+08EF71 Uncompressed Size     00000000 (0)\n+08EF75 Filename Length       005C (92)\n+08EF77 Extra Length          0009 (9)\n+08EF79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8EF79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08EFD5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08EFD7   Length              0005 (5)\n+08EFD9   Flags               01 (1) 'Modification'\n+08EFDA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08EFDE LOCAL HEADER #249     04034B50 (67324752)\n+08EFE2 Extract Zip Spec      14 (20) '2.0'\n+08EFE3 Extract OS            00 (0) 'MS-DOS'\n+08EFE4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08EFE6 Compression Method    0000 (0) 'Stored'\n+08EFE8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08EFEC CRC                   00000000 (0)\n+08EFF0 Compressed Size       00000000 (0)\n+08EFF4 Uncompressed Size     00000000 (0)\n+08EFF8 Filename Length       0072 (114)\n+08EFFA Extra Length          0009 (9)\n+08EFFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8EFFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08F06E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08F070   Length              0005 (5)\n+08F072   Flags               01 (1) 'Modification'\n+08F073   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08F077 PAYLOAD\n+\n+08F73D DATA DESCRIPTOR       08074B50 (134695760)\n+08F741 CRC                   357DA477 (897426551)\n+08F745 Compressed Size       000006C6 (1734)\n+08F749 Uncompressed Size     000006C6 (1734)\n+\n+08F74D LOCAL HEADER #250     04034B50 (67324752)\n+08F751 Extract Zip Spec      14 (20) '2.0'\n+08F752 Extract OS            00 (0) 'MS-DOS'\n+08F753 General Purpose Flag  0000 (0)\n+08F755 Compression Method    0000 (0) 'Stored'\n+08F757 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08F75B CRC                   00000000 (0)\n+08F75F Compressed Size       00000000 (0)\n+08F763 Uncompressed Size     00000000 (0)\n+08F767 Filename Length       0059 (89)\n+08F769 Extra Length          0009 (9)\n+08F76B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8F76B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08F7C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08F7C6   Length              0005 (5)\n+08F7C8   Flags               01 (1) 'Modification'\n+08F7C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08F7CD LOCAL HEADER #251     04034B50 (67324752)\n+08F7D1 Extract Zip Spec      14 (20) '2.0'\n+08F7D2 Extract OS            00 (0) 'MS-DOS'\n+08F7D3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08F7D5 Compression Method    0000 (0) 'Stored'\n+08F7D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08F7DB CRC                   00000000 (0)\n+08F7DF Compressed Size       00000000 (0)\n+08F7E3 Uncompressed Size     00000000 (0)\n+08F7E7 Filename Length       006F (111)\n+08F7E9 Extra Length          0009 (9)\n+08F7EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8F7EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08F85A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08F85C   Length              0005 (5)\n+08F85E   Flags               01 (1) 'Modification'\n+08F85F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08F863 PAYLOAD\n+\n+09021F DATA DESCRIPTOR       08074B50 (134695760)\n+090223 CRC                   F9CAC97B (4190816635)\n+090227 Compressed Size       000009BC (2492)\n+09022B Uncompressed Size     000009BC (2492)\n+\n+09022F LOCAL HEADER #252     04034B50 (67324752)\n+090233 Extract Zip Spec      14 (20) '2.0'\n+090234 Extract OS            00 (0) 'MS-DOS'\n+090235 General Purpose Flag  0000 (0)\n+090237 Compression Method    0000 (0) 'Stored'\n+090239 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09023D CRC                   00000000 (0)\n+090241 Compressed Size       00000000 (0)\n+090245 Uncompressed Size     00000000 (0)\n+090249 Filename Length       005F (95)\n+09024B Extra Length          0009 (9)\n+09024D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9024D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0902AC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0902AE   Length              0005 (5)\n+0902B0   Flags               01 (1) 'Modification'\n+0902B1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0902B5 LOCAL HEADER #253     04034B50 (67324752)\n+0902B9 Extract Zip Spec      14 (20) '2.0'\n+0902BA Extract OS            00 (0) 'MS-DOS'\n+0902BB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0902BD Compression Method    0000 (0) 'Stored'\n+0902BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0902C3 CRC                   00000000 (0)\n+0902C7 Compressed Size       00000000 (0)\n+0902CB Uncompressed Size     00000000 (0)\n+0902CF Filename Length       0075 (117)\n+0902D1 Extra Length          0009 (9)\n+0902D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x902D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+090348 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09034A   Length              0005 (5)\n+09034C   Flags               01 (1) 'Modification'\n+09034D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+090351 PAYLOAD\n+\n+090D58 DATA DESCRIPTOR       08074B50 (134695760)\n+090D5C CRC                   9DEB8C8B (2649459851)\n+090D60 Compressed Size       00000A07 (2567)\n+090D64 Uncompressed Size     00000A07 (2567)\n+\n+090D68 LOCAL HEADER #254     04034B50 (67324752)\n+090D6C Extract Zip Spec      14 (20) '2.0'\n+090D6D Extract OS            00 (0) 'MS-DOS'\n+090D6E General Purpose Flag  0000 (0)\n+090D70 Compression Method    0000 (0) 'Stored'\n+090D72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+090D76 CRC                   00000000 (0)\n+090D7A Compressed Size       00000000 (0)\n+090D7E Uncompressed Size     00000000 (0)\n+090D82 Filename Length       0059 (89)\n+090D84 Extra Length          0009 (9)\n+090D86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x90D86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+090DDF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+090DE1   Length              0005 (5)\n+090DE3   Flags               01 (1) 'Modification'\n+090DE4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+090DE8 LOCAL HEADER #255     04034B50 (67324752)\n+090DEC Extract Zip Spec      14 (20) '2.0'\n+090DED Extract OS            00 (0) 'MS-DOS'\n+090DEE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+090DF0 Compression Method    0000 (0) 'Stored'\n+090DF2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+090DF6 CRC                   00000000 (0)\n+090DFA Compressed Size       00000000 (0)\n+090DFE Uncompressed Size     00000000 (0)\n+090E02 Filename Length       006F (111)\n+090E04 Extra Length          0009 (9)\n+090E06 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x90E06: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+090E75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+090E77   Length              0005 (5)\n+090E79   Flags               01 (1) 'Modification'\n+090E7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+090E7E PAYLOAD\n+\n+091C5C DATA DESCRIPTOR       08074B50 (134695760)\n+091C60 CRC                   85B17459 (2242999385)\n+091C64 Compressed Size       00000DDE (3550)\n+091C68 Uncompressed Size     00000DDE (3550)\n+\n+091C6C LOCAL HEADER #256     04034B50 (67324752)\n+091C70 Extract Zip Spec      14 (20) '2.0'\n+091C71 Extract OS            00 (0) 'MS-DOS'\n+091C72 General Purpose Flag  0000 (0)\n+091C74 Compression Method    0000 (0) 'Stored'\n+091C76 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+091C7A CRC                   00000000 (0)\n+091C7E Compressed Size       00000000 (0)\n+091C82 Uncompressed Size     00000000 (0)\n+091C86 Filename Length       0064 (100)\n+091C88 Extra Length          0009 (9)\n+091C8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x91C8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+091CEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+091CF0   Length              0005 (5)\n+091CF2   Flags               01 (1) 'Modification'\n+091CF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+091CF7 LOCAL HEADER #257     04034B50 (67324752)\n+091CFB Extract Zip Spec      14 (20) '2.0'\n+091CFC Extract OS            00 (0) 'MS-DOS'\n+091CFD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+091CFF Compression Method    0000 (0) 'Stored'\n+091D01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+091D05 CRC                   00000000 (0)\n+091D09 Compressed Size       00000000 (0)\n+091D0D Uncompressed Size     00000000 (0)\n+091D11 Filename Length       007A (122)\n+091D13 Extra Length          0009 (9)\n+091D15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x91D15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+091D8F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+091D91   Length              0005 (5)\n+091D93   Flags               01 (1) 'Modification'\n+091D94   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+091D98 PAYLOAD\n+\n+092367 DATA DESCRIPTOR       08074B50 (134695760)\n+09236B CRC                   9C229073 (2619510899)\n+09236F Compressed Size       000005CF (1487)\n+092373 Uncompressed Size     000005CF (1487)\n+\n+092377 LOCAL HEADER #258     04034B50 (67324752)\n+09237B Extract Zip Spec      14 (20) '2.0'\n+09237C Extract OS            00 (0) 'MS-DOS'\n+09237D General Purpose Flag  0000 (0)\n+09237F Compression Method    0000 (0) 'Stored'\n+092381 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+092385 CRC                   00000000 (0)\n+092389 Compressed Size       00000000 (0)\n+09238D Uncompressed Size     00000000 (0)\n+092391 Filename Length       0064 (100)\n+092393 Extra Length          0009 (9)\n+092395 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x92395: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0923F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0923FB   Length              0005 (5)\n+0923FD   Flags               01 (1) 'Modification'\n+0923FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+092402 LOCAL HEADER #259     04034B50 (67324752)\n+092406 Extract Zip Spec      14 (20) '2.0'\n+092407 Extract OS            00 (0) 'MS-DOS'\n+092408 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+09240A Compression Method    0000 (0) 'Stored'\n+09240C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+092410 CRC                   00000000 (0)\n+092414 Compressed Size       00000000 (0)\n+092418 Uncompressed Size     00000000 (0)\n+09241C Filename Length       007A (122)\n+09241E Extra Length          0009 (9)\n+092420 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x92420: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09249A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09249C   Length              0005 (5)\n+09249E   Flags               01 (1) 'Modification'\n+09249F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0924A3 PAYLOAD\n+\n+092A65 DATA DESCRIPTOR       08074B50 (134695760)\n+092A69 CRC                   A57691CD (2776011213)\n+092A6D Compressed Size       000005C2 (1474)\n+092A71 Uncompressed Size     000005C2 (1474)\n+\n+092A75 LOCAL HEADER #260     04034B50 (67324752)\n+092A79 Extract Zip Spec      14 (20) '2.0'\n+092A7A Extract OS            00 (0) 'MS-DOS'\n+092A7B General Purpose Flag  0000 (0)\n+092A7D Compression Method    0000 (0) 'Stored'\n+092A7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+092A83 CRC                   00000000 (0)\n+092A87 Compressed Size       00000000 (0)\n+092A8B Uncompressed Size     00000000 (0)\n+092A8F Filename Length       0063 (99)\n+092A91 Extra Length          0009 (9)\n+092A93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x92A93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+092AF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+092AF8   Length              0005 (5)\n+092AFA   Flags               01 (1) 'Modification'\n+092AFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+092AFF LOCAL HEADER #261     04034B50 (67324752)\n+092B03 Extract Zip Spec      14 (20) '2.0'\n+092B04 Extract OS            00 (0) 'MS-DOS'\n+092B05 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+092B07 Compression Method    0000 (0) 'Stored'\n+092B09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+092B0D CRC                   00000000 (0)\n+092B11 Compressed Size       00000000 (0)\n+092B15 Uncompressed Size     00000000 (0)\n+092B19 Filename Length       0079 (121)\n+092B1B Extra Length          0009 (9)\n+092B1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x92B1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+092B96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+092B98   Length              0005 (5)\n+092B9A   Flags               01 (1) 'Modification'\n+092B9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+092B9F PAYLOAD\n+\n+0932D9 DATA DESCRIPTOR       08074B50 (134695760)\n+0932DD CRC                   6CD31445 (1825772613)\n+0932E1 Compressed Size       0000073A (1850)\n+0932E5 Uncompressed Size     0000073A (1850)\n+\n+0932E9 LOCAL HEADER #262     04034B50 (67324752)\n+0932ED Extract Zip Spec      14 (20) '2.0'\n+0932EE Extract OS            00 (0) 'MS-DOS'\n+0932EF General Purpose Flag  0000 (0)\n+0932F1 Compression Method    0000 (0) 'Stored'\n+0932F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0932F7 CRC                   00000000 (0)\n+0932FB Compressed Size       00000000 (0)\n+0932FF Uncompressed Size     00000000 (0)\n+093303 Filename Length       0061 (97)\n+093305 Extra Length          0009 (9)\n+093307 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x93307: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+093368 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09336A   Length              0005 (5)\n+09336C   Flags               01 (1) 'Modification'\n+09336D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+093371 LOCAL HEADER #263     04034B50 (67324752)\n+093375 Extract Zip Spec      14 (20) '2.0'\n+093376 Extract OS            00 (0) 'MS-DOS'\n+093377 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+093379 Compression Method    0000 (0) 'Stored'\n+09337B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09337F CRC                   00000000 (0)\n+093383 Compressed Size       00000000 (0)\n+093387 Uncompressed Size     00000000 (0)\n+09338B Filename Length       0077 (119)\n+09338D Extra Length          0009 (9)\n+09338F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9338F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+093406 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+093408   Length              0005 (5)\n+09340A   Flags               01 (1) 'Modification'\n+09340B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09340F PAYLOAD\n+\n+093EA1 DATA DESCRIPTOR       08074B50 (134695760)\n+093EA5 CRC                   C97DF8D6 (3380476118)\n+093EA9 Compressed Size       00000A92 (2706)\n+093EAD Uncompressed Size     00000A92 (2706)\n+\n+093EB1 LOCAL HEADER #264     04034B50 (67324752)\n+093EB5 Extract Zip Spec      14 (20) '2.0'\n+093EB6 Extract OS            00 (0) 'MS-DOS'\n+093EB7 General Purpose Flag  0000 (0)\n+093EB9 Compression Method    0000 (0) 'Stored'\n+093EBB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+093EBF CRC                   00000000 (0)\n+093EC3 Compressed Size       00000000 (0)\n+093EC7 Uncompressed Size     00000000 (0)\n+093ECB Filename Length       0023 (35)\n+093ECD Extra Length          0009 (9)\n+093ECF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x93ECF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+093EF2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+093EF4   Length              0005 (5)\n+093EF6   Flags               01 (1) 'Modification'\n+093EF7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+093EFB LOCAL HEADER #265     04034B50 (67324752)\n+093EFF Extract Zip Spec      14 (20) '2.0'\n+093F00 Extract OS            00 (0) 'MS-DOS'\n+093F01 General Purpose Flag  0000 (0)\n+093F03 Compression Method    0000 (0) 'Stored'\n+093F05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+093F09 CRC                   00000000 (0)\n+093F0D Compressed Size       00000000 (0)\n+093F11 Uncompressed Size     00000000 (0)\n+093F15 Filename Length       002A (42)\n+093F17 Extra Length          0009 (9)\n+093F19 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x93F19: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+093F43 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+093F45   Length              0005 (5)\n+093F47   Flags               01 (1) 'Modification'\n+093F48   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+093F4C LOCAL HEADER #266     04034B50 (67324752)\n+093F50 Extract Zip Spec      14 (20) '2.0'\n+093F51 Extract OS            00 (0) 'MS-DOS'\n+093F52 General Purpose Flag  0000 (0)\n+093F54 Compression Method    0000 (0) 'Stored'\n+093F56 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+093F5A CRC                   00000000 (0)\n+093F5E Compressed Size       00000000 (0)\n+093F62 Uncompressed Size     00000000 (0)\n+093F66 Filename Length       0056 (86)\n+093F68 Extra Length          0009 (9)\n+093F6A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x93F6A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+093FC0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+093FC2   Length              0005 (5)\n+093FC4   Flags               01 (1) 'Modification'\n+093FC5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+093FC9 LOCAL HEADER #267     04034B50 (67324752)\n+093FCD Extract Zip Spec      14 (20) '2.0'\n+093FCE Extract OS            00 (0) 'MS-DOS'\n+093FCF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+093FD1 Compression Method    0000 (0) 'Stored'\n+093FD3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+093FD7 CRC                   00000000 (0)\n+093FDB Compressed Size       00000000 (0)\n+093FDF Uncompressed Size     00000000 (0)\n+093FE3 Filename Length       006C (108)\n+093FE5 Extra Length          0009 (9)\n+093FE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x93FE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+094053 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+094055   Length              0005 (5)\n+094057   Flags               01 (1) 'Modification'\n+094058   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09405C PAYLOAD\n+\n+0947F1 DATA DESCRIPTOR       08074B50 (134695760)\n+0947F5 CRC                   0B04A112 (184852754)\n+0947F9 Compressed Size       00000795 (1941)\n+0947FD Uncompressed Size     00000795 (1941)\n+\n+094801 LOCAL HEADER #268     04034B50 (67324752)\n+094805 Extract Zip Spec      14 (20) '2.0'\n+094806 Extract OS            00 (0) 'MS-DOS'\n+094807 General Purpose Flag  0000 (0)\n+094809 Compression Method    0000 (0) 'Stored'\n+09480B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09480F CRC                   00000000 (0)\n+094813 Compressed Size       00000000 (0)\n+094817 Uncompressed Size     00000000 (0)\n+09481B Filename Length       0031 (49)\n+09481D Extra Length          0009 (9)\n+09481F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9481F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+094850 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+094852   Length              0005 (5)\n+094854   Flags               01 (1) 'Modification'\n+094855   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+094859 LOCAL HEADER #269     04034B50 (67324752)\n+09485D Extract Zip Spec      14 (20) '2.0'\n+09485E Extract OS            00 (0) 'MS-DOS'\n+09485F General Purpose Flag  0000 (0)\n+094861 Compression Method    0000 (0) 'Stored'\n+094863 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+094867 CRC                   00000000 (0)\n+09486B Compressed Size       00000000 (0)\n+09486F Uncompressed Size     00000000 (0)\n+094873 Filename Length       0038 (56)\n+094875 Extra Length          0009 (9)\n+094877 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x94877: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0948AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0948B1   Length              0005 (5)\n+0948B3   Flags               01 (1) 'Modification'\n+0948B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0948B8 LOCAL HEADER #270     04034B50 (67324752)\n+0948BC Extract Zip Spec      14 (20) '2.0'\n+0948BD Extract OS            00 (0) 'MS-DOS'\n+0948BE General Purpose Flag  0000 (0)\n+0948C0 Compression Method    0000 (0) 'Stored'\n+0948C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0948C6 CRC                   00000000 (0)\n+0948CA Compressed Size       00000000 (0)\n+0948CE Uncompressed Size     00000000 (0)\n+0948D2 Filename Length       006A (106)\n+0948D4 Extra Length          0009 (9)\n+0948D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x948D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+094940 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+094942   Length              0005 (5)\n+094944   Flags               01 (1) 'Modification'\n+094945   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+094949 LOCAL HEADER #271     04034B50 (67324752)\n+09494D Extract Zip Spec      14 (20) '2.0'\n+09494E Extract OS            00 (0) 'MS-DOS'\n+09494F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+094951 Compression Method    0000 (0) 'Stored'\n+094953 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+094957 CRC                   00000000 (0)\n+09495B Compressed Size       00000000 (0)\n+09495F Uncompressed Size     00000000 (0)\n+094963 Filename Length       0080 (128)\n+094965 Extra Length          0009 (9)\n+094967 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x94967: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0949E7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0949E9   Length              0005 (5)\n+0949EB   Flags               01 (1) 'Modification'\n+0949EC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0949F0 PAYLOAD\n+\n+09529B DATA DESCRIPTOR       08074B50 (134695760)\n+09529F CRC                   9A51A289 (2589041289)\n+0952A3 Compressed Size       000008AB (2219)\n+0952A7 Uncompressed Size     000008AB (2219)\n+\n+0952AB LOCAL HEADER #272     04034B50 (67324752)\n+0952AF Extract Zip Spec      14 (20) '2.0'\n+0952B0 Extract OS            00 (0) 'MS-DOS'\n+0952B1 General Purpose Flag  0000 (0)\n+0952B3 Compression Method    0000 (0) 'Stored'\n+0952B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0952B9 CRC                   00000000 (0)\n+0952BD Compressed Size       00000000 (0)\n+0952C1 Uncompressed Size     00000000 (0)\n+0952C5 Filename Length       0022 (34)\n+0952C7 Extra Length          0009 (9)\n+0952C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x952C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0952EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0952ED   Length              0005 (5)\n+0952EF   Flags               01 (1) 'Modification'\n+0952F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0952F4 LOCAL HEADER #273     04034B50 (67324752)\n+0952F8 Extract Zip Spec      14 (20) '2.0'\n+0952F9 Extract OS            00 (0) 'MS-DOS'\n+0952FA General Purpose Flag  0000 (0)\n+0952FC Compression Method    0000 (0) 'Stored'\n+0952FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+095302 CRC                   00000000 (0)\n+095306 Compressed Size       00000000 (0)\n+09530A Uncompressed Size     00000000 (0)\n+09530E Filename Length       0029 (41)\n+095310 Extra Length          0009 (9)\n+095312 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95312: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09533B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09533D   Length              0005 (5)\n+09533F   Flags               01 (1) 'Modification'\n+095340   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+095344 LOCAL HEADER #274     04034B50 (67324752)\n+095348 Extract Zip Spec      14 (20) '2.0'\n+095349 Extract OS            00 (0) 'MS-DOS'\n+09534A General Purpose Flag  0000 (0)\n+09534C Compression Method    0000 (0) 'Stored'\n+09534E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+095352 CRC                   00000000 (0)\n+095356 Compressed Size       00000000 (0)\n+09535A Uncompressed Size     00000000 (0)\n+09535E Filename Length       004B (75)\n+095360 Extra Length          0009 (9)\n+095362 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95362: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0953AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0953AF   Length              0005 (5)\n+0953B1   Flags               01 (1) 'Modification'\n+0953B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0953B6 LOCAL HEADER #275     04034B50 (67324752)\n+0953BA Extract Zip Spec      14 (20) '2.0'\n+0953BB Extract OS            00 (0) 'MS-DOS'\n+0953BC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0953BE Compression Method    0000 (0) 'Stored'\n+0953C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0953C4 CRC                   00000000 (0)\n+0953C8 Compressed Size       00000000 (0)\n+0953CC Uncompressed Size     00000000 (0)\n+0953D0 Filename Length       0061 (97)\n+0953D2 Extra Length          0009 (9)\n+0953D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x953D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+095435 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+095437   Length              0005 (5)\n+095439   Flags               01 (1) 'Modification'\n+09543A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09543E PAYLOAD\n+\n+098DAD DATA DESCRIPTOR       08074B50 (134695760)\n+098DB1 CRC                   BEAE3D9C (3199090076)\n+098DB5 Compressed Size       0000396F (14703)\n+098DB9 Uncompressed Size     0000396F (14703)\n+\n+098DBD LOCAL HEADER #276     04034B50 (67324752)\n+098DC1 Extract Zip Spec      14 (20) '2.0'\n+098DC2 Extract OS            00 (0) 'MS-DOS'\n+098DC3 General Purpose Flag  0000 (0)\n+098DC5 Compression Method    0000 (0) 'Stored'\n+098DC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+098DCB CRC                   00000000 (0)\n+098DCF Compressed Size       00000000 (0)\n+098DD3 Uncompressed Size     00000000 (0)\n+098DD7 Filename Length       0063 (99)\n+098DD9 Extra Length          0009 (9)\n+098DDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x98DDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+098E3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+098E40   Length              0005 (5)\n+098E42   Flags               01 (1) 'Modification'\n+098E43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+098E47 LOCAL HEADER #277     04034B50 (67324752)\n+098E4B Extract Zip Spec      14 (20) '2.0'\n+098E4C Extract OS            00 (0) 'MS-DOS'\n+098E4D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+098E4F Compression Method    0000 (0) 'Stored'\n+098E51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+098E55 CRC                   00000000 (0)\n+098E59 Compressed Size       00000000 (0)\n+098E5D Uncompressed Size     00000000 (0)\n+098E61 Filename Length       0079 (121)\n+098E63 Extra Length          0009 (9)\n+098E65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x98E65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+098EDE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+098EE0   Length              0005 (5)\n+098EE2   Flags               01 (1) 'Modification'\n+098EE3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+098EE7 PAYLOAD\n+\n+099D2B DATA DESCRIPTOR       08074B50 (134695760)\n+099D2F CRC                   28034B81 (671304577)\n+099D33 Compressed Size       00000E44 (3652)\n+099D37 Uncompressed Size     00000E44 (3652)\n+\n+099D3B LOCAL HEADER #278     04034B50 (67324752)\n+099D3F Extract Zip Spec      14 (20) '2.0'\n+099D40 Extract OS            00 (0) 'MS-DOS'\n+099D41 General Purpose Flag  0000 (0)\n+099D43 Compression Method    0000 (0) 'Stored'\n+099D45 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+099D49 CRC                   00000000 (0)\n+099D4D Compressed Size       00000000 (0)\n+099D51 Uncompressed Size     00000000 (0)\n+099D55 Filename Length       0030 (48)\n+099D57 Extra Length          0009 (9)\n+099D59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x99D59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+099D89 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+099D8B   Length              0005 (5)\n+099D8D   Flags               01 (1) 'Modification'\n+099D8E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+099D92 LOCAL HEADER #279     04034B50 (67324752)\n+099D96 Extract Zip Spec      14 (20) '2.0'\n+099D97 Extract OS            00 (0) 'MS-DOS'\n+099D98 General Purpose Flag  0000 (0)\n+099D9A Compression Method    0000 (0) 'Stored'\n+099D9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+099DA0 CRC                   00000000 (0)\n+099DA4 Compressed Size       00000000 (0)\n+099DA8 Uncompressed Size     00000000 (0)\n+099DAC Filename Length       0037 (55)\n+099DAE Extra Length          0009 (9)\n+099DB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x99DB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+099DE7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+099DE9   Length              0005 (5)\n+099DEB   Flags               01 (1) 'Modification'\n+099DEC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+099DF0 LOCAL HEADER #280     04034B50 (67324752)\n+099DF4 Extract Zip Spec      14 (20) '2.0'\n+099DF5 Extract OS            00 (0) 'MS-DOS'\n+099DF6 General Purpose Flag  0000 (0)\n+099DF8 Compression Method    0000 (0) 'Stored'\n+099DFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+099DFE CRC                   00000000 (0)\n+099E02 Compressed Size       00000000 (0)\n+099E06 Uncompressed Size     00000000 (0)\n+099E0A Filename Length       0068 (104)\n+099E0C Extra Length          0009 (9)\n+099E0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x99E0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+099E76 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+099E78   Length              0005 (5)\n+099E7A   Flags               01 (1) 'Modification'\n+099E7B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+099E7F LOCAL HEADER #281     04034B50 (67324752)\n+099E83 Extract Zip Spec      14 (20) '2.0'\n+099E84 Extract OS            00 (0) 'MS-DOS'\n+099E85 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+099E87 Compression Method    0000 (0) 'Stored'\n+099E89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+099E8D CRC                   00000000 (0)\n+099E91 Compressed Size       00000000 (0)\n+099E95 Uncompressed Size     00000000 (0)\n+099E99 Filename Length       007E (126)\n+099E9B Extra Length          0009 (9)\n+099E9D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x99E9D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+099F1B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+099F1D   Length              0005 (5)\n+099F1F   Flags               01 (1) 'Modification'\n+099F20   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+099F24 PAYLOAD\n+\n+09C345 DATA DESCRIPTOR       08074B50 (134695760)\n+09C349 CRC                   29D620BA (701898938)\n+09C34D Compressed Size       00002421 (9249)\n+09C351 Uncompressed Size     00002421 (9249)\n+\n+09C355 LOCAL HEADER #282     04034B50 (67324752)\n+09C359 Extract Zip Spec      14 (20) '2.0'\n+09C35A Extract OS            00 (0) 'MS-DOS'\n+09C35B General Purpose Flag  0000 (0)\n+09C35D Compression Method    0000 (0) 'Stored'\n+09C35F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09C363 CRC                   00000000 (0)\n+09C367 Compressed Size       00000000 (0)\n+09C36B Uncompressed Size     00000000 (0)\n+09C36F Filename Length       003C (60)\n+09C371 Extra Length          0009 (9)\n+09C373 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9C373: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09C3AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09C3B1   Length              0005 (5)\n+09C3B3   Flags               01 (1) 'Modification'\n+09C3B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09C3B8 LOCAL HEADER #283     04034B50 (67324752)\n+09C3BC Extract Zip Spec      14 (20) '2.0'\n+09C3BD Extract OS            00 (0) 'MS-DOS'\n+09C3BE General Purpose Flag  0000 (0)\n+09C3C0 Compression Method    0000 (0) 'Stored'\n+09C3C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09C3C6 CRC                   00000000 (0)\n+09C3CA Compressed Size       00000000 (0)\n+09C3CE Uncompressed Size     00000000 (0)\n+09C3D2 Filename Length       0043 (67)\n+09C3D4 Extra Length          0009 (9)\n+09C3D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9C3D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09C419 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09C41B   Length              0005 (5)\n+09C41D   Flags               01 (1) 'Modification'\n+09C41E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09C422 LOCAL HEADER #284     04034B50 (67324752)\n+09C426 Extract Zip Spec      14 (20) '2.0'\n+09C427 Extract OS            00 (0) 'MS-DOS'\n+09C428 General Purpose Flag  0000 (0)\n+09C42A Compression Method    0000 (0) 'Stored'\n+09C42C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09C430 CRC                   00000000 (0)\n+09C434 Compressed Size       00000000 (0)\n+09C438 Uncompressed Size     00000000 (0)\n+09C43C Filename Length       0061 (97)\n+09C43E Extra Length          0009 (9)\n+09C440 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9C440: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09C4A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09C4A3   Length              0005 (5)\n+09C4A5   Flags               01 (1) 'Modification'\n+09C4A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09C4AA LOCAL HEADER #285     04034B50 (67324752)\n+09C4AE Extract Zip Spec      14 (20) '2.0'\n+09C4AF Extract OS            00 (0) 'MS-DOS'\n+09C4B0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+09C4B2 Compression Method    0000 (0) 'Stored'\n+09C4B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09C4B8 CRC                   00000000 (0)\n+09C4BC Compressed Size       00000000 (0)\n+09C4C0 Uncompressed Size     00000000 (0)\n+09C4C4 Filename Length       0077 (119)\n+09C4C6 Extra Length          0009 (9)\n+09C4C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9C4C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09C53F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09C541   Length              0005 (5)\n+09C543   Flags               01 (1) 'Modification'\n+09C544   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09C548 PAYLOAD\n+\n+09FC2F DATA DESCRIPTOR       08074B50 (134695760)\n+09FC33 CRC                   9ED7BE90 (2664939152)\n+09FC37 Compressed Size       000036E7 (14055)\n+09FC3B Uncompressed Size     000036E7 (14055)\n+\n+09FC3F LOCAL HEADER #286     04034B50 (67324752)\n+09FC43 Extract Zip Spec      14 (20) '2.0'\n+09FC44 Extract OS            00 (0) 'MS-DOS'\n+09FC45 General Purpose Flag  0000 (0)\n+09FC47 Compression Method    0000 (0) 'Stored'\n+09FC49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09FC4D CRC                   00000000 (0)\n+09FC51 Compressed Size       00000000 (0)\n+09FC55 Uncompressed Size     00000000 (0)\n+09FC59 Filename Length       0061 (97)\n+09FC5B Extra Length          0009 (9)\n+09FC5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9FC5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09FCBE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09FCC0   Length              0005 (5)\n+09FCC2   Flags               01 (1) 'Modification'\n+09FCC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09FCC7 LOCAL HEADER #287     04034B50 (67324752)\n+09FCCB Extract Zip Spec      14 (20) '2.0'\n+09FCCC Extract OS            00 (0) 'MS-DOS'\n+09FCCD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+09FCCF Compression Method    0000 (0) 'Stored'\n+09FCD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09FCD5 CRC                   00000000 (0)\n+09FCD9 Compressed Size       00000000 (0)\n+09FCDD Uncompressed Size     00000000 (0)\n+09FCE1 Filename Length       0077 (119)\n+09FCE3 Extra Length          0009 (9)\n+09FCE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9FCE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09FD5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09FD5E   Length              0005 (5)\n+09FD60   Flags               01 (1) 'Modification'\n+09FD61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09FD65 PAYLOAD\n+\n+0A44F7 DATA DESCRIPTOR       08074B50 (134695760)\n+0A44FB CRC                   B51FDD91 (3038764433)\n+0A44FF Compressed Size       00004792 (18322)\n+0A4503 Uncompressed Size     00004792 (18322)\n+\n+0A4507 LOCAL HEADER #288     04034B50 (67324752)\n+0A450B Extract Zip Spec      14 (20) '2.0'\n+0A450C Extract OS            00 (0) 'MS-DOS'\n+0A450D General Purpose Flag  0000 (0)\n+0A450F Compression Method    0000 (0) 'Stored'\n+0A4511 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A4515 CRC                   00000000 (0)\n+0A4519 Compressed Size       00000000 (0)\n+0A451D Uncompressed Size     00000000 (0)\n+0A4521 Filename Length       0063 (99)\n+0A4523 Extra Length          0009 (9)\n+0A4525 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA4525: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A4588 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A458A   Length              0005 (5)\n+0A458C   Flags               01 (1) 'Modification'\n+0A458D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A4591 LOCAL HEADER #289     04034B50 (67324752)\n+0A4595 Extract Zip Spec      14 (20) '2.0'\n+0A4596 Extract OS            00 (0) 'MS-DOS'\n+0A4597 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A4599 Compression Method    0000 (0) 'Stored'\n+0A459B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A459F CRC                   00000000 (0)\n+0A45A3 Compressed Size       00000000 (0)\n+0A45A7 Uncompressed Size     00000000 (0)\n+0A45AB Filename Length       0079 (121)\n+0A45AD Extra Length          0009 (9)\n+0A45AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA45AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A4628 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A462A   Length              0005 (5)\n+0A462C   Flags               01 (1) 'Modification'\n+0A462D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A4631 PAYLOAD\n+\n+0AA40D DATA DESCRIPTOR       08074B50 (134695760)\n+0AA411 CRC                   27CFA48B (667919499)\n+0AA415 Compressed Size       00005DDC (24028)\n+0AA419 Uncompressed Size     00005DDC (24028)\n+\n+0AA41D LOCAL HEADER #290     04034B50 (67324752)\n+0AA421 Extract Zip Spec      14 (20) '2.0'\n+0AA422 Extract OS            00 (0) 'MS-DOS'\n+0AA423 General Purpose Flag  0000 (0)\n+0AA425 Compression Method    0000 (0) 'Stored'\n+0AA427 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AA42B CRC                   00000000 (0)\n+0AA42F Compressed Size       00000000 (0)\n+0AA433 Uncompressed Size     00000000 (0)\n+0AA437 Filename Length       0067 (103)\n+0AA439 Extra Length          0009 (9)\n+0AA43B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAA43B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AA4A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AA4A4   Length              0005 (5)\n+0AA4A6   Flags               01 (1) 'Modification'\n+0AA4A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0AA4AB LOCAL HEADER #291     04034B50 (67324752)\n+0AA4AF Extract Zip Spec      14 (20) '2.0'\n+0AA4B0 Extract OS            00 (0) 'MS-DOS'\n+0AA4B1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0AA4B3 Compression Method    0000 (0) 'Stored'\n+0AA4B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AA4B9 CRC                   00000000 (0)\n+0AA4BD Compressed Size       00000000 (0)\n+0AA4C1 Uncompressed Size     00000000 (0)\n+0AA4C5 Filename Length       007D (125)\n+0AA4C7 Extra Length          0009 (9)\n+0AA4C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAA4C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AA546 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AA548   Length              0005 (5)\n+0AA54A   Flags               01 (1) 'Modification'\n+0AA54B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0AA54F PAYLOAD\n+\n+0AE089 DATA DESCRIPTOR       08074B50 (134695760)\n+0AE08D CRC                   620AB78F (1644869519)\n+0AE091 Compressed Size       00003B3A (15162)\n+0AE095 Uncompressed Size     00003B3A (15162)\n+\n+0AE099 LOCAL HEADER #292     04034B50 (67324752)\n+0AE09D Extract Zip Spec      14 (20) '2.0'\n+0AE09E Extract OS            00 (0) 'MS-DOS'\n+0AE09F General Purpose Flag  0000 (0)\n+0AE0A1 Compression Method    0000 (0) 'Stored'\n+0AE0A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AE0A7 CRC                   00000000 (0)\n+0AE0AB Compressed Size       00000000 (0)\n+0AE0AF Uncompressed Size     00000000 (0)\n+0AE0B3 Filename Length       0067 (103)\n+0AE0B5 Extra Length          0009 (9)\n+0AE0B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAE0B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AE11E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AE120   Length              0005 (5)\n+0AE122   Flags               01 (1) 'Modification'\n+0AE123   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0AE127 LOCAL HEADER #293     04034B50 (67324752)\n+0AE12B Extract Zip Spec      14 (20) '2.0'\n+0AE12C Extract OS            00 (0) 'MS-DOS'\n+0AE12D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0AE12F Compression Method    0000 (0) 'Stored'\n+0AE131 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AE135 CRC                   00000000 (0)\n+0AE139 Compressed Size       00000000 (0)\n+0AE13D Uncompressed Size     00000000 (0)\n+0AE141 Filename Length       007D (125)\n+0AE143 Extra Length          0009 (9)\n+0AE145 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAE145: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AE1C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AE1C4   Length              0005 (5)\n+0AE1C6   Flags               01 (1) 'Modification'\n+0AE1C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0AE1CB PAYLOAD\n+\n+0B2A34 DATA DESCRIPTOR       08074B50 (134695760)\n+0B2A38 CRC                   937A07E6 (2474248166)\n+0B2A3C Compressed Size       00004869 (18537)\n+0B2A40 Uncompressed Size     00004869 (18537)\n+\n+0B2A44 LOCAL HEADER #294     04034B50 (67324752)\n+0B2A48 Extract Zip Spec      14 (20) '2.0'\n+0B2A49 Extract OS            00 (0) 'MS-DOS'\n+0B2A4A General Purpose Flag  0000 (0)\n+0B2A4C Compression Method    0000 (0) 'Stored'\n+0B2A4E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B2A52 CRC                   00000000 (0)\n+0B2A56 Compressed Size       00000000 (0)\n+0B2A5A Uncompressed Size     00000000 (0)\n+0B2A5E Filename Length       006B (107)\n+0B2A60 Extra Length          0009 (9)\n+0B2A62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB2A62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B2ACD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B2ACF   Length              0005 (5)\n+0B2AD1   Flags               01 (1) 'Modification'\n+0B2AD2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B2AD6 LOCAL HEADER #295     04034B50 (67324752)\n+0B2ADA Extract Zip Spec      14 (20) '2.0'\n+0B2ADB Extract OS            00 (0) 'MS-DOS'\n+0B2ADC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B2ADE Compression Method    0000 (0) 'Stored'\n+0B2AE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B2AE4 CRC                   00000000 (0)\n+0B2AE8 Compressed Size       00000000 (0)\n+0B2AEC Uncompressed Size     00000000 (0)\n+0B2AF0 Filename Length       0081 (129)\n+0B2AF2 Extra Length          0009 (9)\n+0B2AF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB2AF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B2B75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B2B77   Length              0005 (5)\n+0B2B79   Flags               01 (1) 'Modification'\n+0B2B7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B2B7E PAYLOAD\n+\n+0B365D DATA DESCRIPTOR       08074B50 (134695760)\n+0B3661 CRC                   53DFF1D7 (1407185367)\n+0B3665 Compressed Size       00000ADF (2783)\n+0B3669 Uncompressed Size     00000ADF (2783)\n+\n+0B366D LOCAL HEADER #296     04034B50 (67324752)\n+0B3671 Extract Zip Spec      14 (20) '2.0'\n+0B3672 Extract OS            00 (0) 'MS-DOS'\n+0B3673 General Purpose Flag  0000 (0)\n+0B3675 Compression Method    0000 (0) 'Stored'\n+0B3677 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B367B CRC                   00000000 (0)\n+0B367F Compressed Size       00000000 (0)\n+0B3683 Uncompressed Size     00000000 (0)\n+0B3687 Filename Length       0067 (103)\n+0B3689 Extra Length          0009 (9)\n+0B368B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB368B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B36F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B36F4   Length              0005 (5)\n+0B36F6   Flags               01 (1) 'Modification'\n+0B36F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B36FB LOCAL HEADER #297     04034B50 (67324752)\n+0B36FF Extract Zip Spec      14 (20) '2.0'\n+0B3700 Extract OS            00 (0) 'MS-DOS'\n+0B3701 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B3703 Compression Method    0000 (0) 'Stored'\n+0B3705 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B3709 CRC                   00000000 (0)\n+0B370D Compressed Size       00000000 (0)\n+0B3711 Uncompressed Size     00000000 (0)\n+0B3715 Filename Length       007D (125)\n+0B3717 Extra Length          0009 (9)\n+0B3719 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB3719: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B3796 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B3798   Length              0005 (5)\n+0B379A   Flags               01 (1) 'Modification'\n+0B379B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B379F PAYLOAD\n+\n+0B40D8 DATA DESCRIPTOR       08074B50 (134695760)\n+0B40DC CRC                   6D3A5445 (1832539205)\n+0B40E0 Compressed Size       00000939 (2361)\n+0B40E4 Uncompressed Size     00000939 (2361)\n+\n+0B40E8 LOCAL HEADER #298     04034B50 (67324752)\n+0B40EC Extract Zip Spec      14 (20) '2.0'\n+0B40ED Extract OS            00 (0) 'MS-DOS'\n+0B40EE General Purpose Flag  0000 (0)\n+0B40F0 Compression Method    0000 (0) 'Stored'\n+0B40F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B40F6 CRC                   00000000 (0)\n+0B40FA Compressed Size       00000000 (0)\n+0B40FE Uncompressed Size     00000000 (0)\n+0B4102 Filename Length       0076 (118)\n+0B4104 Extra Length          0009 (9)\n+0B4106 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB4106: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B417C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B417E   Length              0005 (5)\n+0B4180   Flags               01 (1) 'Modification'\n+0B4181   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B4185 LOCAL HEADER #299     04034B50 (67324752)\n+0B4189 Extract Zip Spec      14 (20) '2.0'\n+0B418A Extract OS            00 (0) 'MS-DOS'\n+0B418B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B418D Compression Method    0000 (0) 'Stored'\n+0B418F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B4193 CRC                   00000000 (0)\n+0B4197 Compressed Size       00000000 (0)\n+0B419B Uncompressed Size     00000000 (0)\n+0B419F Filename Length       008C (140)\n+0B41A1 Extra Length          0009 (9)\n+0B41A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXX'\n #\n-# WARNING: Offset 0xB07DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB41A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B0867 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B0869   Length              0005 (5)\n-0B086B   Flags               01 (1) 'Modification'\n-0B086C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B0870 PAYLOAD\n-\n-0B164D DATA DESCRIPTOR       08074B50 (134695760)\n-0B1651 CRC                   5C6B1924 (1550522660)\n-0B1655 Compressed Size       00000DDD (3549)\n-0B1659 Uncompressed Size     00000DDD (3549)\n-\n-0B165D LOCAL HEADER #300     04034B50 (67324752)\n-0B1661 Extract Zip Spec      14 (20) '2.0'\n-0B1662 Extract OS            00 (0) 'MS-DOS'\n-0B1663 General Purpose Flag  0000 (0)\n-0B1665 Compression Method    0000 (0) 'Stored'\n-0B1667 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B166B CRC                   00000000 (0)\n-0B166F Compressed Size       00000000 (0)\n-0B1673 Uncompressed Size     00000000 (0)\n-0B1677 Filename Length       0061 (97)\n-0B1679 Extra Length          0009 (9)\n-0B167B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB167B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B16DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B16DE   Length              0005 (5)\n-0B16E0   Flags               01 (1) 'Modification'\n-0B16E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B16E5 LOCAL HEADER #301     04034B50 (67324752)\n-0B16E9 Extract Zip Spec      14 (20) '2.0'\n-0B16EA Extract OS            00 (0) 'MS-DOS'\n-0B16EB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B16ED Compression Method    0000 (0) 'Stored'\n-0B16EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B16F3 CRC                   00000000 (0)\n-0B16F7 Compressed Size       00000000 (0)\n-0B16FB Uncompressed Size     00000000 (0)\n-0B16FF Filename Length       0077 (119)\n-0B1701 Extra Length          0009 (9)\n-0B1703 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB1703: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B177A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B177C   Length              0005 (5)\n-0B177E   Flags               01 (1) 'Modification'\n-0B177F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B1783 PAYLOAD\n-\n-0BAAB8 DATA DESCRIPTOR       08074B50 (134695760)\n-0BAABC CRC                   C7DF88BB (3353315515)\n-0BAAC0 Compressed Size       00009335 (37685)\n-0BAAC4 Uncompressed Size     00009335 (37685)\n-\n-0BAAC8 LOCAL HEADER #302     04034B50 (67324752)\n-0BAACC Extract Zip Spec      14 (20) '2.0'\n-0BAACD Extract OS            00 (0) 'MS-DOS'\n-0BAACE General Purpose Flag  0000 (0)\n-0BAAD0 Compression Method    0000 (0) 'Stored'\n-0BAAD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BAAD6 CRC                   00000000 (0)\n-0BAADA Compressed Size       00000000 (0)\n-0BAADE Uncompressed Size     00000000 (0)\n-0BAAE2 Filename Length       006A (106)\n-0BAAE4 Extra Length          0009 (9)\n-0BAAE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBAAE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BAB50 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BAB52   Length              0005 (5)\n-0BAB54   Flags               01 (1) 'Modification'\n-0BAB55   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BAB59 LOCAL HEADER #303     04034B50 (67324752)\n-0BAB5D Extract Zip Spec      14 (20) '2.0'\n-0BAB5E Extract OS            00 (0) 'MS-DOS'\n-0BAB5F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BAB61 Compression Method    0000 (0) 'Stored'\n-0BAB63 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BAB67 CRC                   00000000 (0)\n-0BAB6B Compressed Size       00000000 (0)\n-0BAB6F Uncompressed Size     00000000 (0)\n-0BAB73 Filename Length       0080 (128)\n-0BAB75 Extra Length          0009 (9)\n-0BAB77 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBAB77: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BABF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BABF9   Length              0005 (5)\n-0BABFB   Flags               01 (1) 'Modification'\n-0BABFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BAC00 PAYLOAD\n-\n-0BC7B1 DATA DESCRIPTOR       08074B50 (134695760)\n-0BC7B5 CRC                   217BBE0B (561757707)\n-0BC7B9 Compressed Size       00001BB1 (7089)\n-0BC7BD Uncompressed Size     00001BB1 (7089)\n-\n-0BC7C1 LOCAL HEADER #304     04034B50 (67324752)\n-0BC7C5 Extract Zip Spec      14 (20) '2.0'\n-0BC7C6 Extract OS            00 (0) 'MS-DOS'\n-0BC7C7 General Purpose Flag  0000 (0)\n-0BC7C9 Compression Method    0000 (0) 'Stored'\n-0BC7CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BC7CF CRC                   00000000 (0)\n-0BC7D3 Compressed Size       00000000 (0)\n-0BC7D7 Uncompressed Size     00000000 (0)\n-0BC7DB Filename Length       0067 (103)\n-0BC7DD Extra Length          0009 (9)\n-0BC7DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBC7DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BC846 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BC848   Length              0005 (5)\n-0BC84A   Flags               01 (1) 'Modification'\n-0BC84B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BC84F LOCAL HEADER #305     04034B50 (67324752)\n-0BC853 Extract Zip Spec      14 (20) '2.0'\n-0BC854 Extract OS            00 (0) 'MS-DOS'\n-0BC855 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BC857 Compression Method    0000 (0) 'Stored'\n-0BC859 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BC85D CRC                   00000000 (0)\n-0BC861 Compressed Size       00000000 (0)\n-0BC865 Uncompressed Size     00000000 (0)\n-0BC869 Filename Length       007D (125)\n-0BC86B Extra Length          0009 (9)\n-0BC86D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBC86D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BC8EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BC8EC   Length              0005 (5)\n-0BC8EE   Flags               01 (1) 'Modification'\n-0BC8EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BC8F3 PAYLOAD\n-\n-0C135D DATA DESCRIPTOR       08074B50 (134695760)\n-0C1361 CRC                   CF72F6D0 (3480418000)\n-0C1365 Compressed Size       00004A6A (19050)\n-0C1369 Uncompressed Size     00004A6A (19050)\n-\n-0C136D LOCAL HEADER #306     04034B50 (67324752)\n-0C1371 Extract Zip Spec      14 (20) '2.0'\n-0C1372 Extract OS            00 (0) 'MS-DOS'\n-0C1373 General Purpose Flag  0000 (0)\n-0C1375 Compression Method    0000 (0) 'Stored'\n-0C1377 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C137B CRC                   00000000 (0)\n-0C137F Compressed Size       00000000 (0)\n-0C1383 Uncompressed Size     00000000 (0)\n-0C1387 Filename Length       0029 (41)\n-0C1389 Extra Length          0009 (9)\n-0C138B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC138B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C13B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C13B6   Length              0005 (5)\n-0C13B8   Flags               01 (1) 'Modification'\n-0C13B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C13BD LOCAL HEADER #307     04034B50 (67324752)\n-0C13C1 Extract Zip Spec      14 (20) '2.0'\n-0C13C2 Extract OS            00 (0) 'MS-DOS'\n-0C13C3 General Purpose Flag  0000 (0)\n-0C13C5 Compression Method    0000 (0) 'Stored'\n-0C13C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C13CB CRC                   00000000 (0)\n-0C13CF Compressed Size       00000000 (0)\n-0C13D3 Uncompressed Size     00000000 (0)\n-0C13D7 Filename Length       0030 (48)\n-0C13D9 Extra Length          0009 (9)\n-0C13DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC13DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C140B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C140D   Length              0005 (5)\n-0C140F   Flags               01 (1) 'Modification'\n-0C1410   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C1414 LOCAL HEADER #308     04034B50 (67324752)\n-0C1418 Extract Zip Spec      14 (20) '2.0'\n-0C1419 Extract OS            00 (0) 'MS-DOS'\n-0C141A General Purpose Flag  0000 (0)\n-0C141C Compression Method    0000 (0) 'Stored'\n-0C141E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C1422 CRC                   00000000 (0)\n-0C1426 Compressed Size       00000000 (0)\n-0C142A Uncompressed Size     00000000 (0)\n-0C142E Filename Length       006A (106)\n-0C1430 Extra Length          0009 (9)\n-0C1432 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC1432: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C149C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C149E   Length              0005 (5)\n-0C14A0   Flags               01 (1) 'Modification'\n-0C14A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C14A5 LOCAL HEADER #309     04034B50 (67324752)\n-0C14A9 Extract Zip Spec      14 (20) '2.0'\n-0C14AA Extract OS            00 (0) 'MS-DOS'\n-0C14AB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C14AD Compression Method    0000 (0) 'Stored'\n-0C14AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C14B3 CRC                   00000000 (0)\n-0C14B7 Compressed Size       00000000 (0)\n-0C14BB Uncompressed Size     00000000 (0)\n-0C14BF Filename Length       0080 (128)\n-0C14C1 Extra Length          0009 (9)\n-0C14C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC14C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C1543 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C1545   Length              0005 (5)\n-0C1547   Flags               01 (1) 'Modification'\n-0C1548   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C154C PAYLOAD\n-\n-0C1F1F DATA DESCRIPTOR       08074B50 (134695760)\n-0C1F23 CRC                   DCEFA272 (3706692210)\n-0C1F27 Compressed Size       000009D3 (2515)\n-0C1F2B Uncompressed Size     000009D3 (2515)\n-\n-0C1F2F LOCAL HEADER #310     04034B50 (67324752)\n-0C1F33 Extract Zip Spec      14 (20) '2.0'\n-0C1F34 Extract OS            00 (0) 'MS-DOS'\n-0C1F35 General Purpose Flag  0000 (0)\n-0C1F37 Compression Method    0000 (0) 'Stored'\n-0C1F39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C1F3D CRC                   00000000 (0)\n-0C1F41 Compressed Size       00000000 (0)\n-0C1F45 Uncompressed Size     00000000 (0)\n-0C1F49 Filename Length       006C (108)\n-0C1F4B Extra Length          0009 (9)\n-0C1F4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC1F4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C1FB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C1FBB   Length              0005 (5)\n-0C1FBD   Flags               01 (1) 'Modification'\n-0C1FBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C1FC2 LOCAL HEADER #311     04034B50 (67324752)\n-0C1FC6 Extract Zip Spec      14 (20) '2.0'\n-0C1FC7 Extract OS            00 (0) 'MS-DOS'\n-0C1FC8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C1FCA Compression Method    0000 (0) 'Stored'\n-0C1FCC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C1FD0 CRC                   00000000 (0)\n-0C1FD4 Compressed Size       00000000 (0)\n-0C1FD8 Uncompressed Size     00000000 (0)\n-0C1FDC Filename Length       0082 (130)\n-0C1FDE Extra Length          0009 (9)\n-0C1FE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC1FE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C2062 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C2064   Length              0005 (5)\n-0C2066   Flags               01 (1) 'Modification'\n-0C2067   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C206B PAYLOAD\n-\n-0C32E1 DATA DESCRIPTOR       08074B50 (134695760)\n-0C32E5 CRC                   26E963FE (652829694)\n-0C32E9 Compressed Size       00001276 (4726)\n-0C32ED Uncompressed Size     00001276 (4726)\n-\n-0C32F1 LOCAL HEADER #312     04034B50 (67324752)\n-0C32F5 Extract Zip Spec      14 (20) '2.0'\n-0C32F6 Extract OS            00 (0) 'MS-DOS'\n-0C32F7 General Purpose Flag  0000 (0)\n-0C32F9 Compression Method    0000 (0) 'Stored'\n-0C32FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C32FF CRC                   00000000 (0)\n-0C3303 Compressed Size       00000000 (0)\n-0C3307 Uncompressed Size     00000000 (0)\n-0C330B Filename Length       0028 (40)\n-0C330D Extra Length          0009 (9)\n-0C330F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC330F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C3337 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C3339   Length              0005 (5)\n-0C333B   Flags               01 (1) 'Modification'\n-0C333C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C3340 LOCAL HEADER #313     04034B50 (67324752)\n-0C3344 Extract Zip Spec      14 (20) '2.0'\n-0C3345 Extract OS            00 (0) 'MS-DOS'\n-0C3346 General Purpose Flag  0000 (0)\n-0C3348 Compression Method    0000 (0) 'Stored'\n-0C334A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C334E CRC                   00000000 (0)\n-0C3352 Compressed Size       00000000 (0)\n-0C3356 Uncompressed Size     00000000 (0)\n-0C335A Filename Length       002F (47)\n-0C335C Extra Length          0009 (9)\n-0C335E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC335E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C338D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C338F   Length              0005 (5)\n-0C3391   Flags               01 (1) 'Modification'\n-0C3392   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C3396 LOCAL HEADER #314     04034B50 (67324752)\n-0C339A Extract Zip Spec      14 (20) '2.0'\n-0C339B Extract OS            00 (0) 'MS-DOS'\n-0C339C General Purpose Flag  0000 (0)\n-0C339E Compression Method    0000 (0) 'Stored'\n-0C33A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C33A4 CRC                   00000000 (0)\n-0C33A8 Compressed Size       00000000 (0)\n-0C33AC Uncompressed Size     00000000 (0)\n-0C33B0 Filename Length       005F (95)\n-0C33B2 Extra Length          0009 (9)\n-0C33B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC33B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C3413 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C3415   Length              0005 (5)\n-0C3417   Flags               01 (1) 'Modification'\n-0C3418   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C341C LOCAL HEADER #315     04034B50 (67324752)\n-0C3420 Extract Zip Spec      14 (20) '2.0'\n-0C3421 Extract OS            00 (0) 'MS-DOS'\n-0C3422 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C3424 Compression Method    0000 (0) 'Stored'\n-0C3426 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C342A CRC                   00000000 (0)\n-0C342E Compressed Size       00000000 (0)\n-0C3432 Uncompressed Size     00000000 (0)\n-0C3436 Filename Length       0075 (117)\n-0C3438 Extra Length          0009 (9)\n-0C343A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC343A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C34AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C34B1   Length              0005 (5)\n-0C34B3   Flags               01 (1) 'Modification'\n-0C34B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C34B8 PAYLOAD\n-\n-0CBDFC DATA DESCRIPTOR       08074B50 (134695760)\n-0CBE00 CRC                   6B96B8CE (1805039822)\n-0CBE04 Compressed Size       00008944 (35140)\n-0CBE08 Uncompressed Size     00008944 (35140)\n-\n-0CBE0C LOCAL HEADER #316     04034B50 (67324752)\n-0CBE10 Extract Zip Spec      14 (20) '2.0'\n-0CBE11 Extract OS            00 (0) 'MS-DOS'\n-0CBE12 General Purpose Flag  0000 (0)\n-0CBE14 Compression Method    0000 (0) 'Stored'\n-0CBE16 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CBE1A CRC                   00000000 (0)\n-0CBE1E Compressed Size       00000000 (0)\n-0CBE22 Uncompressed Size     00000000 (0)\n-0CBE26 Filename Length       0066 (102)\n-0CBE28 Extra Length          0009 (9)\n-0CBE2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCBE2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CBE90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CBE92   Length              0005 (5)\n-0CBE94   Flags               01 (1) 'Modification'\n-0CBE95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CBE99 LOCAL HEADER #317     04034B50 (67324752)\n-0CBE9D Extract Zip Spec      14 (20) '2.0'\n-0CBE9E Extract OS            00 (0) 'MS-DOS'\n-0CBE9F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CBEA1 Compression Method    0000 (0) 'Stored'\n-0CBEA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CBEA7 CRC                   00000000 (0)\n-0CBEAB Compressed Size       00000000 (0)\n-0CBEAF Uncompressed Size     00000000 (0)\n-0CBEB3 Filename Length       007C (124)\n-0CBEB5 Extra Length          0009 (9)\n-0CBEB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCBEB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CBF33 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CBF35   Length              0005 (5)\n-0CBF37   Flags               01 (1) 'Modification'\n-0CBF38   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CBF3C PAYLOAD\n-\n-0CDB76 DATA DESCRIPTOR       08074B50 (134695760)\n-0CDB7A CRC                   DB2A8543 (3676996931)\n-0CDB7E Compressed Size       00001C3A (7226)\n-0CDB82 Uncompressed Size     00001C3A (7226)\n-\n-0CDB86 LOCAL HEADER #318     04034B50 (67324752)\n-0CDB8A Extract Zip Spec      14 (20) '2.0'\n-0CDB8B Extract OS            00 (0) 'MS-DOS'\n-0CDB8C General Purpose Flag  0000 (0)\n-0CDB8E Compression Method    0000 (0) 'Stored'\n-0CDB90 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CDB94 CRC                   00000000 (0)\n-0CDB98 Compressed Size       00000000 (0)\n-0CDB9C Uncompressed Size     00000000 (0)\n-0CDBA0 Filename Length       0069 (105)\n-0CDBA2 Extra Length          0009 (9)\n-0CDBA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCDBA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CDC0D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CDC0F   Length              0005 (5)\n-0CDC11   Flags               01 (1) 'Modification'\n-0CDC12   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CDC16 LOCAL HEADER #319     04034B50 (67324752)\n-0CDC1A Extract Zip Spec      14 (20) '2.0'\n-0CDC1B Extract OS            00 (0) 'MS-DOS'\n-0CDC1C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CDC1E Compression Method    0000 (0) 'Stored'\n-0CDC20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CDC24 CRC                   00000000 (0)\n-0CDC28 Compressed Size       00000000 (0)\n-0CDC2C Uncompressed Size     00000000 (0)\n-0CDC30 Filename Length       007F (127)\n-0CDC32 Extra Length          0009 (9)\n-0CDC34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCDC34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CDCB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CDCB5   Length              0005 (5)\n-0CDCB7   Flags               01 (1) 'Modification'\n-0CDCB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CDCBC PAYLOAD\n-\n-0CF20E DATA DESCRIPTOR       08074B50 (134695760)\n-0CF212 CRC                   FF5BC4DC (4284204252)\n-0CF216 Compressed Size       00001552 (5458)\n-0CF21A Uncompressed Size     00001552 (5458)\n-\n-0CF21E LOCAL HEADER #320     04034B50 (67324752)\n-0CF222 Extract Zip Spec      14 (20) '2.0'\n-0CF223 Extract OS            00 (0) 'MS-DOS'\n-0CF224 General Purpose Flag  0000 (0)\n-0CF226 Compression Method    0000 (0) 'Stored'\n-0CF228 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CF22C CRC                   00000000 (0)\n-0CF230 Compressed Size       00000000 (0)\n-0CF234 Uncompressed Size     00000000 (0)\n-0CF238 Filename Length       0069 (105)\n-0CF23A Extra Length          0009 (9)\n-0CF23C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCF23C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CF2A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CF2A7   Length              0005 (5)\n-0CF2A9   Flags               01 (1) 'Modification'\n-0CF2AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CF2AE LOCAL HEADER #321     04034B50 (67324752)\n-0CF2B2 Extract Zip Spec      14 (20) '2.0'\n-0CF2B3 Extract OS            00 (0) 'MS-DOS'\n-0CF2B4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CF2B6 Compression Method    0000 (0) 'Stored'\n-0CF2B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CF2BC CRC                   00000000 (0)\n-0CF2C0 Compressed Size       00000000 (0)\n-0CF2C4 Uncompressed Size     00000000 (0)\n-0CF2C8 Filename Length       007F (127)\n-0CF2CA Extra Length          0009 (9)\n-0CF2CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCF2CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CF34B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CF34D   Length              0005 (5)\n-0CF34F   Flags               01 (1) 'Modification'\n-0CF350   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CF354 PAYLOAD\n-\n-0D2F80 DATA DESCRIPTOR       08074B50 (134695760)\n-0D2F84 CRC                   D6140D51 (3591638353)\n-0D2F88 Compressed Size       00003C2C (15404)\n-0D2F8C Uncompressed Size     00003C2C (15404)\n-\n-0D2F90 LOCAL HEADER #322     04034B50 (67324752)\n-0D2F94 Extract Zip Spec      14 (20) '2.0'\n-0D2F95 Extract OS            00 (0) 'MS-DOS'\n-0D2F96 General Purpose Flag  0000 (0)\n-0D2F98 Compression Method    0000 (0) 'Stored'\n-0D2F9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D2F9E CRC                   00000000 (0)\n-0D2FA2 Compressed Size       00000000 (0)\n-0D2FA6 Uncompressed Size     00000000 (0)\n-0D2FAA Filename Length       0068 (104)\n-0D2FAC Extra Length          0009 (9)\n-0D2FAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD2FAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D3016 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D3018   Length              0005 (5)\n-0D301A   Flags               01 (1) 'Modification'\n-0D301B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D301F LOCAL HEADER #323     04034B50 (67324752)\n-0D3023 Extract Zip Spec      14 (20) '2.0'\n-0D3024 Extract OS            00 (0) 'MS-DOS'\n-0D3025 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D3027 Compression Method    0000 (0) 'Stored'\n-0D3029 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D302D CRC                   00000000 (0)\n-0D3031 Compressed Size       00000000 (0)\n-0D3035 Uncompressed Size     00000000 (0)\n-0D3039 Filename Length       007E (126)\n-0D303B Extra Length          0009 (9)\n-0D303D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD303D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D30BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D30BD   Length              0005 (5)\n-0D30BF   Flags               01 (1) 'Modification'\n-0D30C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D30C4 PAYLOAD\n-\n-0D5226 DATA DESCRIPTOR       08074B50 (134695760)\n-0D522A CRC                   86CE2079 (2261655673)\n-0D522E Compressed Size       00002162 (8546)\n-0D5232 Uncompressed Size     00002162 (8546)\n-\n-0D5236 LOCAL HEADER #324     04034B50 (67324752)\n-0D523A Extract Zip Spec      14 (20) '2.0'\n-0D523B Extract OS            00 (0) 'MS-DOS'\n-0D523C General Purpose Flag  0000 (0)\n-0D523E Compression Method    0000 (0) 'Stored'\n-0D5240 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D5244 CRC                   00000000 (0)\n-0D5248 Compressed Size       00000000 (0)\n-0D524C Uncompressed Size     00000000 (0)\n-0D5250 Filename Length       0026 (38)\n-0D5252 Extra Length          0009 (9)\n-0D5254 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD5254: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D527A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D527C   Length              0005 (5)\n-0D527E   Flags               01 (1) 'Modification'\n-0D527F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D5283 LOCAL HEADER #325     04034B50 (67324752)\n-0D5287 Extract Zip Spec      14 (20) '2.0'\n-0D5288 Extract OS            00 (0) 'MS-DOS'\n-0D5289 General Purpose Flag  0000 (0)\n-0D528B Compression Method    0000 (0) 'Stored'\n-0D528D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D5291 CRC                   00000000 (0)\n-0D5295 Compressed Size       00000000 (0)\n-0D5299 Uncompressed Size     00000000 (0)\n-0D529D Filename Length       002D (45)\n-0D529F Extra Length          0009 (9)\n-0D52A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD52A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D52CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D52D0   Length              0005 (5)\n-0D52D2   Flags               01 (1) 'Modification'\n-0D52D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D52D7 LOCAL HEADER #326     04034B50 (67324752)\n-0D52DB Extract Zip Spec      14 (20) '2.0'\n-0D52DC Extract OS            00 (0) 'MS-DOS'\n-0D52DD General Purpose Flag  0000 (0)\n-0D52DF Compression Method    0000 (0) 'Stored'\n-0D52E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D52E5 CRC                   00000000 (0)\n-0D52E9 Compressed Size       00000000 (0)\n-0D52ED Uncompressed Size     00000000 (0)\n-0D52F1 Filename Length       005B (91)\n-0D52F3 Extra Length          0009 (9)\n-0D52F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD52F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D5350 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D5352   Length              0005 (5)\n-0D5354   Flags               01 (1) 'Modification'\n-0D5355   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D5359 LOCAL HEADER #327     04034B50 (67324752)\n-0D535D Extract Zip Spec      14 (20) '2.0'\n-0D535E Extract OS            00 (0) 'MS-DOS'\n-0D535F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D5361 Compression Method    0000 (0) 'Stored'\n-0D5363 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D5367 CRC                   00000000 (0)\n-0D536B Compressed Size       00000000 (0)\n-0D536F Uncompressed Size     00000000 (0)\n-0D5373 Filename Length       0071 (113)\n-0D5375 Extra Length          0009 (9)\n-0D5377 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD5377: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D53E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D53EA   Length              0005 (5)\n-0D53EC   Flags               01 (1) 'Modification'\n-0D53ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D53F1 PAYLOAD\n-\n-0D5E4C DATA DESCRIPTOR       08074B50 (134695760)\n-0D5E50 CRC                   B12610E6 (2972061926)\n-0D5E54 Compressed Size       00000A5B (2651)\n-0D5E58 Uncompressed Size     00000A5B (2651)\n-\n-0D5E5C LOCAL HEADER #328     04034B50 (67324752)\n-0D5E60 Extract Zip Spec      14 (20) '2.0'\n-0D5E61 Extract OS            00 (0) 'MS-DOS'\n-0D5E62 General Purpose Flag  0000 (0)\n-0D5E64 Compression Method    0000 (0) 'Stored'\n-0D5E66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D5E6A CRC                   00000000 (0)\n-0D5E6E Compressed Size       00000000 (0)\n-0D5E72 Uncompressed Size     00000000 (0)\n-0D5E76 Filename Length       0035 (53)\n-0D5E78 Extra Length          0009 (9)\n-0D5E7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD5E7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D5EAF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D5EB1   Length              0005 (5)\n-0D5EB3   Flags               01 (1) 'Modification'\n-0D5EB4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D5EB8 LOCAL HEADER #329     04034B50 (67324752)\n-0D5EBC Extract Zip Spec      14 (20) '2.0'\n-0D5EBD Extract OS            00 (0) 'MS-DOS'\n-0D5EBE General Purpose Flag  0000 (0)\n-0D5EC0 Compression Method    0000 (0) 'Stored'\n-0D5EC2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D5EC6 CRC                   00000000 (0)\n-0D5ECA Compressed Size       00000000 (0)\n-0D5ECE Uncompressed Size     00000000 (0)\n-0D5ED2 Filename Length       003C (60)\n-0D5ED4 Extra Length          0009 (9)\n-0D5ED6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD5ED6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D5F12 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D5F14   Length              0005 (5)\n-0D5F16   Flags               01 (1) 'Modification'\n-0D5F17   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D5F1B LOCAL HEADER #330     04034B50 (67324752)\n-0D5F1F Extract Zip Spec      14 (20) '2.0'\n-0D5F20 Extract OS            00 (0) 'MS-DOS'\n-0D5F21 General Purpose Flag  0000 (0)\n-0D5F23 Compression Method    0000 (0) 'Stored'\n-0D5F25 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D5F29 CRC                   00000000 (0)\n-0D5F2D Compressed Size       00000000 (0)\n-0D5F31 Uncompressed Size     00000000 (0)\n-0D5F35 Filename Length       0076 (118)\n-0D5F37 Extra Length          0009 (9)\n-0D5F39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD5F39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D5FAF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D5FB1   Length              0005 (5)\n-0D5FB3   Flags               01 (1) 'Modification'\n-0D5FB4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D5FB8 LOCAL HEADER #331     04034B50 (67324752)\n-0D5FBC Extract Zip Spec      14 (20) '2.0'\n-0D5FBD Extract OS            00 (0) 'MS-DOS'\n-0D5FBE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D5FC0 Compression Method    0000 (0) 'Stored'\n-0D5FC2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D5FC6 CRC                   00000000 (0)\n-0D5FCA Compressed Size       00000000 (0)\n-0D5FCE Uncompressed Size     00000000 (0)\n-0D5FD2 Filename Length       008C (140)\n-0D5FD4 Extra Length          0009 (9)\n-0D5FD6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0B422F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B4231   Length              0005 (5)\n+0B4233   Flags               01 (1) 'Modification'\n+0B4234   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B4238 PAYLOAD\n+\n+0B5015 DATA DESCRIPTOR       08074B50 (134695760)\n+0B5019 CRC                   5C6B1924 (1550522660)\n+0B501D Compressed Size       00000DDD (3549)\n+0B5021 Uncompressed Size     00000DDD (3549)\n+\n+0B5025 LOCAL HEADER #300     04034B50 (67324752)\n+0B5029 Extract Zip Spec      14 (20) '2.0'\n+0B502A Extract OS            00 (0) 'MS-DOS'\n+0B502B General Purpose Flag  0000 (0)\n+0B502D Compression Method    0000 (0) 'Stored'\n+0B502F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B5033 CRC                   00000000 (0)\n+0B5037 Compressed Size       00000000 (0)\n+0B503B Uncompressed Size     00000000 (0)\n+0B503F Filename Length       0061 (97)\n+0B5041 Extra Length          0009 (9)\n+0B5043 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB5043: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B50A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B50A6   Length              0005 (5)\n+0B50A8   Flags               01 (1) 'Modification'\n+0B50A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B50AD LOCAL HEADER #301     04034B50 (67324752)\n+0B50B1 Extract Zip Spec      14 (20) '2.0'\n+0B50B2 Extract OS            00 (0) 'MS-DOS'\n+0B50B3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B50B5 Compression Method    0000 (0) 'Stored'\n+0B50B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B50BB CRC                   00000000 (0)\n+0B50BF Compressed Size       00000000 (0)\n+0B50C3 Uncompressed Size     00000000 (0)\n+0B50C7 Filename Length       0077 (119)\n+0B50C9 Extra Length          0009 (9)\n+0B50CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB50CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B5142 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B5144   Length              0005 (5)\n+0B5146   Flags               01 (1) 'Modification'\n+0B5147   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B514B PAYLOAD\n+\n+0BE480 DATA DESCRIPTOR       08074B50 (134695760)\n+0BE484 CRC                   C7DF88BB (3353315515)\n+0BE488 Compressed Size       00009335 (37685)\n+0BE48C Uncompressed Size     00009335 (37685)\n+\n+0BE490 LOCAL HEADER #302     04034B50 (67324752)\n+0BE494 Extract Zip Spec      14 (20) '2.0'\n+0BE495 Extract OS            00 (0) 'MS-DOS'\n+0BE496 General Purpose Flag  0000 (0)\n+0BE498 Compression Method    0000 (0) 'Stored'\n+0BE49A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BE49E CRC                   00000000 (0)\n+0BE4A2 Compressed Size       00000000 (0)\n+0BE4A6 Uncompressed Size     00000000 (0)\n+0BE4AA Filename Length       006A (106)\n+0BE4AC Extra Length          0009 (9)\n+0BE4AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBE4AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BE518 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BE51A   Length              0005 (5)\n+0BE51C   Flags               01 (1) 'Modification'\n+0BE51D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BE521 LOCAL HEADER #303     04034B50 (67324752)\n+0BE525 Extract Zip Spec      14 (20) '2.0'\n+0BE526 Extract OS            00 (0) 'MS-DOS'\n+0BE527 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BE529 Compression Method    0000 (0) 'Stored'\n+0BE52B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BE52F CRC                   00000000 (0)\n+0BE533 Compressed Size       00000000 (0)\n+0BE537 Uncompressed Size     00000000 (0)\n+0BE53B Filename Length       0080 (128)\n+0BE53D Extra Length          0009 (9)\n+0BE53F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBE53F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BE5BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BE5C1   Length              0005 (5)\n+0BE5C3   Flags               01 (1) 'Modification'\n+0BE5C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BE5C8 PAYLOAD\n+\n+0C0179 DATA DESCRIPTOR       08074B50 (134695760)\n+0C017D CRC                   217BBE0B (561757707)\n+0C0181 Compressed Size       00001BB1 (7089)\n+0C0185 Uncompressed Size     00001BB1 (7089)\n+\n+0C0189 LOCAL HEADER #304     04034B50 (67324752)\n+0C018D Extract Zip Spec      14 (20) '2.0'\n+0C018E Extract OS            00 (0) 'MS-DOS'\n+0C018F General Purpose Flag  0000 (0)\n+0C0191 Compression Method    0000 (0) 'Stored'\n+0C0193 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C0197 CRC                   00000000 (0)\n+0C019B Compressed Size       00000000 (0)\n+0C019F Uncompressed Size     00000000 (0)\n+0C01A3 Filename Length       0067 (103)\n+0C01A5 Extra Length          0009 (9)\n+0C01A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC01A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C020E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C0210   Length              0005 (5)\n+0C0212   Flags               01 (1) 'Modification'\n+0C0213   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C0217 LOCAL HEADER #305     04034B50 (67324752)\n+0C021B Extract Zip Spec      14 (20) '2.0'\n+0C021C Extract OS            00 (0) 'MS-DOS'\n+0C021D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C021F Compression Method    0000 (0) 'Stored'\n+0C0221 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C0225 CRC                   00000000 (0)\n+0C0229 Compressed Size       00000000 (0)\n+0C022D Uncompressed Size     00000000 (0)\n+0C0231 Filename Length       007D (125)\n+0C0233 Extra Length          0009 (9)\n+0C0235 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC0235: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C02B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C02B4   Length              0005 (5)\n+0C02B6   Flags               01 (1) 'Modification'\n+0C02B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C02BB PAYLOAD\n+\n+0C4D25 DATA DESCRIPTOR       08074B50 (134695760)\n+0C4D29 CRC                   CF72F6D0 (3480418000)\n+0C4D2D Compressed Size       00004A6A (19050)\n+0C4D31 Uncompressed Size     00004A6A (19050)\n+\n+0C4D35 LOCAL HEADER #306     04034B50 (67324752)\n+0C4D39 Extract Zip Spec      14 (20) '2.0'\n+0C4D3A Extract OS            00 (0) 'MS-DOS'\n+0C4D3B General Purpose Flag  0000 (0)\n+0C4D3D Compression Method    0000 (0) 'Stored'\n+0C4D3F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C4D43 CRC                   00000000 (0)\n+0C4D47 Compressed Size       00000000 (0)\n+0C4D4B Uncompressed Size     00000000 (0)\n+0C4D4F Filename Length       0029 (41)\n+0C4D51 Extra Length          0009 (9)\n+0C4D53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC4D53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C4D7C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C4D7E   Length              0005 (5)\n+0C4D80   Flags               01 (1) 'Modification'\n+0C4D81   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C4D85 LOCAL HEADER #307     04034B50 (67324752)\n+0C4D89 Extract Zip Spec      14 (20) '2.0'\n+0C4D8A Extract OS            00 (0) 'MS-DOS'\n+0C4D8B General Purpose Flag  0000 (0)\n+0C4D8D Compression Method    0000 (0) 'Stored'\n+0C4D8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C4D93 CRC                   00000000 (0)\n+0C4D97 Compressed Size       00000000 (0)\n+0C4D9B Uncompressed Size     00000000 (0)\n+0C4D9F Filename Length       0030 (48)\n+0C4DA1 Extra Length          0009 (9)\n+0C4DA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC4DA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C4DD3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C4DD5   Length              0005 (5)\n+0C4DD7   Flags               01 (1) 'Modification'\n+0C4DD8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C4DDC LOCAL HEADER #308     04034B50 (67324752)\n+0C4DE0 Extract Zip Spec      14 (20) '2.0'\n+0C4DE1 Extract OS            00 (0) 'MS-DOS'\n+0C4DE2 General Purpose Flag  0000 (0)\n+0C4DE4 Compression Method    0000 (0) 'Stored'\n+0C4DE6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C4DEA CRC                   00000000 (0)\n+0C4DEE Compressed Size       00000000 (0)\n+0C4DF2 Uncompressed Size     00000000 (0)\n+0C4DF6 Filename Length       006A (106)\n+0C4DF8 Extra Length          0009 (9)\n+0C4DFA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC4DFA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C4E64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C4E66   Length              0005 (5)\n+0C4E68   Flags               01 (1) 'Modification'\n+0C4E69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C4E6D LOCAL HEADER #309     04034B50 (67324752)\n+0C4E71 Extract Zip Spec      14 (20) '2.0'\n+0C4E72 Extract OS            00 (0) 'MS-DOS'\n+0C4E73 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C4E75 Compression Method    0000 (0) 'Stored'\n+0C4E77 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C4E7B CRC                   00000000 (0)\n+0C4E7F Compressed Size       00000000 (0)\n+0C4E83 Uncompressed Size     00000000 (0)\n+0C4E87 Filename Length       0080 (128)\n+0C4E89 Extra Length          0009 (9)\n+0C4E8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC4E8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C4F0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C4F0D   Length              0005 (5)\n+0C4F0F   Flags               01 (1) 'Modification'\n+0C4F10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C4F14 PAYLOAD\n+\n+0C58E7 DATA DESCRIPTOR       08074B50 (134695760)\n+0C58EB CRC                   DCEFA272 (3706692210)\n+0C58EF Compressed Size       000009D3 (2515)\n+0C58F3 Uncompressed Size     000009D3 (2515)\n+\n+0C58F7 LOCAL HEADER #310     04034B50 (67324752)\n+0C58FB Extract Zip Spec      14 (20) '2.0'\n+0C58FC Extract OS            00 (0) 'MS-DOS'\n+0C58FD General Purpose Flag  0000 (0)\n+0C58FF Compression Method    0000 (0) 'Stored'\n+0C5901 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C5905 CRC                   00000000 (0)\n+0C5909 Compressed Size       00000000 (0)\n+0C590D Uncompressed Size     00000000 (0)\n+0C5911 Filename Length       006C (108)\n+0C5913 Extra Length          0009 (9)\n+0C5915 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC5915: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C5981 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C5983   Length              0005 (5)\n+0C5985   Flags               01 (1) 'Modification'\n+0C5986   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C598A LOCAL HEADER #311     04034B50 (67324752)\n+0C598E Extract Zip Spec      14 (20) '2.0'\n+0C598F Extract OS            00 (0) 'MS-DOS'\n+0C5990 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C5992 Compression Method    0000 (0) 'Stored'\n+0C5994 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C5998 CRC                   00000000 (0)\n+0C599C Compressed Size       00000000 (0)\n+0C59A0 Uncompressed Size     00000000 (0)\n+0C59A4 Filename Length       0082 (130)\n+0C59A6 Extra Length          0009 (9)\n+0C59A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC59A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C5A2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C5A2C   Length              0005 (5)\n+0C5A2E   Flags               01 (1) 'Modification'\n+0C5A2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C5A33 PAYLOAD\n+\n+0C6CA9 DATA DESCRIPTOR       08074B50 (134695760)\n+0C6CAD CRC                   26E963FE (652829694)\n+0C6CB1 Compressed Size       00001276 (4726)\n+0C6CB5 Uncompressed Size     00001276 (4726)\n+\n+0C6CB9 LOCAL HEADER #312     04034B50 (67324752)\n+0C6CBD Extract Zip Spec      14 (20) '2.0'\n+0C6CBE Extract OS            00 (0) 'MS-DOS'\n+0C6CBF General Purpose Flag  0000 (0)\n+0C6CC1 Compression Method    0000 (0) 'Stored'\n+0C6CC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C6CC7 CRC                   00000000 (0)\n+0C6CCB Compressed Size       00000000 (0)\n+0C6CCF Uncompressed Size     00000000 (0)\n+0C6CD3 Filename Length       0028 (40)\n+0C6CD5 Extra Length          0009 (9)\n+0C6CD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC6CD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C6CFF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C6D01   Length              0005 (5)\n+0C6D03   Flags               01 (1) 'Modification'\n+0C6D04   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C6D08 LOCAL HEADER #313     04034B50 (67324752)\n+0C6D0C Extract Zip Spec      14 (20) '2.0'\n+0C6D0D Extract OS            00 (0) 'MS-DOS'\n+0C6D0E General Purpose Flag  0000 (0)\n+0C6D10 Compression Method    0000 (0) 'Stored'\n+0C6D12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C6D16 CRC                   00000000 (0)\n+0C6D1A Compressed Size       00000000 (0)\n+0C6D1E Uncompressed Size     00000000 (0)\n+0C6D22 Filename Length       002F (47)\n+0C6D24 Extra Length          0009 (9)\n+0C6D26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC6D26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C6D55 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C6D57   Length              0005 (5)\n+0C6D59   Flags               01 (1) 'Modification'\n+0C6D5A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C6D5E LOCAL HEADER #314     04034B50 (67324752)\n+0C6D62 Extract Zip Spec      14 (20) '2.0'\n+0C6D63 Extract OS            00 (0) 'MS-DOS'\n+0C6D64 General Purpose Flag  0000 (0)\n+0C6D66 Compression Method    0000 (0) 'Stored'\n+0C6D68 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C6D6C CRC                   00000000 (0)\n+0C6D70 Compressed Size       00000000 (0)\n+0C6D74 Uncompressed Size     00000000 (0)\n+0C6D78 Filename Length       005F (95)\n+0C6D7A Extra Length          0009 (9)\n+0C6D7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC6D7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C6DDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C6DDD   Length              0005 (5)\n+0C6DDF   Flags               01 (1) 'Modification'\n+0C6DE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C6DE4 LOCAL HEADER #315     04034B50 (67324752)\n+0C6DE8 Extract Zip Spec      14 (20) '2.0'\n+0C6DE9 Extract OS            00 (0) 'MS-DOS'\n+0C6DEA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C6DEC Compression Method    0000 (0) 'Stored'\n+0C6DEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C6DF2 CRC                   00000000 (0)\n+0C6DF6 Compressed Size       00000000 (0)\n+0C6DFA Uncompressed Size     00000000 (0)\n+0C6DFE Filename Length       0075 (117)\n+0C6E00 Extra Length          0009 (9)\n+0C6E02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC6E02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C6E77 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C6E79   Length              0005 (5)\n+0C6E7B   Flags               01 (1) 'Modification'\n+0C6E7C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C6E80 PAYLOAD\n+\n+0CF7C4 DATA DESCRIPTOR       08074B50 (134695760)\n+0CF7C8 CRC                   6B96B8CE (1805039822)\n+0CF7CC Compressed Size       00008944 (35140)\n+0CF7D0 Uncompressed Size     00008944 (35140)\n+\n+0CF7D4 LOCAL HEADER #316     04034B50 (67324752)\n+0CF7D8 Extract Zip Spec      14 (20) '2.0'\n+0CF7D9 Extract OS            00 (0) 'MS-DOS'\n+0CF7DA General Purpose Flag  0000 (0)\n+0CF7DC Compression Method    0000 (0) 'Stored'\n+0CF7DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CF7E2 CRC                   00000000 (0)\n+0CF7E6 Compressed Size       00000000 (0)\n+0CF7EA Uncompressed Size     00000000 (0)\n+0CF7EE Filename Length       0066 (102)\n+0CF7F0 Extra Length          0009 (9)\n+0CF7F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCF7F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CF858 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CF85A   Length              0005 (5)\n+0CF85C   Flags               01 (1) 'Modification'\n+0CF85D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CF861 LOCAL HEADER #317     04034B50 (67324752)\n+0CF865 Extract Zip Spec      14 (20) '2.0'\n+0CF866 Extract OS            00 (0) 'MS-DOS'\n+0CF867 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CF869 Compression Method    0000 (0) 'Stored'\n+0CF86B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CF86F CRC                   00000000 (0)\n+0CF873 Compressed Size       00000000 (0)\n+0CF877 Uncompressed Size     00000000 (0)\n+0CF87B Filename Length       007C (124)\n+0CF87D Extra Length          0009 (9)\n+0CF87F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCF87F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CF8FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CF8FD   Length              0005 (5)\n+0CF8FF   Flags               01 (1) 'Modification'\n+0CF900   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CF904 PAYLOAD\n+\n+0D153E DATA DESCRIPTOR       08074B50 (134695760)\n+0D1542 CRC                   DB2A8543 (3676996931)\n+0D1546 Compressed Size       00001C3A (7226)\n+0D154A Uncompressed Size     00001C3A (7226)\n+\n+0D154E LOCAL HEADER #318     04034B50 (67324752)\n+0D1552 Extract Zip Spec      14 (20) '2.0'\n+0D1553 Extract OS            00 (0) 'MS-DOS'\n+0D1554 General Purpose Flag  0000 (0)\n+0D1556 Compression Method    0000 (0) 'Stored'\n+0D1558 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D155C CRC                   00000000 (0)\n+0D1560 Compressed Size       00000000 (0)\n+0D1564 Uncompressed Size     00000000 (0)\n+0D1568 Filename Length       0069 (105)\n+0D156A Extra Length          0009 (9)\n+0D156C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD156C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D15D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D15D7   Length              0005 (5)\n+0D15D9   Flags               01 (1) 'Modification'\n+0D15DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D15DE LOCAL HEADER #319     04034B50 (67324752)\n+0D15E2 Extract Zip Spec      14 (20) '2.0'\n+0D15E3 Extract OS            00 (0) 'MS-DOS'\n+0D15E4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D15E6 Compression Method    0000 (0) 'Stored'\n+0D15E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D15EC CRC                   00000000 (0)\n+0D15F0 Compressed Size       00000000 (0)\n+0D15F4 Uncompressed Size     00000000 (0)\n+0D15F8 Filename Length       007F (127)\n+0D15FA Extra Length          0009 (9)\n+0D15FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD15FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D167B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D167D   Length              0005 (5)\n+0D167F   Flags               01 (1) 'Modification'\n+0D1680   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D1684 PAYLOAD\n+\n+0D2BD6 DATA DESCRIPTOR       08074B50 (134695760)\n+0D2BDA CRC                   FF5BC4DC (4284204252)\n+0D2BDE Compressed Size       00001552 (5458)\n+0D2BE2 Uncompressed Size     00001552 (5458)\n+\n+0D2BE6 LOCAL HEADER #320     04034B50 (67324752)\n+0D2BEA Extract Zip Spec      14 (20) '2.0'\n+0D2BEB Extract OS            00 (0) 'MS-DOS'\n+0D2BEC General Purpose Flag  0000 (0)\n+0D2BEE Compression Method    0000 (0) 'Stored'\n+0D2BF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D2BF4 CRC                   00000000 (0)\n+0D2BF8 Compressed Size       00000000 (0)\n+0D2BFC Uncompressed Size     00000000 (0)\n+0D2C00 Filename Length       0069 (105)\n+0D2C02 Extra Length          0009 (9)\n+0D2C04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD2C04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D2C6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D2C6F   Length              0005 (5)\n+0D2C71   Flags               01 (1) 'Modification'\n+0D2C72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D2C76 LOCAL HEADER #321     04034B50 (67324752)\n+0D2C7A Extract Zip Spec      14 (20) '2.0'\n+0D2C7B Extract OS            00 (0) 'MS-DOS'\n+0D2C7C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D2C7E Compression Method    0000 (0) 'Stored'\n+0D2C80 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D2C84 CRC                   00000000 (0)\n+0D2C88 Compressed Size       00000000 (0)\n+0D2C8C Uncompressed Size     00000000 (0)\n+0D2C90 Filename Length       007F (127)\n+0D2C92 Extra Length          0009 (9)\n+0D2C94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD2C94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D2D13 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D2D15   Length              0005 (5)\n+0D2D17   Flags               01 (1) 'Modification'\n+0D2D18   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D2D1C PAYLOAD\n+\n+0D6948 DATA DESCRIPTOR       08074B50 (134695760)\n+0D694C CRC                   D6140D51 (3591638353)\n+0D6950 Compressed Size       00003C2C (15404)\n+0D6954 Uncompressed Size     00003C2C (15404)\n+\n+0D6958 LOCAL HEADER #322     04034B50 (67324752)\n+0D695C Extract Zip Spec      14 (20) '2.0'\n+0D695D Extract OS            00 (0) 'MS-DOS'\n+0D695E General Purpose Flag  0000 (0)\n+0D6960 Compression Method    0000 (0) 'Stored'\n+0D6962 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D6966 CRC                   00000000 (0)\n+0D696A Compressed Size       00000000 (0)\n+0D696E Uncompressed Size     00000000 (0)\n+0D6972 Filename Length       0068 (104)\n+0D6974 Extra Length          0009 (9)\n+0D6976 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD6976: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D69DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D69E0   Length              0005 (5)\n+0D69E2   Flags               01 (1) 'Modification'\n+0D69E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D69E7 LOCAL HEADER #323     04034B50 (67324752)\n+0D69EB Extract Zip Spec      14 (20) '2.0'\n+0D69EC Extract OS            00 (0) 'MS-DOS'\n+0D69ED General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D69EF Compression Method    0000 (0) 'Stored'\n+0D69F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D69F5 CRC                   00000000 (0)\n+0D69F9 Compressed Size       00000000 (0)\n+0D69FD Uncompressed Size     00000000 (0)\n+0D6A01 Filename Length       007E (126)\n+0D6A03 Extra Length          0009 (9)\n+0D6A05 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD6A05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D6A83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D6A85   Length              0005 (5)\n+0D6A87   Flags               01 (1) 'Modification'\n+0D6A88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D6A8C PAYLOAD\n+\n+0D8BEE DATA DESCRIPTOR       08074B50 (134695760)\n+0D8BF2 CRC                   86CE2079 (2261655673)\n+0D8BF6 Compressed Size       00002162 (8546)\n+0D8BFA Uncompressed Size     00002162 (8546)\n+\n+0D8BFE LOCAL HEADER #324     04034B50 (67324752)\n+0D8C02 Extract Zip Spec      14 (20) '2.0'\n+0D8C03 Extract OS            00 (0) 'MS-DOS'\n+0D8C04 General Purpose Flag  0000 (0)\n+0D8C06 Compression Method    0000 (0) 'Stored'\n+0D8C08 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D8C0C CRC                   00000000 (0)\n+0D8C10 Compressed Size       00000000 (0)\n+0D8C14 Uncompressed Size     00000000 (0)\n+0D8C18 Filename Length       0026 (38)\n+0D8C1A Extra Length          0009 (9)\n+0D8C1C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD8C1C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D8C42 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D8C44   Length              0005 (5)\n+0D8C46   Flags               01 (1) 'Modification'\n+0D8C47   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D8C4B LOCAL HEADER #325     04034B50 (67324752)\n+0D8C4F Extract Zip Spec      14 (20) '2.0'\n+0D8C50 Extract OS            00 (0) 'MS-DOS'\n+0D8C51 General Purpose Flag  0000 (0)\n+0D8C53 Compression Method    0000 (0) 'Stored'\n+0D8C55 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D8C59 CRC                   00000000 (0)\n+0D8C5D Compressed Size       00000000 (0)\n+0D8C61 Uncompressed Size     00000000 (0)\n+0D8C65 Filename Length       002D (45)\n+0D8C67 Extra Length          0009 (9)\n+0D8C69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD8C69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D8C96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D8C98   Length              0005 (5)\n+0D8C9A   Flags               01 (1) 'Modification'\n+0D8C9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D8C9F LOCAL HEADER #326     04034B50 (67324752)\n+0D8CA3 Extract Zip Spec      14 (20) '2.0'\n+0D8CA4 Extract OS            00 (0) 'MS-DOS'\n+0D8CA5 General Purpose Flag  0000 (0)\n+0D8CA7 Compression Method    0000 (0) 'Stored'\n+0D8CA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D8CAD CRC                   00000000 (0)\n+0D8CB1 Compressed Size       00000000 (0)\n+0D8CB5 Uncompressed Size     00000000 (0)\n+0D8CB9 Filename Length       005B (91)\n+0D8CBB Extra Length          0009 (9)\n+0D8CBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD8CBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D8D18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D8D1A   Length              0005 (5)\n+0D8D1C   Flags               01 (1) 'Modification'\n+0D8D1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D8D21 LOCAL HEADER #327     04034B50 (67324752)\n+0D8D25 Extract Zip Spec      14 (20) '2.0'\n+0D8D26 Extract OS            00 (0) 'MS-DOS'\n+0D8D27 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D8D29 Compression Method    0000 (0) 'Stored'\n+0D8D2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D8D2F CRC                   00000000 (0)\n+0D8D33 Compressed Size       00000000 (0)\n+0D8D37 Uncompressed Size     00000000 (0)\n+0D8D3B Filename Length       0071 (113)\n+0D8D3D Extra Length          0009 (9)\n+0D8D3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD8D3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D8DB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D8DB2   Length              0005 (5)\n+0D8DB4   Flags               01 (1) 'Modification'\n+0D8DB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D8DB9 PAYLOAD\n+\n+0D9814 DATA DESCRIPTOR       08074B50 (134695760)\n+0D9818 CRC                   B12610E6 (2972061926)\n+0D981C Compressed Size       00000A5B (2651)\n+0D9820 Uncompressed Size     00000A5B (2651)\n+\n+0D9824 LOCAL HEADER #328     04034B50 (67324752)\n+0D9828 Extract Zip Spec      14 (20) '2.0'\n+0D9829 Extract OS            00 (0) 'MS-DOS'\n+0D982A General Purpose Flag  0000 (0)\n+0D982C Compression Method    0000 (0) 'Stored'\n+0D982E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D9832 CRC                   00000000 (0)\n+0D9836 Compressed Size       00000000 (0)\n+0D983A Uncompressed Size     00000000 (0)\n+0D983E Filename Length       0035 (53)\n+0D9840 Extra Length          0009 (9)\n+0D9842 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD9842: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D9877 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D9879   Length              0005 (5)\n+0D987B   Flags               01 (1) 'Modification'\n+0D987C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D9880 LOCAL HEADER #329     04034B50 (67324752)\n+0D9884 Extract Zip Spec      14 (20) '2.0'\n+0D9885 Extract OS            00 (0) 'MS-DOS'\n+0D9886 General Purpose Flag  0000 (0)\n+0D9888 Compression Method    0000 (0) 'Stored'\n+0D988A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D988E CRC                   00000000 (0)\n+0D9892 Compressed Size       00000000 (0)\n+0D9896 Uncompressed Size     00000000 (0)\n+0D989A Filename Length       003C (60)\n+0D989C Extra Length          0009 (9)\n+0D989E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD989E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D98DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D98DC   Length              0005 (5)\n+0D98DE   Flags               01 (1) 'Modification'\n+0D98DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D98E3 LOCAL HEADER #330     04034B50 (67324752)\n+0D98E7 Extract Zip Spec      14 (20) '2.0'\n+0D98E8 Extract OS            00 (0) 'MS-DOS'\n+0D98E9 General Purpose Flag  0000 (0)\n+0D98EB Compression Method    0000 (0) 'Stored'\n+0D98ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D98F1 CRC                   00000000 (0)\n+0D98F5 Compressed Size       00000000 (0)\n+0D98F9 Uncompressed Size     00000000 (0)\n+0D98FD Filename Length       0076 (118)\n+0D98FF Extra Length          0009 (9)\n+0D9901 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD9901: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D9977 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D9979   Length              0005 (5)\n+0D997B   Flags               01 (1) 'Modification'\n+0D997C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D9980 LOCAL HEADER #331     04034B50 (67324752)\n+0D9984 Extract Zip Spec      14 (20) '2.0'\n+0D9985 Extract OS            00 (0) 'MS-DOS'\n+0D9986 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D9988 Compression Method    0000 (0) 'Stored'\n+0D998A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D998E CRC                   00000000 (0)\n+0D9992 Compressed Size       00000000 (0)\n+0D9996 Uncompressed Size     00000000 (0)\n+0D999A Filename Length       008C (140)\n+0D999C Extra Length          0009 (9)\n+0D999E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXX'\n #\n-# WARNING: Offset 0xD5FD6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD999E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0D6062 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D6064   Length              0005 (5)\n-0D6066   Flags               01 (1) 'Modification'\n-0D6067   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D606B PAYLOAD\n-\n-0D6B8D DATA DESCRIPTOR       08074B50 (134695760)\n-0D6B91 CRC                   041CE92B (69003563)\n-0D6B95 Compressed Size       00000B22 (2850)\n-0D6B99 Uncompressed Size     00000B22 (2850)\n-\n-0D6B9D LOCAL HEADER #332     04034B50 (67324752)\n-0D6BA1 Extract Zip Spec      14 (20) '2.0'\n-0D6BA2 Extract OS            00 (0) 'MS-DOS'\n-0D6BA3 General Purpose Flag  0000 (0)\n-0D6BA5 Compression Method    0000 (0) 'Stored'\n-0D6BA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D6BAB CRC                   00000000 (0)\n-0D6BAF Compressed Size       00000000 (0)\n-0D6BB3 Uncompressed Size     00000000 (0)\n-0D6BB7 Filename Length       0075 (117)\n-0D6BB9 Extra Length          0009 (9)\n-0D6BBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD6BBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D6C30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D6C32   Length              0005 (5)\n-0D6C34   Flags               01 (1) 'Modification'\n-0D6C35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D6C39 LOCAL HEADER #333     04034B50 (67324752)\n-0D6C3D Extract Zip Spec      14 (20) '2.0'\n-0D6C3E Extract OS            00 (0) 'MS-DOS'\n-0D6C3F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D6C41 Compression Method    0000 (0) 'Stored'\n-0D6C43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D6C47 CRC                   00000000 (0)\n-0D6C4B Compressed Size       00000000 (0)\n-0D6C4F Uncompressed Size     00000000 (0)\n-0D6C53 Filename Length       008B (139)\n-0D6C55 Extra Length          0009 (9)\n-0D6C57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0D9A2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D9A2C   Length              0005 (5)\n+0D9A2E   Flags               01 (1) 'Modification'\n+0D9A2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D9A33 PAYLOAD\n+\n+0DA555 DATA DESCRIPTOR       08074B50 (134695760)\n+0DA559 CRC                   041CE92B (69003563)\n+0DA55D Compressed Size       00000B22 (2850)\n+0DA561 Uncompressed Size     00000B22 (2850)\n+\n+0DA565 LOCAL HEADER #332     04034B50 (67324752)\n+0DA569 Extract Zip Spec      14 (20) '2.0'\n+0DA56A Extract OS            00 (0) 'MS-DOS'\n+0DA56B General Purpose Flag  0000 (0)\n+0DA56D Compression Method    0000 (0) 'Stored'\n+0DA56F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DA573 CRC                   00000000 (0)\n+0DA577 Compressed Size       00000000 (0)\n+0DA57B Uncompressed Size     00000000 (0)\n+0DA57F Filename Length       0075 (117)\n+0DA581 Extra Length          0009 (9)\n+0DA583 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDA583: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DA5F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DA5FA   Length              0005 (5)\n+0DA5FC   Flags               01 (1) 'Modification'\n+0DA5FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DA601 LOCAL HEADER #333     04034B50 (67324752)\n+0DA605 Extract Zip Spec      14 (20) '2.0'\n+0DA606 Extract OS            00 (0) 'MS-DOS'\n+0DA607 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DA609 Compression Method    0000 (0) 'Stored'\n+0DA60B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DA60F CRC                   00000000 (0)\n+0DA613 Compressed Size       00000000 (0)\n+0DA617 Uncompressed Size     00000000 (0)\n+0DA61B Filename Length       008B (139)\n+0DA61D Extra Length          0009 (9)\n+0DA61F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXX'\n #\n-# WARNING: Offset 0xD6C57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xDA61F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0D6CE2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D6CE4   Length              0005 (5)\n-0D6CE6   Flags               01 (1) 'Modification'\n-0D6CE7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D6CEB PAYLOAD\n-\n-0D83CF DATA DESCRIPTOR       08074B50 (134695760)\n-0D83D3 CRC                   16A4BA93 (379894419)\n-0D83D7 Compressed Size       000016E4 (5860)\n-0D83DB Uncompressed Size     000016E4 (5860)\n-\n-0D83DF LOCAL HEADER #334     04034B50 (67324752)\n-0D83E3 Extract Zip Spec      14 (20) '2.0'\n-0D83E4 Extract OS            00 (0) 'MS-DOS'\n-0D83E5 General Purpose Flag  0000 (0)\n-0D83E7 Compression Method    0000 (0) 'Stored'\n-0D83E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D83ED CRC                   00000000 (0)\n-0D83F1 Compressed Size       00000000 (0)\n-0D83F5 Uncompressed Size     00000000 (0)\n-0D83F9 Filename Length       0078 (120)\n-0D83FB Extra Length          0009 (9)\n-0D83FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD83FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D8475 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D8477   Length              0005 (5)\n-0D8479   Flags               01 (1) 'Modification'\n-0D847A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D847E LOCAL HEADER #335     04034B50 (67324752)\n-0D8482 Extract Zip Spec      14 (20) '2.0'\n-0D8483 Extract OS            00 (0) 'MS-DOS'\n-0D8484 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D8486 Compression Method    0000 (0) 'Stored'\n-0D8488 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D848C CRC                   00000000 (0)\n-0D8490 Compressed Size       00000000 (0)\n-0D8494 Uncompressed Size     00000000 (0)\n-0D8498 Filename Length       008E (142)\n-0D849A Extra Length          0009 (9)\n-0D849C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0DA6AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DA6AC   Length              0005 (5)\n+0DA6AE   Flags               01 (1) 'Modification'\n+0DA6AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DA6B3 PAYLOAD\n+\n+0DBD97 DATA DESCRIPTOR       08074B50 (134695760)\n+0DBD9B CRC                   16A4BA93 (379894419)\n+0DBD9F Compressed Size       000016E4 (5860)\n+0DBDA3 Uncompressed Size     000016E4 (5860)\n+\n+0DBDA7 LOCAL HEADER #334     04034B50 (67324752)\n+0DBDAB Extract Zip Spec      14 (20) '2.0'\n+0DBDAC Extract OS            00 (0) 'MS-DOS'\n+0DBDAD General Purpose Flag  0000 (0)\n+0DBDAF Compression Method    0000 (0) 'Stored'\n+0DBDB1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DBDB5 CRC                   00000000 (0)\n+0DBDB9 Compressed Size       00000000 (0)\n+0DBDBD Uncompressed Size     00000000 (0)\n+0DBDC1 Filename Length       0078 (120)\n+0DBDC3 Extra Length          0009 (9)\n+0DBDC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDBDC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DBE3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DBE3F   Length              0005 (5)\n+0DBE41   Flags               01 (1) 'Modification'\n+0DBE42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DBE46 LOCAL HEADER #335     04034B50 (67324752)\n+0DBE4A Extract Zip Spec      14 (20) '2.0'\n+0DBE4B Extract OS            00 (0) 'MS-DOS'\n+0DBE4C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DBE4E Compression Method    0000 (0) 'Stored'\n+0DBE50 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DBE54 CRC                   00000000 (0)\n+0DBE58 Compressed Size       00000000 (0)\n+0DBE5C Uncompressed Size     00000000 (0)\n+0DBE60 Filename Length       008E (142)\n+0DBE62 Extra Length          0009 (9)\n+0DBE64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0xD849C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xDBE64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0D852A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D852C   Length              0005 (5)\n-0D852E   Flags               01 (1) 'Modification'\n-0D852F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D8533 PAYLOAD\n-\n-0D959B DATA DESCRIPTOR       08074B50 (134695760)\n-0D959F CRC                   390AB403 (957002755)\n-0D95A3 Compressed Size       00001068 (4200)\n-0D95A7 Uncompressed Size     00001068 (4200)\n-\n-0D95AB LOCAL HEADER #336     04034B50 (67324752)\n-0D95AF Extract Zip Spec      14 (20) '2.0'\n-0D95B0 Extract OS            00 (0) 'MS-DOS'\n-0D95B1 General Purpose Flag  0000 (0)\n-0D95B3 Compression Method    0000 (0) 'Stored'\n-0D95B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D95B9 CRC                   00000000 (0)\n-0D95BD Compressed Size       00000000 (0)\n-0D95C1 Uncompressed Size     00000000 (0)\n-0D95C5 Filename Length       0074 (116)\n-0D95C7 Extra Length          0009 (9)\n-0D95C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD95C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D963D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D963F   Length              0005 (5)\n-0D9641   Flags               01 (1) 'Modification'\n-0D9642   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D9646 LOCAL HEADER #337     04034B50 (67324752)\n-0D964A Extract Zip Spec      14 (20) '2.0'\n-0D964B Extract OS            00 (0) 'MS-DOS'\n-0D964C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D964E Compression Method    0000 (0) 'Stored'\n-0D9650 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D9654 CRC                   00000000 (0)\n-0D9658 Compressed Size       00000000 (0)\n-0D965C Uncompressed Size     00000000 (0)\n-0D9660 Filename Length       008A (138)\n-0D9662 Extra Length          0009 (9)\n-0D9664 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0DBEF2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DBEF4   Length              0005 (5)\n+0DBEF6   Flags               01 (1) 'Modification'\n+0DBEF7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DBEFB PAYLOAD\n+\n+0DCF63 DATA DESCRIPTOR       08074B50 (134695760)\n+0DCF67 CRC                   390AB403 (957002755)\n+0DCF6B Compressed Size       00001068 (4200)\n+0DCF6F Uncompressed Size     00001068 (4200)\n+\n+0DCF73 LOCAL HEADER #336     04034B50 (67324752)\n+0DCF77 Extract Zip Spec      14 (20) '2.0'\n+0DCF78 Extract OS            00 (0) 'MS-DOS'\n+0DCF79 General Purpose Flag  0000 (0)\n+0DCF7B Compression Method    0000 (0) 'Stored'\n+0DCF7D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DCF81 CRC                   00000000 (0)\n+0DCF85 Compressed Size       00000000 (0)\n+0DCF89 Uncompressed Size     00000000 (0)\n+0DCF8D Filename Length       0074 (116)\n+0DCF8F Extra Length          0009 (9)\n+0DCF91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDCF91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DD005 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DD007   Length              0005 (5)\n+0DD009   Flags               01 (1) 'Modification'\n+0DD00A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DD00E LOCAL HEADER #337     04034B50 (67324752)\n+0DD012 Extract Zip Spec      14 (20) '2.0'\n+0DD013 Extract OS            00 (0) 'MS-DOS'\n+0DD014 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DD016 Compression Method    0000 (0) 'Stored'\n+0DD018 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DD01C CRC                   00000000 (0)\n+0DD020 Compressed Size       00000000 (0)\n+0DD024 Uncompressed Size     00000000 (0)\n+0DD028 Filename Length       008A (138)\n+0DD02A Extra Length          0009 (9)\n+0DD02C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXX'\n #\n-# WARNING: Offset 0xD9664: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xDD02C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0D96EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D96F0   Length              0005 (5)\n-0D96F2   Flags               01 (1) 'Modification'\n-0D96F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D96F7 PAYLOAD\n-\n-0DADA1 DATA DESCRIPTOR       08074B50 (134695760)\n-0DADA5 CRC                   3DE98548 (1038714184)\n-0DADA9 Compressed Size       000016AA (5802)\n-0DADAD Uncompressed Size     000016AA (5802)\n-\n-0DADB1 LOCAL HEADER #338     04034B50 (67324752)\n-0DADB5 Extract Zip Spec      14 (20) '2.0'\n-0DADB6 Extract OS            00 (0) 'MS-DOS'\n-0DADB7 General Purpose Flag  0000 (0)\n-0DADB9 Compression Method    0000 (0) 'Stored'\n-0DADBB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DADBF CRC                   00000000 (0)\n-0DADC3 Compressed Size       00000000 (0)\n-0DADC7 Uncompressed Size     00000000 (0)\n-0DADCB Filename Length       0024 (36)\n-0DADCD Extra Length          0009 (9)\n-0DADCF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDADCF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DADF3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DADF5   Length              0005 (5)\n-0DADF7   Flags               01 (1) 'Modification'\n-0DADF8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DADFC LOCAL HEADER #339     04034B50 (67324752)\n-0DAE00 Extract Zip Spec      14 (20) '2.0'\n-0DAE01 Extract OS            00 (0) 'MS-DOS'\n-0DAE02 General Purpose Flag  0000 (0)\n-0DAE04 Compression Method    0000 (0) 'Stored'\n-0DAE06 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DAE0A CRC                   00000000 (0)\n-0DAE0E Compressed Size       00000000 (0)\n-0DAE12 Uncompressed Size     00000000 (0)\n-0DAE16 Filename Length       002B (43)\n-0DAE18 Extra Length          0009 (9)\n-0DAE1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDAE1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DAE45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DAE47   Length              0005 (5)\n-0DAE49   Flags               01 (1) 'Modification'\n-0DAE4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DAE4E LOCAL HEADER #340     04034B50 (67324752)\n-0DAE52 Extract Zip Spec      14 (20) '2.0'\n-0DAE53 Extract OS            00 (0) 'MS-DOS'\n-0DAE54 General Purpose Flag  0000 (0)\n-0DAE56 Compression Method    0000 (0) 'Stored'\n-0DAE58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DAE5C CRC                   00000000 (0)\n-0DAE60 Compressed Size       00000000 (0)\n-0DAE64 Uncompressed Size     00000000 (0)\n-0DAE68 Filename Length       0056 (86)\n-0DAE6A Extra Length          0009 (9)\n-0DAE6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDAE6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DAEC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DAEC4   Length              0005 (5)\n-0DAEC6   Flags               01 (1) 'Modification'\n-0DAEC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DAECB LOCAL HEADER #341     04034B50 (67324752)\n-0DAECF Extract Zip Spec      14 (20) '2.0'\n-0DAED0 Extract OS            00 (0) 'MS-DOS'\n-0DAED1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DAED3 Compression Method    0000 (0) 'Stored'\n-0DAED5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DAED9 CRC                   00000000 (0)\n-0DAEDD Compressed Size       00000000 (0)\n-0DAEE1 Uncompressed Size     00000000 (0)\n-0DAEE5 Filename Length       006C (108)\n-0DAEE7 Extra Length          0009 (9)\n-0DAEE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDAEE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DAF55 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DAF57   Length              0005 (5)\n-0DAF59   Flags               01 (1) 'Modification'\n-0DAF5A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DAF5E PAYLOAD\n-\n-0DC4F3 DATA DESCRIPTOR       08074B50 (134695760)\n-0DC4F7 CRC                   F32265E7 (4079117799)\n-0DC4FB Compressed Size       00001595 (5525)\n-0DC4FF Uncompressed Size     00001595 (5525)\n-\n-0DC503 LOCAL HEADER #342     04034B50 (67324752)\n-0DC507 Extract Zip Spec      14 (20) '2.0'\n-0DC508 Extract OS            00 (0) 'MS-DOS'\n-0DC509 General Purpose Flag  0000 (0)\n-0DC50B Compression Method    0000 (0) 'Stored'\n-0DC50D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DC511 CRC                   00000000 (0)\n-0DC515 Compressed Size       00000000 (0)\n-0DC519 Uncompressed Size     00000000 (0)\n-0DC51D Filename Length       0059 (89)\n-0DC51F Extra Length          0009 (9)\n-0DC521 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDC521: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DC57A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DC57C   Length              0005 (5)\n-0DC57E   Flags               01 (1) 'Modification'\n-0DC57F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DC583 LOCAL HEADER #343     04034B50 (67324752)\n-0DC587 Extract Zip Spec      14 (20) '2.0'\n-0DC588 Extract OS            00 (0) 'MS-DOS'\n-0DC589 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DC58B Compression Method    0000 (0) 'Stored'\n-0DC58D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DC591 CRC                   00000000 (0)\n-0DC595 Compressed Size       00000000 (0)\n-0DC599 Uncompressed Size     00000000 (0)\n-0DC59D Filename Length       006F (111)\n-0DC59F Extra Length          0009 (9)\n-0DC5A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDC5A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DC610 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DC612   Length              0005 (5)\n-0DC614   Flags               01 (1) 'Modification'\n-0DC615   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DC619 PAYLOAD\n-\n-0DD9B2 DATA DESCRIPTOR       08074B50 (134695760)\n-0DD9B6 CRC                   33231FD5 (857939925)\n-0DD9BA Compressed Size       00001399 (5017)\n-0DD9BE Uncompressed Size     00001399 (5017)\n-\n-0DD9C2 LOCAL HEADER #344     04034B50 (67324752)\n-0DD9C6 Extract Zip Spec      14 (20) '2.0'\n-0DD9C7 Extract OS            00 (0) 'MS-DOS'\n-0DD9C8 General Purpose Flag  0000 (0)\n-0DD9CA Compression Method    0000 (0) 'Stored'\n-0DD9CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DD9D0 CRC                   00000000 (0)\n-0DD9D4 Compressed Size       00000000 (0)\n-0DD9D8 Uncompressed Size     00000000 (0)\n-0DD9DC Filename Length       0055 (85)\n-0DD9DE Extra Length          0009 (9)\n-0DD9E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDD9E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DDA35 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DDA37   Length              0005 (5)\n-0DDA39   Flags               01 (1) 'Modification'\n-0DDA3A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DDA3E LOCAL HEADER #345     04034B50 (67324752)\n-0DDA42 Extract Zip Spec      14 (20) '2.0'\n-0DDA43 Extract OS            00 (0) 'MS-DOS'\n-0DDA44 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DDA46 Compression Method    0000 (0) 'Stored'\n-0DDA48 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DDA4C CRC                   00000000 (0)\n-0DDA50 Compressed Size       00000000 (0)\n-0DDA54 Uncompressed Size     00000000 (0)\n-0DDA58 Filename Length       006B (107)\n-0DDA5A Extra Length          0009 (9)\n-0DDA5C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDDA5C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DDAC7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DDAC9   Length              0005 (5)\n-0DDACB   Flags               01 (1) 'Modification'\n-0DDACC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DDAD0 PAYLOAD\n-\n-0DE5CB DATA DESCRIPTOR       08074B50 (134695760)\n-0DE5CF CRC                   62A57B9F (1655012255)\n-0DE5D3 Compressed Size       00000AFB (2811)\n-0DE5D7 Uncompressed Size     00000AFB (2811)\n-\n-0DE5DB LOCAL HEADER #346     04034B50 (67324752)\n-0DE5DF Extract Zip Spec      14 (20) '2.0'\n-0DE5E0 Extract OS            00 (0) 'MS-DOS'\n-0DE5E1 General Purpose Flag  0000 (0)\n-0DE5E3 Compression Method    0000 (0) 'Stored'\n-0DE5E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DE5E9 CRC                   00000000 (0)\n-0DE5ED Compressed Size       00000000 (0)\n-0DE5F1 Uncompressed Size     00000000 (0)\n-0DE5F5 Filename Length       0023 (35)\n-0DE5F7 Extra Length          0009 (9)\n-0DE5F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDE5F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DE61C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DE61E   Length              0005 (5)\n-0DE620   Flags               01 (1) 'Modification'\n-0DE621   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DE625 LOCAL HEADER #347     04034B50 (67324752)\n-0DE629 Extract Zip Spec      14 (20) '2.0'\n-0DE62A Extract OS            00 (0) 'MS-DOS'\n-0DE62B General Purpose Flag  0000 (0)\n-0DE62D Compression Method    0000 (0) 'Stored'\n-0DE62F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DE633 CRC                   00000000 (0)\n-0DE637 Compressed Size       00000000 (0)\n-0DE63B Uncompressed Size     00000000 (0)\n-0DE63F Filename Length       002A (42)\n-0DE641 Extra Length          0009 (9)\n-0DE643 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDE643: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DE66D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DE66F   Length              0005 (5)\n-0DE671   Flags               01 (1) 'Modification'\n-0DE672   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DE676 LOCAL HEADER #348     04034B50 (67324752)\n-0DE67A Extract Zip Spec      14 (20) '2.0'\n-0DE67B Extract OS            00 (0) 'MS-DOS'\n-0DE67C General Purpose Flag  0000 (0)\n-0DE67E Compression Method    0000 (0) 'Stored'\n-0DE680 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DE684 CRC                   00000000 (0)\n-0DE688 Compressed Size       00000000 (0)\n-0DE68C Uncompressed Size     00000000 (0)\n-0DE690 Filename Length       0052 (82)\n-0DE692 Extra Length          0009 (9)\n-0DE694 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDE694: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DE6E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DE6E8   Length              0005 (5)\n-0DE6EA   Flags               01 (1) 'Modification'\n-0DE6EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DE6EF LOCAL HEADER #349     04034B50 (67324752)\n-0DE6F3 Extract Zip Spec      14 (20) '2.0'\n-0DE6F4 Extract OS            00 (0) 'MS-DOS'\n-0DE6F5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DE6F7 Compression Method    0000 (0) 'Stored'\n-0DE6F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DE6FD CRC                   00000000 (0)\n-0DE701 Compressed Size       00000000 (0)\n-0DE705 Uncompressed Size     00000000 (0)\n-0DE709 Filename Length       0068 (104)\n-0DE70B Extra Length          0009 (9)\n-0DE70D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDE70D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DE775 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DE777   Length              0005 (5)\n-0DE779   Flags               01 (1) 'Modification'\n-0DE77A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DE77E PAYLOAD\n-\n-0DF476 DATA DESCRIPTOR       08074B50 (134695760)\n-0DF47A CRC                   63C353AF (1673745327)\n-0DF47E Compressed Size       00000CF8 (3320)\n-0DF482 Uncompressed Size     00000CF8 (3320)\n-\n-0DF486 LOCAL HEADER #350     04034B50 (67324752)\n-0DF48A Extract Zip Spec      14 (20) '2.0'\n-0DF48B Extract OS            00 (0) 'MS-DOS'\n-0DF48C General Purpose Flag  0000 (0)\n-0DF48E Compression Method    0000 (0) 'Stored'\n-0DF490 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DF494 CRC                   00000000 (0)\n-0DF498 Compressed Size       00000000 (0)\n-0DF49C Uncompressed Size     00000000 (0)\n-0DF4A0 Filename Length       0059 (89)\n-0DF4A2 Extra Length          0009 (9)\n-0DF4A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDF4A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DF4FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DF4FF   Length              0005 (5)\n-0DF501   Flags               01 (1) 'Modification'\n-0DF502   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DF506 LOCAL HEADER #351     04034B50 (67324752)\n-0DF50A Extract Zip Spec      14 (20) '2.0'\n-0DF50B Extract OS            00 (0) 'MS-DOS'\n-0DF50C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DF50E Compression Method    0000 (0) 'Stored'\n-0DF510 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DF514 CRC                   00000000 (0)\n-0DF518 Compressed Size       00000000 (0)\n-0DF51C Uncompressed Size     00000000 (0)\n-0DF520 Filename Length       006F (111)\n-0DF522 Extra Length          0009 (9)\n-0DF524 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDF524: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DF593 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DF595   Length              0005 (5)\n-0DF597   Flags               01 (1) 'Modification'\n-0DF598   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DF59C PAYLOAD\n-\n-0DFCBF DATA DESCRIPTOR       08074B50 (134695760)\n-0DFCC3 CRC                   C64481A5 (3326378405)\n-0DFCC7 Compressed Size       00000723 (1827)\n-0DFCCB Uncompressed Size     00000723 (1827)\n-\n-0DFCCF LOCAL HEADER #352     04034B50 (67324752)\n-0DFCD3 Extract Zip Spec      14 (20) '2.0'\n-0DFCD4 Extract OS            00 (0) 'MS-DOS'\n-0DFCD5 General Purpose Flag  0000 (0)\n-0DFCD7 Compression Method    0000 (0) 'Stored'\n-0DFCD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DFCDD CRC                   00000000 (0)\n-0DFCE1 Compressed Size       00000000 (0)\n-0DFCE5 Uncompressed Size     00000000 (0)\n-0DFCE9 Filename Length       0057 (87)\n-0DFCEB Extra Length          0009 (9)\n-0DFCED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDFCED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DFD44 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DFD46   Length              0005 (5)\n-0DFD48   Flags               01 (1) 'Modification'\n-0DFD49   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DFD4D LOCAL HEADER #353     04034B50 (67324752)\n-0DFD51 Extract Zip Spec      14 (20) '2.0'\n-0DFD52 Extract OS            00 (0) 'MS-DOS'\n-0DFD53 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DFD55 Compression Method    0000 (0) 'Stored'\n-0DFD57 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DFD5B CRC                   00000000 (0)\n-0DFD5F Compressed Size       00000000 (0)\n-0DFD63 Uncompressed Size     00000000 (0)\n-0DFD67 Filename Length       006D (109)\n-0DFD69 Extra Length          0009 (9)\n-0DFD6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDFD6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DFDD8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DFDDA   Length              0005 (5)\n-0DFDDC   Flags               01 (1) 'Modification'\n-0DFDDD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DFDE1 PAYLOAD\n-\n-0E04C3 DATA DESCRIPTOR       08074B50 (134695760)\n-0E04C7 CRC                   39649106 (962892038)\n-0E04CB Compressed Size       000006E2 (1762)\n-0E04CF Uncompressed Size     000006E2 (1762)\n-\n-0E04D3 LOCAL HEADER #354     04034B50 (67324752)\n-0E04D7 Extract Zip Spec      14 (20) '2.0'\n-0E04D8 Extract OS            00 (0) 'MS-DOS'\n-0E04D9 General Purpose Flag  0000 (0)\n-0E04DB Compression Method    0000 (0) 'Stored'\n-0E04DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E04E1 CRC                   00000000 (0)\n-0E04E5 Compressed Size       00000000 (0)\n-0E04E9 Uncompressed Size     00000000 (0)\n-0E04ED Filename Length       0052 (82)\n-0E04EF Extra Length          0009 (9)\n-0E04F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE04F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E0543 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E0545   Length              0005 (5)\n-0E0547   Flags               01 (1) 'Modification'\n-0E0548   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E054C LOCAL HEADER #355     04034B50 (67324752)\n-0E0550 Extract Zip Spec      14 (20) '2.0'\n-0E0551 Extract OS            00 (0) 'MS-DOS'\n-0E0552 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E0554 Compression Method    0000 (0) 'Stored'\n-0E0556 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E055A CRC                   00000000 (0)\n-0E055E Compressed Size       00000000 (0)\n-0E0562 Uncompressed Size     00000000 (0)\n-0E0566 Filename Length       0068 (104)\n-0E0568 Extra Length          0009 (9)\n-0E056A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE056A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E05D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E05D4   Length              0005 (5)\n-0E05D6   Flags               01 (1) 'Modification'\n-0E05D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E05DB PAYLOAD\n-\n-0E0D5D DATA DESCRIPTOR       08074B50 (134695760)\n-0E0D61 CRC                   8DC8B44C (2378740812)\n-0E0D65 Compressed Size       00000782 (1922)\n-0E0D69 Uncompressed Size     00000782 (1922)\n-\n-0E0D6D LOCAL HEADER #356     04034B50 (67324752)\n-0E0D71 Extract Zip Spec      14 (20) '2.0'\n-0E0D72 Extract OS            00 (0) 'MS-DOS'\n-0E0D73 General Purpose Flag  0000 (0)\n-0E0D75 Compression Method    0000 (0) 'Stored'\n-0E0D77 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E0D7B CRC                   00000000 (0)\n-0E0D7F Compressed Size       00000000 (0)\n-0E0D83 Uncompressed Size     00000000 (0)\n-0E0D87 Filename Length       0023 (35)\n-0E0D89 Extra Length          0009 (9)\n-0E0D8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE0D8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E0DAE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E0DB0   Length              0005 (5)\n-0E0DB2   Flags               01 (1) 'Modification'\n-0E0DB3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E0DB7 LOCAL HEADER #357     04034B50 (67324752)\n-0E0DBB Extract Zip Spec      14 (20) '2.0'\n-0E0DBC Extract OS            00 (0) 'MS-DOS'\n-0E0DBD General Purpose Flag  0000 (0)\n-0E0DBF Compression Method    0000 (0) 'Stored'\n-0E0DC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E0DC5 CRC                   00000000 (0)\n-0E0DC9 Compressed Size       00000000 (0)\n-0E0DCD Uncompressed Size     00000000 (0)\n-0E0DD1 Filename Length       002A (42)\n-0E0DD3 Extra Length          0009 (9)\n-0E0DD5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE0DD5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E0DFF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E0E01   Length              0005 (5)\n-0E0E03   Flags               01 (1) 'Modification'\n-0E0E04   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E0E08 LOCAL HEADER #358     04034B50 (67324752)\n-0E0E0C Extract Zip Spec      14 (20) '2.0'\n-0E0E0D Extract OS            00 (0) 'MS-DOS'\n-0E0E0E General Purpose Flag  0000 (0)\n-0E0E10 Compression Method    0000 (0) 'Stored'\n-0E0E12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E0E16 CRC                   00000000 (0)\n-0E0E1A Compressed Size       00000000 (0)\n-0E0E1E Uncompressed Size     00000000 (0)\n-0E0E22 Filename Length       0052 (82)\n-0E0E24 Extra Length          0009 (9)\n-0E0E26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE0E26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E0E78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E0E7A   Length              0005 (5)\n-0E0E7C   Flags               01 (1) 'Modification'\n-0E0E7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E0E81 LOCAL HEADER #359     04034B50 (67324752)\n-0E0E85 Extract Zip Spec      14 (20) '2.0'\n-0E0E86 Extract OS            00 (0) 'MS-DOS'\n-0E0E87 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E0E89 Compression Method    0000 (0) 'Stored'\n-0E0E8B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E0E8F CRC                   00000000 (0)\n-0E0E93 Compressed Size       00000000 (0)\n-0E0E97 Uncompressed Size     00000000 (0)\n-0E0E9B Filename Length       0068 (104)\n-0E0E9D Extra Length          0009 (9)\n-0E0E9F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE0E9F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E0F07 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E0F09   Length              0005 (5)\n-0E0F0B   Flags               01 (1) 'Modification'\n-0E0F0C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E0F10 PAYLOAD\n-\n-0E1824 DATA DESCRIPTOR       08074B50 (134695760)\n-0E1828 CRC                   605D4301 (1616724737)\n-0E182C Compressed Size       00000914 (2324)\n-0E1830 Uncompressed Size     00000914 (2324)\n-\n-0E1834 LOCAL HEADER #360     04034B50 (67324752)\n-0E1838 Extract Zip Spec      14 (20) '2.0'\n-0E1839 Extract OS            00 (0) 'MS-DOS'\n-0E183A General Purpose Flag  0000 (0)\n-0E183C Compression Method    0000 (0) 'Stored'\n-0E183E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E1842 CRC                   00000000 (0)\n-0E1846 Compressed Size       00000000 (0)\n-0E184A Uncompressed Size     00000000 (0)\n-0E184E Filename Length       005F (95)\n-0E1850 Extra Length          0009 (9)\n-0E1852 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE1852: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E18B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E18B3   Length              0005 (5)\n-0E18B5   Flags               01 (1) 'Modification'\n-0E18B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E18BA LOCAL HEADER #361     04034B50 (67324752)\n-0E18BE Extract Zip Spec      14 (20) '2.0'\n-0E18BF Extract OS            00 (0) 'MS-DOS'\n-0E18C0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E18C2 Compression Method    0000 (0) 'Stored'\n-0E18C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E18C8 CRC                   00000000 (0)\n-0E18CC Compressed Size       00000000 (0)\n-0E18D0 Uncompressed Size     00000000 (0)\n-0E18D4 Filename Length       0075 (117)\n-0E18D6 Extra Length          0009 (9)\n-0E18D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE18D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E194D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E194F   Length              0005 (5)\n-0E1951   Flags               01 (1) 'Modification'\n-0E1952   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E1956 PAYLOAD\n-\n-0E20FB DATA DESCRIPTOR       08074B50 (134695760)\n-0E20FF CRC                   A64E298E (2790140302)\n-0E2103 Compressed Size       000007A5 (1957)\n-0E2107 Uncompressed Size     000007A5 (1957)\n-\n-0E210B LOCAL HEADER #362     04034B50 (67324752)\n-0E210F Extract Zip Spec      14 (20) '2.0'\n-0E2110 Extract OS            00 (0) 'MS-DOS'\n-0E2111 General Purpose Flag  0000 (0)\n-0E2113 Compression Method    0000 (0) 'Stored'\n-0E2115 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E2119 CRC                   00000000 (0)\n-0E211D Compressed Size       00000000 (0)\n-0E2121 Uncompressed Size     00000000 (0)\n-0E2125 Filename Length       0058 (88)\n-0E2127 Extra Length          0009 (9)\n-0E2129 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE2129: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E2181 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E2183   Length              0005 (5)\n-0E2185   Flags               01 (1) 'Modification'\n-0E2186   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E218A LOCAL HEADER #363     04034B50 (67324752)\n-0E218E Extract Zip Spec      14 (20) '2.0'\n-0E218F Extract OS            00 (0) 'MS-DOS'\n-0E2190 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E2192 Compression Method    0000 (0) 'Stored'\n-0E2194 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E2198 CRC                   00000000 (0)\n-0E219C Compressed Size       00000000 (0)\n-0E21A0 Uncompressed Size     00000000 (0)\n-0E21A4 Filename Length       006E (110)\n-0E21A6 Extra Length          0009 (9)\n-0E21A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE21A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E2216 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E2218   Length              0005 (5)\n-0E221A   Flags               01 (1) 'Modification'\n-0E221B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E221F PAYLOAD\n-\n-0E3162 DATA DESCRIPTOR       08074B50 (134695760)\n-0E3166 CRC                   937D5C9D (2474466461)\n-0E316A Compressed Size       00000F43 (3907)\n-0E316E Uncompressed Size     00000F43 (3907)\n-\n-0E3172 LOCAL HEADER #364     04034B50 (67324752)\n-0E3176 Extract Zip Spec      14 (20) '2.0'\n-0E3177 Extract OS            00 (0) 'MS-DOS'\n-0E3178 General Purpose Flag  0000 (0)\n-0E317A Compression Method    0000 (0) 'Stored'\n-0E317C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E3180 CRC                   00000000 (0)\n-0E3184 Compressed Size       00000000 (0)\n-0E3188 Uncompressed Size     00000000 (0)\n-0E318C Filename Length       0025 (37)\n-0E318E Extra Length          0009 (9)\n-0E3190 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE3190: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E31B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E31B7   Length              0005 (5)\n-0E31B9   Flags               01 (1) 'Modification'\n-0E31BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E31BE LOCAL HEADER #365     04034B50 (67324752)\n-0E31C2 Extract Zip Spec      14 (20) '2.0'\n-0E31C3 Extract OS            00 (0) 'MS-DOS'\n-0E31C4 General Purpose Flag  0000 (0)\n-0E31C6 Compression Method    0000 (0) 'Stored'\n-0E31C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E31CC CRC                   00000000 (0)\n-0E31D0 Compressed Size       00000000 (0)\n-0E31D4 Uncompressed Size     00000000 (0)\n-0E31D8 Filename Length       002C (44)\n-0E31DA Extra Length          0009 (9)\n-0E31DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE31DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E3208 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E320A   Length              0005 (5)\n-0E320C   Flags               01 (1) 'Modification'\n-0E320D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E3211 LOCAL HEADER #366     04034B50 (67324752)\n-0E3215 Extract Zip Spec      14 (20) '2.0'\n-0E3216 Extract OS            00 (0) 'MS-DOS'\n-0E3217 General Purpose Flag  0000 (0)\n-0E3219 Compression Method    0000 (0) 'Stored'\n-0E321B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E321F CRC                   00000000 (0)\n-0E3223 Compressed Size       00000000 (0)\n-0E3227 Uncompressed Size     00000000 (0)\n-0E322B Filename Length       005C (92)\n-0E322D Extra Length          0009 (9)\n-0E322F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE322F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E328B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E328D   Length              0005 (5)\n-0E328F   Flags               01 (1) 'Modification'\n-0E3290   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E3294 LOCAL HEADER #367     04034B50 (67324752)\n-0E3298 Extract Zip Spec      14 (20) '2.0'\n-0E3299 Extract OS            00 (0) 'MS-DOS'\n-0E329A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E329C Compression Method    0000 (0) 'Stored'\n-0E329E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E32A2 CRC                   00000000 (0)\n-0E32A6 Compressed Size       00000000 (0)\n-0E32AA Uncompressed Size     00000000 (0)\n-0E32AE Filename Length       0072 (114)\n-0E32B0 Extra Length          0009 (9)\n-0E32B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE32B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E3324 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E3326   Length              0005 (5)\n-0E3328   Flags               01 (1) 'Modification'\n-0E3329   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E332D PAYLOAD\n-\n-0E41C7 DATA DESCRIPTOR       08074B50 (134695760)\n-0E41CB CRC                   335CA1CD (861708749)\n-0E41CF Compressed Size       00000E9A (3738)\n-0E41D3 Uncompressed Size     00000E9A (3738)\n-\n-0E41D7 LOCAL HEADER #368     04034B50 (67324752)\n-0E41DB Extract Zip Spec      14 (20) '2.0'\n-0E41DC Extract OS            00 (0) 'MS-DOS'\n-0E41DD General Purpose Flag  0000 (0)\n-0E41DF Compression Method    0000 (0) 'Stored'\n-0E41E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E41E5 CRC                   00000000 (0)\n-0E41E9 Compressed Size       00000000 (0)\n-0E41ED Uncompressed Size     00000000 (0)\n-0E41F1 Filename Length       0068 (104)\n-0E41F3 Extra Length          0009 (9)\n-0E41F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE41F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E425D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E425F   Length              0005 (5)\n-0E4261   Flags               01 (1) 'Modification'\n-0E4262   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E4266 LOCAL HEADER #369     04034B50 (67324752)\n-0E426A Extract Zip Spec      14 (20) '2.0'\n-0E426B Extract OS            00 (0) 'MS-DOS'\n-0E426C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E426E Compression Method    0000 (0) 'Stored'\n-0E4270 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E4274 CRC                   00000000 (0)\n-0E4278 Compressed Size       00000000 (0)\n-0E427C Uncompressed Size     00000000 (0)\n-0E4280 Filename Length       007E (126)\n-0E4282 Extra Length          0009 (9)\n-0E4284 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE4284: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E4302 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E4304   Length              0005 (5)\n-0E4306   Flags               01 (1) 'Modification'\n-0E4307   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E430B PAYLOAD\n-\n-0E5364 DATA DESCRIPTOR       08074B50 (134695760)\n-0E5368 CRC                   3EE7FDDD (1055391197)\n-0E536C Compressed Size       00001059 (4185)\n-0E5370 Uncompressed Size     00001059 (4185)\n-\n-0E5374 LOCAL HEADER #370     04034B50 (67324752)\n-0E5378 Extract Zip Spec      14 (20) '2.0'\n-0E5379 Extract OS            00 (0) 'MS-DOS'\n-0E537A General Purpose Flag  0000 (0)\n-0E537C Compression Method    0000 (0) 'Stored'\n-0E537E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E5382 CRC                   00000000 (0)\n-0E5386 Compressed Size       00000000 (0)\n-0E538A Uncompressed Size     00000000 (0)\n-0E538E Filename Length       0025 (37)\n-0E5390 Extra Length          0009 (9)\n-0E5392 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE5392: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E53B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E53B9   Length              0005 (5)\n-0E53BB   Flags               01 (1) 'Modification'\n-0E53BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E53C0 LOCAL HEADER #371     04034B50 (67324752)\n-0E53C4 Extract Zip Spec      14 (20) '2.0'\n-0E53C5 Extract OS            00 (0) 'MS-DOS'\n-0E53C6 General Purpose Flag  0000 (0)\n-0E53C8 Compression Method    0000 (0) 'Stored'\n-0E53CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E53CE CRC                   00000000 (0)\n-0E53D2 Compressed Size       00000000 (0)\n-0E53D6 Uncompressed Size     00000000 (0)\n-0E53DA Filename Length       002C (44)\n-0E53DC Extra Length          0009 (9)\n-0E53DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE53DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E540A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E540C   Length              0005 (5)\n-0E540E   Flags               01 (1) 'Modification'\n-0E540F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E5413 LOCAL HEADER #372     04034B50 (67324752)\n-0E5417 Extract Zip Spec      14 (20) '2.0'\n-0E5418 Extract OS            00 (0) 'MS-DOS'\n-0E5419 General Purpose Flag  0000 (0)\n-0E541B Compression Method    0000 (0) 'Stored'\n-0E541D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E5421 CRC                   00000000 (0)\n-0E5425 Compressed Size       00000000 (0)\n-0E5429 Uncompressed Size     00000000 (0)\n-0E542D Filename Length       005A (90)\n-0E542F Extra Length          0009 (9)\n-0E5431 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE5431: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E548B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E548D   Length              0005 (5)\n-0E548F   Flags               01 (1) 'Modification'\n-0E5490   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E5494 LOCAL HEADER #373     04034B50 (67324752)\n-0E5498 Extract Zip Spec      14 (20) '2.0'\n-0E5499 Extract OS            00 (0) 'MS-DOS'\n-0E549A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E549C Compression Method    0000 (0) 'Stored'\n-0E549E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E54A2 CRC                   00000000 (0)\n-0E54A6 Compressed Size       00000000 (0)\n-0E54AA Uncompressed Size     00000000 (0)\n-0E54AE Filename Length       0070 (112)\n-0E54B0 Extra Length          0009 (9)\n-0E54B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE54B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E5522 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E5524   Length              0005 (5)\n-0E5526   Flags               01 (1) 'Modification'\n-0E5527   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E552B PAYLOAD\n-\n-0E6CF2 DATA DESCRIPTOR       08074B50 (134695760)\n-0E6CF6 CRC                   0944969F (155489951)\n-0E6CFA Compressed Size       000017C7 (6087)\n-0E6CFE Uncompressed Size     000017C7 (6087)\n-\n-0E6D02 LOCAL HEADER #374     04034B50 (67324752)\n-0E6D06 Extract Zip Spec      14 (20) '2.0'\n-0E6D07 Extract OS            00 (0) 'MS-DOS'\n-0E6D08 General Purpose Flag  0000 (0)\n-0E6D0A Compression Method    0000 (0) 'Stored'\n-0E6D0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E6D10 CRC                   00000000 (0)\n-0E6D14 Compressed Size       00000000 (0)\n-0E6D18 Uncompressed Size     00000000 (0)\n-0E6D1C Filename Length       0027 (39)\n-0E6D1E Extra Length          0009 (9)\n-0E6D20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE6D20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E6D47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E6D49   Length              0005 (5)\n-0E6D4B   Flags               01 (1) 'Modification'\n-0E6D4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E6D50 LOCAL HEADER #375     04034B50 (67324752)\n-0E6D54 Extract Zip Spec      14 (20) '2.0'\n-0E6D55 Extract OS            00 (0) 'MS-DOS'\n-0E6D56 General Purpose Flag  0000 (0)\n-0E6D58 Compression Method    0000 (0) 'Stored'\n-0E6D5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E6D5E CRC                   00000000 (0)\n-0E6D62 Compressed Size       00000000 (0)\n-0E6D66 Uncompressed Size     00000000 (0)\n-0E6D6A Filename Length       002E (46)\n-0E6D6C Extra Length          0009 (9)\n-0E6D6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE6D6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E6D9C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E6D9E   Length              0005 (5)\n-0E6DA0   Flags               01 (1) 'Modification'\n-0E6DA1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E6DA5 LOCAL HEADER #376     04034B50 (67324752)\n-0E6DA9 Extract Zip Spec      14 (20) '2.0'\n-0E6DAA Extract OS            00 (0) 'MS-DOS'\n-0E6DAB General Purpose Flag  0000 (0)\n-0E6DAD Compression Method    0000 (0) 'Stored'\n-0E6DAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E6DB3 CRC                   00000000 (0)\n-0E6DB7 Compressed Size       00000000 (0)\n-0E6DBB Uncompressed Size     00000000 (0)\n-0E6DBF Filename Length       0067 (103)\n-0E6DC1 Extra Length          0009 (9)\n-0E6DC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE6DC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E6E2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E6E2C   Length              0005 (5)\n-0E6E2E   Flags               01 (1) 'Modification'\n-0E6E2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E6E33 LOCAL HEADER #377     04034B50 (67324752)\n-0E6E37 Extract Zip Spec      14 (20) '2.0'\n-0E6E38 Extract OS            00 (0) 'MS-DOS'\n-0E6E39 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E6E3B Compression Method    0000 (0) 'Stored'\n-0E6E3D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E6E41 CRC                   00000000 (0)\n-0E6E45 Compressed Size       00000000 (0)\n-0E6E49 Uncompressed Size     00000000 (0)\n-0E6E4D Filename Length       007D (125)\n-0E6E4F Extra Length          0009 (9)\n-0E6E51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE6E51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E6ECE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E6ED0   Length              0005 (5)\n-0E6ED2   Flags               01 (1) 'Modification'\n-0E6ED3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E6ED7 PAYLOAD\n-\n-0E7B32 DATA DESCRIPTOR       08074B50 (134695760)\n-0E7B36 CRC                   67FA3A91 (1744452241)\n-0E7B3A Compressed Size       00000C5B (3163)\n-0E7B3E Uncompressed Size     00000C5B (3163)\n-\n-0E7B42 LOCAL HEADER #378     04034B50 (67324752)\n-0E7B46 Extract Zip Spec      14 (20) '2.0'\n-0E7B47 Extract OS            00 (0) 'MS-DOS'\n-0E7B48 General Purpose Flag  0000 (0)\n-0E7B4A Compression Method    0000 (0) 'Stored'\n-0E7B4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E7B50 CRC                   00000000 (0)\n-0E7B54 Compressed Size       00000000 (0)\n-0E7B58 Uncompressed Size     00000000 (0)\n-0E7B5C Filename Length       0067 (103)\n-0E7B5E Extra Length          0009 (9)\n-0E7B60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE7B60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E7BC7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E7BC9   Length              0005 (5)\n-0E7BCB   Flags               01 (1) 'Modification'\n-0E7BCC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E7BD0 LOCAL HEADER #379     04034B50 (67324752)\n-0E7BD4 Extract Zip Spec      14 (20) '2.0'\n-0E7BD5 Extract OS            00 (0) 'MS-DOS'\n-0E7BD6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E7BD8 Compression Method    0000 (0) 'Stored'\n-0E7BDA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E7BDE CRC                   00000000 (0)\n-0E7BE2 Compressed Size       00000000 (0)\n-0E7BE6 Uncompressed Size     00000000 (0)\n-0E7BEA Filename Length       007D (125)\n-0E7BEC Extra Length          0009 (9)\n-0E7BEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE7BEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E7C6B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E7C6D   Length              0005 (5)\n-0E7C6F   Flags               01 (1) 'Modification'\n-0E7C70   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E7C74 PAYLOAD\n-\n-0E8434 DATA DESCRIPTOR       08074B50 (134695760)\n-0E8438 CRC                   63513D5C (1666268508)\n-0E843C Compressed Size       000007C0 (1984)\n-0E8440 Uncompressed Size     000007C0 (1984)\n-\n-0E8444 LOCAL HEADER #380     04034B50 (67324752)\n-0E8448 Extract Zip Spec      14 (20) '2.0'\n-0E8449 Extract OS            00 (0) 'MS-DOS'\n-0E844A General Purpose Flag  0000 (0)\n-0E844C Compression Method    0000 (0) 'Stored'\n-0E844E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E8452 CRC                   00000000 (0)\n-0E8456 Compressed Size       00000000 (0)\n-0E845A Uncompressed Size     00000000 (0)\n-0E845E Filename Length       005E (94)\n-0E8460 Extra Length          0009 (9)\n-0E8462 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE8462: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E84C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E84C2   Length              0005 (5)\n-0E84C4   Flags               01 (1) 'Modification'\n-0E84C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E84C9 LOCAL HEADER #381     04034B50 (67324752)\n-0E84CD Extract Zip Spec      14 (20) '2.0'\n-0E84CE Extract OS            00 (0) 'MS-DOS'\n-0E84CF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E84D1 Compression Method    0000 (0) 'Stored'\n-0E84D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E84D7 CRC                   00000000 (0)\n-0E84DB Compressed Size       00000000 (0)\n-0E84DF Uncompressed Size     00000000 (0)\n-0E84E3 Filename Length       0074 (116)\n-0E84E5 Extra Length          0009 (9)\n-0E84E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE84E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E855B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E855D   Length              0005 (5)\n-0E855F   Flags               01 (1) 'Modification'\n-0E8560   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E8564 PAYLOAD\n-\n-0E943E DATA DESCRIPTOR       08074B50 (134695760)\n-0E9442 CRC                   99929518 (2576520472)\n-0E9446 Compressed Size       00000EDA (3802)\n-0E944A Uncompressed Size     00000EDA (3802)\n-\n-0E944E LOCAL HEADER #382     04034B50 (67324752)\n-0E9452 Extract Zip Spec      14 (20) '2.0'\n-0E9453 Extract OS            00 (0) 'MS-DOS'\n-0E9454 General Purpose Flag  0000 (0)\n-0E9456 Compression Method    0000 (0) 'Stored'\n-0E9458 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E945C CRC                   00000000 (0)\n-0E9460 Compressed Size       00000000 (0)\n-0E9464 Uncompressed Size     00000000 (0)\n-0E9468 Filename Length       005C (92)\n-0E946A Extra Length          0009 (9)\n-0E946C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE946C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E94C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E94CA   Length              0005 (5)\n-0E94CC   Flags               01 (1) 'Modification'\n-0E94CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E94D1 LOCAL HEADER #383     04034B50 (67324752)\n-0E94D5 Extract Zip Spec      14 (20) '2.0'\n-0E94D6 Extract OS            00 (0) 'MS-DOS'\n-0E94D7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E94D9 Compression Method    0000 (0) 'Stored'\n-0E94DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E94DF CRC                   00000000 (0)\n-0E94E3 Compressed Size       00000000 (0)\n-0E94E7 Uncompressed Size     00000000 (0)\n-0E94EB Filename Length       0072 (114)\n-0E94ED Extra Length          0009 (9)\n-0E94EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE94EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E9561 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E9563   Length              0005 (5)\n-0E9565   Flags               01 (1) 'Modification'\n-0E9566   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E956A PAYLOAD\n-\n-0E9E62 DATA DESCRIPTOR       08074B50 (134695760)\n-0E9E66 CRC                   E6BF62E0 (3871302368)\n-0E9E6A Compressed Size       000008F8 (2296)\n-0E9E6E Uncompressed Size     000008F8 (2296)\n-\n-0E9E72 LOCAL HEADER #384     04034B50 (67324752)\n-0E9E76 Extract Zip Spec      14 (20) '2.0'\n-0E9E77 Extract OS            00 (0) 'MS-DOS'\n-0E9E78 General Purpose Flag  0000 (0)\n-0E9E7A Compression Method    0000 (0) 'Stored'\n-0E9E7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E9E80 CRC                   00000000 (0)\n-0E9E84 Compressed Size       00000000 (0)\n-0E9E88 Uncompressed Size     00000000 (0)\n-0E9E8C Filename Length       0061 (97)\n-0E9E8E Extra Length          0009 (9)\n-0E9E90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE9E90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E9EF1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E9EF3   Length              0005 (5)\n-0E9EF5   Flags               01 (1) 'Modification'\n-0E9EF6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E9EFA LOCAL HEADER #385     04034B50 (67324752)\n-0E9EFE Extract Zip Spec      14 (20) '2.0'\n-0E9EFF Extract OS            00 (0) 'MS-DOS'\n-0E9F00 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E9F02 Compression Method    0000 (0) 'Stored'\n-0E9F04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E9F08 CRC                   00000000 (0)\n-0E9F0C Compressed Size       00000000 (0)\n-0E9F10 Uncompressed Size     00000000 (0)\n-0E9F14 Filename Length       0077 (119)\n-0E9F16 Extra Length          0009 (9)\n-0E9F18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE9F18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E9F8F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E9F91   Length              0005 (5)\n-0E9F93   Flags               01 (1) 'Modification'\n-0E9F94   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E9F98 PAYLOAD\n-\n-0EA52C DATA DESCRIPTOR       08074B50 (134695760)\n-0EA530 CRC                   01130591 (18023825)\n-0EA534 Compressed Size       00000594 (1428)\n-0EA538 Uncompressed Size     00000594 (1428)\n-\n-0EA53C LOCAL HEADER #386     04034B50 (67324752)\n-0EA540 Extract Zip Spec      14 (20) '2.0'\n-0EA541 Extract OS            00 (0) 'MS-DOS'\n-0EA542 General Purpose Flag  0000 (0)\n-0EA544 Compression Method    0000 (0) 'Stored'\n-0EA546 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EA54A CRC                   00000000 (0)\n-0EA54E Compressed Size       00000000 (0)\n-0EA552 Uncompressed Size     00000000 (0)\n-0EA556 Filename Length       0063 (99)\n-0EA558 Extra Length          0009 (9)\n-0EA55A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEA55A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EA5BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EA5BF   Length              0005 (5)\n-0EA5C1   Flags               01 (1) 'Modification'\n-0EA5C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0EA5C6 LOCAL HEADER #387     04034B50 (67324752)\n-0EA5CA Extract Zip Spec      14 (20) '2.0'\n-0EA5CB Extract OS            00 (0) 'MS-DOS'\n-0EA5CC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0EA5CE Compression Method    0000 (0) 'Stored'\n-0EA5D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EA5D4 CRC                   00000000 (0)\n-0EA5D8 Compressed Size       00000000 (0)\n-0EA5DC Uncompressed Size     00000000 (0)\n-0EA5E0 Filename Length       0079 (121)\n-0EA5E2 Extra Length          0009 (9)\n-0EA5E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEA5E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EA65D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EA65F   Length              0005 (5)\n-0EA661   Flags               01 (1) 'Modification'\n-0EA662   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0EA666 PAYLOAD\n-\n-0EAE97 DATA DESCRIPTOR       08074B50 (134695760)\n-0EAE9B CRC                   F05E2331 (4032701233)\n-0EAE9F Compressed Size       00000831 (2097)\n-0EAEA3 Uncompressed Size     00000831 (2097)\n-\n-0EAEA7 LOCAL HEADER #388     04034B50 (67324752)\n-0EAEAB Extract Zip Spec      14 (20) '2.0'\n-0EAEAC Extract OS            00 (0) 'MS-DOS'\n-0EAEAD General Purpose Flag  0000 (0)\n-0EAEAF Compression Method    0000 (0) 'Stored'\n-0EAEB1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EAEB5 CRC                   00000000 (0)\n-0EAEB9 Compressed Size       00000000 (0)\n-0EAEBD Uncompressed Size     00000000 (0)\n-0EAEC1 Filename Length       0061 (97)\n-0EAEC3 Extra Length          0009 (9)\n-0EAEC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEAEC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EAF26 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EAF28   Length              0005 (5)\n-0EAF2A   Flags               01 (1) 'Modification'\n-0EAF2B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0EAF2F LOCAL HEADER #389     04034B50 (67324752)\n-0EAF33 Extract Zip Spec      14 (20) '2.0'\n-0EAF34 Extract OS            00 (0) 'MS-DOS'\n-0EAF35 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0EAF37 Compression Method    0000 (0) 'Stored'\n-0EAF39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EAF3D CRC                   00000000 (0)\n-0EAF41 Compressed Size       00000000 (0)\n-0EAF45 Uncompressed Size     00000000 (0)\n-0EAF49 Filename Length       0077 (119)\n-0EAF4B Extra Length          0009 (9)\n-0EAF4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEAF4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EAFC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EAFC6   Length              0005 (5)\n-0EAFC8   Flags               01 (1) 'Modification'\n-0EAFC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0EAFCD PAYLOAD\n-\n-0EC59D DATA DESCRIPTOR       08074B50 (134695760)\n-0EC5A1 CRC                   80ED3BA4 (2163030948)\n-0EC5A5 Compressed Size       000015D0 (5584)\n-0EC5A9 Uncompressed Size     000015D0 (5584)\n-\n-0EC5AD LOCAL HEADER #390     04034B50 (67324752)\n-0EC5B1 Extract Zip Spec      14 (20) '2.0'\n-0EC5B2 Extract OS            00 (0) 'MS-DOS'\n-0EC5B3 General Purpose Flag  0000 (0)\n-0EC5B5 Compression Method    0000 (0) 'Stored'\n-0EC5B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EC5BB CRC                   00000000 (0)\n-0EC5BF Compressed Size       00000000 (0)\n-0EC5C3 Uncompressed Size     00000000 (0)\n-0EC5C7 Filename Length       0067 (103)\n-0EC5C9 Extra Length          0009 (9)\n-0EC5CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEC5CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EC632 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EC634   Length              0005 (5)\n-0EC636   Flags               01 (1) 'Modification'\n-0EC637   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0EC63B LOCAL HEADER #391     04034B50 (67324752)\n-0EC63F Extract Zip Spec      14 (20) '2.0'\n-0EC640 Extract OS            00 (0) 'MS-DOS'\n-0EC641 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0EC643 Compression Method    0000 (0) 'Stored'\n-0EC645 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EC649 CRC                   00000000 (0)\n-0EC64D Compressed Size       00000000 (0)\n-0EC651 Uncompressed Size     00000000 (0)\n-0EC655 Filename Length       007D (125)\n-0EC657 Extra Length          0009 (9)\n-0EC659 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEC659: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EC6D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EC6D8   Length              0005 (5)\n-0EC6DA   Flags               01 (1) 'Modification'\n-0EC6DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0EC6DF PAYLOAD\n-\n-0EE68D DATA DESCRIPTOR       08074B50 (134695760)\n-0EE691 CRC                   7018E446 (1880679494)\n-0EE695 Compressed Size       00001FAE (8110)\n-0EE699 Uncompressed Size     00001FAE (8110)\n-\n-0EE69D LOCAL HEADER #392     04034B50 (67324752)\n-0EE6A1 Extract Zip Spec      14 (20) '2.0'\n-0EE6A2 Extract OS            00 (0) 'MS-DOS'\n-0EE6A3 General Purpose Flag  0000 (0)\n-0EE6A5 Compression Method    0000 (0) 'Stored'\n-0EE6A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EE6AB CRC                   00000000 (0)\n-0EE6AF Compressed Size       00000000 (0)\n-0EE6B3 Uncompressed Size     00000000 (0)\n-0EE6B7 Filename Length       005E (94)\n-0EE6B9 Extra Length          0009 (9)\n-0EE6BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEE6BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EE719 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EE71B   Length              0005 (5)\n-0EE71D   Flags               01 (1) 'Modification'\n-0EE71E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0EE722 LOCAL HEADER #393     04034B50 (67324752)\n-0EE726 Extract Zip Spec      14 (20) '2.0'\n-0EE727 Extract OS            00 (0) 'MS-DOS'\n-0EE728 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0EE72A Compression Method    0000 (0) 'Stored'\n-0EE72C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EE730 CRC                   00000000 (0)\n-0EE734 Compressed Size       00000000 (0)\n-0EE738 Uncompressed Size     00000000 (0)\n-0EE73C Filename Length       0074 (116)\n-0EE73E Extra Length          0009 (9)\n-0EE740 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEE740: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EE7B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EE7B6   Length              0005 (5)\n-0EE7B8   Flags               01 (1) 'Modification'\n-0EE7B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0EE7BD PAYLOAD\n-\n-0EFAB7 DATA DESCRIPTOR       08074B50 (134695760)\n-0EFABB CRC                   61A0CE5A (1637928538)\n-0EFABF Compressed Size       000012FA (4858)\n-0EFAC3 Uncompressed Size     000012FA (4858)\n-\n-0EFAC7 LOCAL HEADER #394     04034B50 (67324752)\n-0EFACB Extract Zip Spec      14 (20) '2.0'\n-0EFACC Extract OS            00 (0) 'MS-DOS'\n-0EFACD General Purpose Flag  0000 (0)\n-0EFACF Compression Method    0000 (0) 'Stored'\n-0EFAD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EFAD5 CRC                   00000000 (0)\n-0EFAD9 Compressed Size       00000000 (0)\n-0EFADD Uncompressed Size     00000000 (0)\n-0EFAE1 Filename Length       0061 (97)\n-0EFAE3 Extra Length          0009 (9)\n-0EFAE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEFAE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EFB46 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EFB48   Length              0005 (5)\n-0EFB4A   Flags               01 (1) 'Modification'\n-0EFB4B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0EFB4F LOCAL HEADER #395     04034B50 (67324752)\n-0EFB53 Extract Zip Spec      14 (20) '2.0'\n-0EFB54 Extract OS            00 (0) 'MS-DOS'\n-0EFB55 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0EFB57 Compression Method    0000 (0) 'Stored'\n-0EFB59 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EFB5D CRC                   00000000 (0)\n-0EFB61 Compressed Size       00000000 (0)\n-0EFB65 Uncompressed Size     00000000 (0)\n-0EFB69 Filename Length       0077 (119)\n-0EFB6B Extra Length          0009 (9)\n-0EFB6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEFB6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EFBE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EFBE6   Length              0005 (5)\n-0EFBE8   Flags               01 (1) 'Modification'\n-0EFBE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0EFBED PAYLOAD\n-\n-0F0F02 DATA DESCRIPTOR       08074B50 (134695760)\n-0F0F06 CRC                   624BE63E (1649141310)\n-0F0F0A Compressed Size       00001315 (4885)\n-0F0F0E Uncompressed Size     00001315 (4885)\n-\n-0F0F12 LOCAL HEADER #396     04034B50 (67324752)\n-0F0F16 Extract Zip Spec      14 (20) '2.0'\n-0F0F17 Extract OS            00 (0) 'MS-DOS'\n-0F0F18 General Purpose Flag  0000 (0)\n-0F0F1A Compression Method    0000 (0) 'Stored'\n-0F0F1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F0F20 CRC                   00000000 (0)\n-0F0F24 Compressed Size       00000000 (0)\n-0F0F28 Uncompressed Size     00000000 (0)\n-0F0F2C Filename Length       005D (93)\n-0F0F2E Extra Length          0009 (9)\n-0F0F30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF0F30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F0F8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F0F8F   Length              0005 (5)\n-0F0F91   Flags               01 (1) 'Modification'\n-0F0F92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F0F96 LOCAL HEADER #397     04034B50 (67324752)\n-0F0F9A Extract Zip Spec      14 (20) '2.0'\n-0F0F9B Extract OS            00 (0) 'MS-DOS'\n-0F0F9C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F0F9E Compression Method    0000 (0) 'Stored'\n-0F0FA0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F0FA4 CRC                   00000000 (0)\n-0F0FA8 Compressed Size       00000000 (0)\n-0F0FAC Uncompressed Size     00000000 (0)\n-0F0FB0 Filename Length       0073 (115)\n-0F0FB2 Extra Length          0009 (9)\n-0F0FB4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF0FB4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F1027 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F1029   Length              0005 (5)\n-0F102B   Flags               01 (1) 'Modification'\n-0F102C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F1030 PAYLOAD\n-\n-0F3814 DATA DESCRIPTOR       08074B50 (134695760)\n-0F3818 CRC                   F4A07CA3 (4104158371)\n-0F381C Compressed Size       000027E4 (10212)\n-0F3820 Uncompressed Size     000027E4 (10212)\n-\n-0F3824 LOCAL HEADER #398     04034B50 (67324752)\n-0F3828 Extract Zip Spec      14 (20) '2.0'\n-0F3829 Extract OS            00 (0) 'MS-DOS'\n-0F382A General Purpose Flag  0000 (0)\n-0F382C Compression Method    0000 (0) 'Stored'\n-0F382E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F3832 CRC                   00000000 (0)\n-0F3836 Compressed Size       00000000 (0)\n-0F383A Uncompressed Size     00000000 (0)\n-0F383E Filename Length       0065 (101)\n-0F3840 Extra Length          0009 (9)\n-0F3842 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF3842: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F38A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F38A9   Length              0005 (5)\n-0F38AB   Flags               01 (1) 'Modification'\n-0F38AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F38B0 LOCAL HEADER #399     04034B50 (67324752)\n-0F38B4 Extract Zip Spec      14 (20) '2.0'\n-0F38B5 Extract OS            00 (0) 'MS-DOS'\n-0F38B6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F38B8 Compression Method    0000 (0) 'Stored'\n-0F38BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F38BE CRC                   00000000 (0)\n-0F38C2 Compressed Size       00000000 (0)\n-0F38C6 Uncompressed Size     00000000 (0)\n-0F38CA Filename Length       007B (123)\n-0F38CC Extra Length          0009 (9)\n-0F38CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF38CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F3949 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F394B   Length              0005 (5)\n-0F394D   Flags               01 (1) 'Modification'\n-0F394E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F3952 PAYLOAD\n-\n-0F4BC8 DATA DESCRIPTOR       08074B50 (134695760)\n-0F4BCC CRC                   6E031E40 (1845698112)\n-0F4BD0 Compressed Size       00001276 (4726)\n-0F4BD4 Uncompressed Size     00001276 (4726)\n-\n-0F4BD8 LOCAL HEADER #400     04034B50 (67324752)\n-0F4BDC Extract Zip Spec      14 (20) '2.0'\n-0F4BDD Extract OS            00 (0) 'MS-DOS'\n-0F4BDE General Purpose Flag  0000 (0)\n-0F4BE0 Compression Method    0000 (0) 'Stored'\n-0F4BE2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F4BE6 CRC                   00000000 (0)\n-0F4BEA Compressed Size       00000000 (0)\n-0F4BEE Uncompressed Size     00000000 (0)\n-0F4BF2 Filename Length       0064 (100)\n-0F4BF4 Extra Length          0009 (9)\n-0F4BF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF4BF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F4C5A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F4C5C   Length              0005 (5)\n-0F4C5E   Flags               01 (1) 'Modification'\n-0F4C5F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F4C63 LOCAL HEADER #401     04034B50 (67324752)\n-0F4C67 Extract Zip Spec      14 (20) '2.0'\n-0F4C68 Extract OS            00 (0) 'MS-DOS'\n-0F4C69 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F4C6B Compression Method    0000 (0) 'Stored'\n-0F4C6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F4C71 CRC                   00000000 (0)\n-0F4C75 Compressed Size       00000000 (0)\n-0F4C79 Uncompressed Size     00000000 (0)\n-0F4C7D Filename Length       007A (122)\n-0F4C7F Extra Length          0009 (9)\n-0F4C81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF4C81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F4CFB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F4CFD   Length              0005 (5)\n-0F4CFF   Flags               01 (1) 'Modification'\n-0F4D00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F4D04 PAYLOAD\n-\n-0F58E2 DATA DESCRIPTOR       08074B50 (134695760)\n-0F58E6 CRC                   5987930A (1502057226)\n-0F58EA Compressed Size       00000BDE (3038)\n-0F58EE Uncompressed Size     00000BDE (3038)\n-\n-0F58F2 LOCAL HEADER #402     04034B50 (67324752)\n-0F58F6 Extract Zip Spec      14 (20) '2.0'\n-0F58F7 Extract OS            00 (0) 'MS-DOS'\n-0F58F8 General Purpose Flag  0000 (0)\n-0F58FA Compression Method    0000 (0) 'Stored'\n-0F58FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F5900 CRC                   00000000 (0)\n-0F5904 Compressed Size       00000000 (0)\n-0F5908 Uncompressed Size     00000000 (0)\n-0F590C Filename Length       0065 (101)\n-0F590E Extra Length          0009 (9)\n-0F5910 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF5910: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F5975 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F5977   Length              0005 (5)\n-0F5979   Flags               01 (1) 'Modification'\n-0F597A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F597E LOCAL HEADER #403     04034B50 (67324752)\n-0F5982 Extract Zip Spec      14 (20) '2.0'\n-0F5983 Extract OS            00 (0) 'MS-DOS'\n-0F5984 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F5986 Compression Method    0000 (0) 'Stored'\n-0F5988 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F598C CRC                   00000000 (0)\n-0F5990 Compressed Size       00000000 (0)\n-0F5994 Uncompressed Size     00000000 (0)\n-0F5998 Filename Length       007B (123)\n-0F599A Extra Length          0009 (9)\n-0F599C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF599C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F5A17 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F5A19   Length              0005 (5)\n-0F5A1B   Flags               01 (1) 'Modification'\n-0F5A1C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F5A20 PAYLOAD\n-\n-0F62EF DATA DESCRIPTOR       08074B50 (134695760)\n-0F62F3 CRC                   CA93F7B9 (3398694841)\n-0F62F7 Compressed Size       000008CF (2255)\n-0F62FB Uncompressed Size     000008CF (2255)\n-\n-0F62FF LOCAL HEADER #404     04034B50 (67324752)\n-0F6303 Extract Zip Spec      14 (20) '2.0'\n-0F6304 Extract OS            00 (0) 'MS-DOS'\n-0F6305 General Purpose Flag  0000 (0)\n-0F6307 Compression Method    0000 (0) 'Stored'\n-0F6309 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F630D CRC                   00000000 (0)\n-0F6311 Compressed Size       00000000 (0)\n-0F6315 Uncompressed Size     00000000 (0)\n-0F6319 Filename Length       0063 (99)\n-0F631B Extra Length          0009 (9)\n-0F631D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF631D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F6380 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F6382   Length              0005 (5)\n-0F6384   Flags               01 (1) 'Modification'\n-0F6385   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F6389 LOCAL HEADER #405     04034B50 (67324752)\n-0F638D Extract Zip Spec      14 (20) '2.0'\n-0F638E Extract OS            00 (0) 'MS-DOS'\n-0F638F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F6391 Compression Method    0000 (0) 'Stored'\n-0F6393 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F6397 CRC                   00000000 (0)\n-0F639B Compressed Size       00000000 (0)\n-0F639F Uncompressed Size     00000000 (0)\n-0F63A3 Filename Length       0079 (121)\n-0F63A5 Extra Length          0009 (9)\n-0F63A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF63A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F6420 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F6422   Length              0005 (5)\n-0F6424   Flags               01 (1) 'Modification'\n-0F6425   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F6429 PAYLOAD\n-\n-0F70D2 DATA DESCRIPTOR       08074B50 (134695760)\n-0F70D6 CRC                   673E5975 (1732139381)\n-0F70DA Compressed Size       00000CA9 (3241)\n-0F70DE Uncompressed Size     00000CA9 (3241)\n-\n-0F70E2 LOCAL HEADER #406     04034B50 (67324752)\n-0F70E6 Extract Zip Spec      14 (20) '2.0'\n-0F70E7 Extract OS            00 (0) 'MS-DOS'\n-0F70E8 General Purpose Flag  0000 (0)\n-0F70EA Compression Method    0000 (0) 'Stored'\n-0F70EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F70F0 CRC                   00000000 (0)\n-0F70F4 Compressed Size       00000000 (0)\n-0F70F8 Uncompressed Size     00000000 (0)\n-0F70FC Filename Length       0061 (97)\n-0F70FE Extra Length          0009 (9)\n-0F7100 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF7100: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F7161 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F7163   Length              0005 (5)\n-0F7165   Flags               01 (1) 'Modification'\n-0F7166   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F716A LOCAL HEADER #407     04034B50 (67324752)\n-0F716E Extract Zip Spec      14 (20) '2.0'\n-0F716F Extract OS            00 (0) 'MS-DOS'\n-0F7170 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F7172 Compression Method    0000 (0) 'Stored'\n-0F7174 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F7178 CRC                   00000000 (0)\n-0F717C Compressed Size       00000000 (0)\n-0F7180 Uncompressed Size     00000000 (0)\n-0F7184 Filename Length       0077 (119)\n-0F7186 Extra Length          0009 (9)\n-0F7188 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF7188: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F71FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F7201   Length              0005 (5)\n-0F7203   Flags               01 (1) 'Modification'\n-0F7204   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F7208 PAYLOAD\n-\n-0FC244 DATA DESCRIPTOR       08074B50 (134695760)\n-0FC248 CRC                   33033645 (855848517)\n-0FC24C Compressed Size       0000503C (20540)\n-0FC250 Uncompressed Size     0000503C (20540)\n-\n-0FC254 LOCAL HEADER #408     04034B50 (67324752)\n-0FC258 Extract Zip Spec      14 (20) '2.0'\n-0FC259 Extract OS            00 (0) 'MS-DOS'\n-0FC25A General Purpose Flag  0000 (0)\n-0FC25C Compression Method    0000 (0) 'Stored'\n-0FC25E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FC262 CRC                   00000000 (0)\n-0FC266 Compressed Size       00000000 (0)\n-0FC26A Uncompressed Size     00000000 (0)\n-0FC26E Filename Length       0064 (100)\n-0FC270 Extra Length          0009 (9)\n-0FC272 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFC272: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FC2D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FC2D8   Length              0005 (5)\n-0FC2DA   Flags               01 (1) 'Modification'\n-0FC2DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FC2DF LOCAL HEADER #409     04034B50 (67324752)\n-0FC2E3 Extract Zip Spec      14 (20) '2.0'\n-0FC2E4 Extract OS            00 (0) 'MS-DOS'\n-0FC2E5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FC2E7 Compression Method    0000 (0) 'Stored'\n-0FC2E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FC2ED CRC                   00000000 (0)\n-0FC2F1 Compressed Size       00000000 (0)\n-0FC2F5 Uncompressed Size     00000000 (0)\n-0FC2F9 Filename Length       007A (122)\n-0FC2FB Extra Length          0009 (9)\n-0FC2FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFC2FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FC377 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FC379   Length              0005 (5)\n-0FC37B   Flags               01 (1) 'Modification'\n-0FC37C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FC380 PAYLOAD\n-\n-0FCB8E DATA DESCRIPTOR       08074B50 (134695760)\n-0FCB92 CRC                   F5037A64 (4110645860)\n-0FCB96 Compressed Size       0000080E (2062)\n-0FCB9A Uncompressed Size     0000080E (2062)\n-\n-0FCB9E LOCAL HEADER #410     04034B50 (67324752)\n-0FCBA2 Extract Zip Spec      14 (20) '2.0'\n-0FCBA3 Extract OS            00 (0) 'MS-DOS'\n-0FCBA4 General Purpose Flag  0000 (0)\n-0FCBA6 Compression Method    0000 (0) 'Stored'\n-0FCBA8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FCBAC CRC                   00000000 (0)\n-0FCBB0 Compressed Size       00000000 (0)\n-0FCBB4 Uncompressed Size     00000000 (0)\n-0FCBB8 Filename Length       005A (90)\n-0FCBBA Extra Length          0009 (9)\n-0FCBBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFCBBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FCC16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FCC18   Length              0005 (5)\n-0FCC1A   Flags               01 (1) 'Modification'\n-0FCC1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FCC1F LOCAL HEADER #411     04034B50 (67324752)\n-0FCC23 Extract Zip Spec      14 (20) '2.0'\n-0FCC24 Extract OS            00 (0) 'MS-DOS'\n-0FCC25 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FCC27 Compression Method    0000 (0) 'Stored'\n-0FCC29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FCC2D CRC                   00000000 (0)\n-0FCC31 Compressed Size       00000000 (0)\n-0FCC35 Uncompressed Size     00000000 (0)\n-0FCC39 Filename Length       0070 (112)\n-0FCC3B Extra Length          0009 (9)\n-0FCC3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFCC3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FCCAD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FCCAF   Length              0005 (5)\n-0FCCB1   Flags               01 (1) 'Modification'\n-0FCCB2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FCCB6 PAYLOAD\n-\n-0FE73B DATA DESCRIPTOR       08074B50 (134695760)\n-0FE73F CRC                   DB187B38 (3675814712)\n-0FE743 Compressed Size       00001A85 (6789)\n-0FE747 Uncompressed Size     00001A85 (6789)\n-\n-0FE74B LOCAL HEADER #412     04034B50 (67324752)\n-0FE74F Extract Zip Spec      14 (20) '2.0'\n-0FE750 Extract OS            00 (0) 'MS-DOS'\n-0FE751 General Purpose Flag  0000 (0)\n-0FE753 Compression Method    0000 (0) 'Stored'\n-0FE755 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FE759 CRC                   00000000 (0)\n-0FE75D Compressed Size       00000000 (0)\n-0FE761 Uncompressed Size     00000000 (0)\n-0FE765 Filename Length       005B (91)\n-0FE767 Extra Length          0009 (9)\n-0FE769 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFE769: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FE7C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FE7C6   Length              0005 (5)\n-0FE7C8   Flags               01 (1) 'Modification'\n-0FE7C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FE7CD LOCAL HEADER #413     04034B50 (67324752)\n-0FE7D1 Extract Zip Spec      14 (20) '2.0'\n-0FE7D2 Extract OS            00 (0) 'MS-DOS'\n-0FE7D3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FE7D5 Compression Method    0000 (0) 'Stored'\n-0FE7D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FE7DB CRC                   00000000 (0)\n-0FE7DF Compressed Size       00000000 (0)\n-0FE7E3 Uncompressed Size     00000000 (0)\n-0FE7E7 Filename Length       0071 (113)\n-0FE7E9 Extra Length          0009 (9)\n-0FE7EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFE7EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FE85C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FE85E   Length              0005 (5)\n-0FE860   Flags               01 (1) 'Modification'\n-0FE861   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FE865 PAYLOAD\n-\n-1002D3 DATA DESCRIPTOR       08074B50 (134695760)\n-1002D7 CRC                   CD183667 (3440916071)\n-1002DB Compressed Size       00001A6E (6766)\n-1002DF Uncompressed Size     00001A6E (6766)\n-\n-1002E3 LOCAL HEADER #414     04034B50 (67324752)\n-1002E7 Extract Zip Spec      14 (20) '2.0'\n-1002E8 Extract OS            00 (0) 'MS-DOS'\n-1002E9 General Purpose Flag  0000 (0)\n-1002EB Compression Method    0000 (0) 'Stored'\n-1002ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1002F1 CRC                   00000000 (0)\n-1002F5 Compressed Size       00000000 (0)\n-1002F9 Uncompressed Size     00000000 (0)\n-1002FD Filename Length       005B (91)\n-1002FF Extra Length          0009 (9)\n-100301 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x100301: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10035C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10035E   Length              0005 (5)\n-100360   Flags               01 (1) 'Modification'\n-100361   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-100365 LOCAL HEADER #415     04034B50 (67324752)\n-100369 Extract Zip Spec      14 (20) '2.0'\n-10036A Extract OS            00 (0) 'MS-DOS'\n-10036B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10036D Compression Method    0000 (0) 'Stored'\n-10036F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-100373 CRC                   00000000 (0)\n-100377 Compressed Size       00000000 (0)\n-10037B Uncompressed Size     00000000 (0)\n-10037F Filename Length       0071 (113)\n-100381 Extra Length          0009 (9)\n-100383 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x100383: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1003F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1003F6   Length              0005 (5)\n-1003F8   Flags               01 (1) 'Modification'\n-1003F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1003FD PAYLOAD\n-\n-101E8F DATA DESCRIPTOR       08074B50 (134695760)\n-101E93 CRC                   0C7DD276 (209572470)\n-101E97 Compressed Size       00001A92 (6802)\n-101E9B Uncompressed Size     00001A92 (6802)\n-\n-101E9F LOCAL HEADER #416     04034B50 (67324752)\n-101EA3 Extract Zip Spec      14 (20) '2.0'\n-101EA4 Extract OS            00 (0) 'MS-DOS'\n-101EA5 General Purpose Flag  0000 (0)\n-101EA7 Compression Method    0000 (0) 'Stored'\n-101EA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-101EAD CRC                   00000000 (0)\n-101EB1 Compressed Size       00000000 (0)\n-101EB5 Uncompressed Size     00000000 (0)\n-101EB9 Filename Length       005C (92)\n-101EBB Extra Length          0009 (9)\n-101EBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x101EBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-101F19 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-101F1B   Length              0005 (5)\n-101F1D   Flags               01 (1) 'Modification'\n-101F1E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-101F22 LOCAL HEADER #417     04034B50 (67324752)\n-101F26 Extract Zip Spec      14 (20) '2.0'\n-101F27 Extract OS            00 (0) 'MS-DOS'\n-101F28 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-101F2A Compression Method    0000 (0) 'Stored'\n-101F2C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-101F30 CRC                   00000000 (0)\n-101F34 Compressed Size       00000000 (0)\n-101F38 Uncompressed Size     00000000 (0)\n-101F3C Filename Length       0072 (114)\n-101F3E Extra Length          0009 (9)\n-101F40 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x101F40: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-101FB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-101FB4   Length              0005 (5)\n-101FB6   Flags               01 (1) 'Modification'\n-101FB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-101FBB PAYLOAD\n-\n-1036EE DATA DESCRIPTOR       08074B50 (134695760)\n-1036F2 CRC                   60EA12C2 (1625952962)\n-1036F6 Compressed Size       00001733 (5939)\n-1036FA Uncompressed Size     00001733 (5939)\n-\n-1036FE LOCAL HEADER #418     04034B50 (67324752)\n-103702 Extract Zip Spec      14 (20) '2.0'\n-103703 Extract OS            00 (0) 'MS-DOS'\n-103704 General Purpose Flag  0000 (0)\n-103706 Compression Method    0000 (0) 'Stored'\n-103708 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10370C CRC                   00000000 (0)\n-103710 Compressed Size       00000000 (0)\n-103714 Uncompressed Size     00000000 (0)\n-103718 Filename Length       005F (95)\n-10371A Extra Length          0009 (9)\n-10371C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10371C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10377B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10377D   Length              0005 (5)\n-10377F   Flags               01 (1) 'Modification'\n-103780   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-103784 LOCAL HEADER #419     04034B50 (67324752)\n-103788 Extract Zip Spec      14 (20) '2.0'\n-103789 Extract OS            00 (0) 'MS-DOS'\n-10378A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10378C Compression Method    0000 (0) 'Stored'\n-10378E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-103792 CRC                   00000000 (0)\n-103796 Compressed Size       00000000 (0)\n-10379A Uncompressed Size     00000000 (0)\n-10379E Filename Length       0075 (117)\n-1037A0 Extra Length          0009 (9)\n-1037A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1037A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-103817 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-103819   Length              0005 (5)\n-10381B   Flags               01 (1) 'Modification'\n-10381C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-103820 PAYLOAD\n-\n-104E9D DATA DESCRIPTOR       08074B50 (134695760)\n-104EA1 CRC                   4BB1EABD (1269951165)\n-104EA5 Compressed Size       0000167D (5757)\n-104EA9 Uncompressed Size     0000167D (5757)\n-\n-104EAD LOCAL HEADER #420     04034B50 (67324752)\n-104EB1 Extract Zip Spec      14 (20) '2.0'\n-104EB2 Extract OS            00 (0) 'MS-DOS'\n-104EB3 General Purpose Flag  0000 (0)\n-104EB5 Compression Method    0000 (0) 'Stored'\n-104EB7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-104EBB CRC                   00000000 (0)\n-104EBF Compressed Size       00000000 (0)\n-104EC3 Uncompressed Size     00000000 (0)\n-104EC7 Filename Length       005F (95)\n-104EC9 Extra Length          0009 (9)\n-104ECB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x104ECB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-104F2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-104F2C   Length              0005 (5)\n-104F2E   Flags               01 (1) 'Modification'\n-104F2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-104F33 LOCAL HEADER #421     04034B50 (67324752)\n-104F37 Extract Zip Spec      14 (20) '2.0'\n-104F38 Extract OS            00 (0) 'MS-DOS'\n-104F39 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-104F3B Compression Method    0000 (0) 'Stored'\n-104F3D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-104F41 CRC                   00000000 (0)\n-104F45 Compressed Size       00000000 (0)\n-104F49 Uncompressed Size     00000000 (0)\n-104F4D Filename Length       0075 (117)\n-104F4F Extra Length          0009 (9)\n-104F51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x104F51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-104FC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-104FC8   Length              0005 (5)\n-104FCA   Flags               01 (1) 'Modification'\n-104FCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-104FCF PAYLOAD\n-\n-108259 DATA DESCRIPTOR       08074B50 (134695760)\n-10825D CRC                   A18A8EB9 (2710212281)\n-108261 Compressed Size       0000328A (12938)\n-108265 Uncompressed Size     0000328A (12938)\n-\n-108269 LOCAL HEADER #422     04034B50 (67324752)\n-10826D Extract Zip Spec      14 (20) '2.0'\n-10826E Extract OS            00 (0) 'MS-DOS'\n-10826F General Purpose Flag  0000 (0)\n-108271 Compression Method    0000 (0) 'Stored'\n-108273 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-108277 CRC                   00000000 (0)\n-10827B Compressed Size       00000000 (0)\n-10827F Uncompressed Size     00000000 (0)\n-108283 Filename Length       005E (94)\n-108285 Extra Length          0009 (9)\n-108287 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x108287: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1082E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1082E7   Length              0005 (5)\n-1082E9   Flags               01 (1) 'Modification'\n-1082EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1082EE LOCAL HEADER #423     04034B50 (67324752)\n-1082F2 Extract Zip Spec      14 (20) '2.0'\n-1082F3 Extract OS            00 (0) 'MS-DOS'\n-1082F4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1082F6 Compression Method    0000 (0) 'Stored'\n-1082F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1082FC CRC                   00000000 (0)\n-108300 Compressed Size       00000000 (0)\n-108304 Uncompressed Size     00000000 (0)\n-108308 Filename Length       0074 (116)\n-10830A Extra Length          0009 (9)\n-10830C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10830C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-108380 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-108382   Length              0005 (5)\n-108384   Flags               01 (1) 'Modification'\n-108385   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-108389 PAYLOAD\n-\n-10BC02 DATA DESCRIPTOR       08074B50 (134695760)\n-10BC06 CRC                   B7B762D6 (3082248918)\n-10BC0A Compressed Size       00003879 (14457)\n-10BC0E Uncompressed Size     00003879 (14457)\n-\n-10BC12 LOCAL HEADER #424     04034B50 (67324752)\n-10BC16 Extract Zip Spec      14 (20) '2.0'\n-10BC17 Extract OS            00 (0) 'MS-DOS'\n-10BC18 General Purpose Flag  0000 (0)\n-10BC1A Compression Method    0000 (0) 'Stored'\n-10BC1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10BC20 CRC                   00000000 (0)\n-10BC24 Compressed Size       00000000 (0)\n-10BC28 Uncompressed Size     00000000 (0)\n-10BC2C Filename Length       0062 (98)\n-10BC2E Extra Length          0009 (9)\n-10BC30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10BC30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10BC92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10BC94   Length              0005 (5)\n-10BC96   Flags               01 (1) 'Modification'\n-10BC97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-10BC9B LOCAL HEADER #425     04034B50 (67324752)\n-10BC9F Extract Zip Spec      14 (20) '2.0'\n-10BCA0 Extract OS            00 (0) 'MS-DOS'\n-10BCA1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10BCA3 Compression Method    0000 (0) 'Stored'\n-10BCA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10BCA9 CRC                   00000000 (0)\n-10BCAD Compressed Size       00000000 (0)\n-10BCB1 Uncompressed Size     00000000 (0)\n-10BCB5 Filename Length       0078 (120)\n-10BCB7 Extra Length          0009 (9)\n-10BCB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10BCB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10BD31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10BD33   Length              0005 (5)\n-10BD35   Flags               01 (1) 'Modification'\n-10BD36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10BD3A PAYLOAD\n-\n-10DE8A DATA DESCRIPTOR       08074B50 (134695760)\n-10DE8E CRC                   A2B9D29A (2730087066)\n-10DE92 Compressed Size       00002150 (8528)\n-10DE96 Uncompressed Size     00002150 (8528)\n-\n-10DE9A LOCAL HEADER #426     04034B50 (67324752)\n-10DE9E Extract Zip Spec      14 (20) '2.0'\n-10DE9F Extract OS            00 (0) 'MS-DOS'\n-10DEA0 General Purpose Flag  0000 (0)\n-10DEA2 Compression Method    0000 (0) 'Stored'\n-10DEA4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10DEA8 CRC                   00000000 (0)\n-10DEAC Compressed Size       00000000 (0)\n-10DEB0 Uncompressed Size     00000000 (0)\n-10DEB4 Filename Length       005B (91)\n-10DEB6 Extra Length          0009 (9)\n-10DEB8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10DEB8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10DF13 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10DF15   Length              0005 (5)\n-10DF17   Flags               01 (1) 'Modification'\n-10DF18   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-10DF1C LOCAL HEADER #427     04034B50 (67324752)\n-10DF20 Extract Zip Spec      14 (20) '2.0'\n-10DF21 Extract OS            00 (0) 'MS-DOS'\n-10DF22 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10DF24 Compression Method    0000 (0) 'Stored'\n-10DF26 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10DF2A CRC                   00000000 (0)\n-10DF2E Compressed Size       00000000 (0)\n-10DF32 Uncompressed Size     00000000 (0)\n-10DF36 Filename Length       0071 (113)\n-10DF38 Extra Length          0009 (9)\n-10DF3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10DF3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10DFAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10DFAD   Length              0005 (5)\n-10DFAF   Flags               01 (1) 'Modification'\n-10DFB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10DFB4 PAYLOAD\n-\n-10F190 DATA DESCRIPTOR       08074B50 (134695760)\n-10F194 CRC                   C4FC7EA2 (3304881826)\n-10F198 Compressed Size       000011DC (4572)\n-10F19C Uncompressed Size     000011DC (4572)\n-\n-10F1A0 LOCAL HEADER #428     04034B50 (67324752)\n-10F1A4 Extract Zip Spec      14 (20) '2.0'\n-10F1A5 Extract OS            00 (0) 'MS-DOS'\n-10F1A6 General Purpose Flag  0000 (0)\n-10F1A8 Compression Method    0000 (0) 'Stored'\n-10F1AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10F1AE CRC                   00000000 (0)\n-10F1B2 Compressed Size       00000000 (0)\n-10F1B6 Uncompressed Size     00000000 (0)\n-10F1BA Filename Length       005E (94)\n-10F1BC Extra Length          0009 (9)\n-10F1BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10F1BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10F21C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10F21E   Length              0005 (5)\n-10F220   Flags               01 (1) 'Modification'\n-10F221   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-10F225 LOCAL HEADER #429     04034B50 (67324752)\n-10F229 Extract Zip Spec      14 (20) '2.0'\n-10F22A Extract OS            00 (0) 'MS-DOS'\n-10F22B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10F22D Compression Method    0000 (0) 'Stored'\n-10F22F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10F233 CRC                   00000000 (0)\n-10F237 Compressed Size       00000000 (0)\n-10F23B Uncompressed Size     00000000 (0)\n-10F23F Filename Length       0074 (116)\n-10F241 Extra Length          0009 (9)\n-10F243 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10F243: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10F2B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10F2B9   Length              0005 (5)\n-10F2BB   Flags               01 (1) 'Modification'\n-10F2BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10F2C0 PAYLOAD\n-\n-1165BB DATA DESCRIPTOR       08074B50 (134695760)\n-1165BF CRC                   EE30A8D8 (3996166360)\n-1165C3 Compressed Size       000072FB (29435)\n-1165C7 Uncompressed Size     000072FB (29435)\n-\n-1165CB LOCAL HEADER #430     04034B50 (67324752)\n-1165CF Extract Zip Spec      14 (20) '2.0'\n-1165D0 Extract OS            00 (0) 'MS-DOS'\n-1165D1 General Purpose Flag  0000 (0)\n-1165D3 Compression Method    0000 (0) 'Stored'\n-1165D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1165D9 CRC                   00000000 (0)\n-1165DD Compressed Size       00000000 (0)\n-1165E1 Uncompressed Size     00000000 (0)\n-1165E5 Filename Length       0064 (100)\n-1165E7 Extra Length          0009 (9)\n-1165E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1165E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11664D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11664F   Length              0005 (5)\n-116651   Flags               01 (1) 'Modification'\n-116652   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-116656 LOCAL HEADER #431     04034B50 (67324752)\n-11665A Extract Zip Spec      14 (20) '2.0'\n-11665B Extract OS            00 (0) 'MS-DOS'\n-11665C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-11665E Compression Method    0000 (0) 'Stored'\n-116660 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-116664 CRC                   00000000 (0)\n-116668 Compressed Size       00000000 (0)\n-11666C Uncompressed Size     00000000 (0)\n-116670 Filename Length       007A (122)\n-116672 Extra Length          0009 (9)\n-116674 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x116674: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1166EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1166F0   Length              0005 (5)\n-1166F2   Flags               01 (1) 'Modification'\n-1166F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1166F7 PAYLOAD\n-\n-11AF05 DATA DESCRIPTOR       08074B50 (134695760)\n-11AF09 CRC                   EA36353C (3929421116)\n-11AF0D Compressed Size       0000480E (18446)\n-11AF11 Uncompressed Size     0000480E (18446)\n-\n-11AF15 LOCAL HEADER #432     04034B50 (67324752)\n-11AF19 Extract Zip Spec      14 (20) '2.0'\n-11AF1A Extract OS            00 (0) 'MS-DOS'\n-11AF1B General Purpose Flag  0000 (0)\n-11AF1D Compression Method    0000 (0) 'Stored'\n-11AF1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11AF23 CRC                   00000000 (0)\n-11AF27 Compressed Size       00000000 (0)\n-11AF2B Uncompressed Size     00000000 (0)\n-11AF2F Filename Length       0063 (99)\n-11AF31 Extra Length          0009 (9)\n-11AF33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11AF33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11AF96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11AF98   Length              0005 (5)\n-11AF9A   Flags               01 (1) 'Modification'\n-11AF9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-11AF9F LOCAL HEADER #433     04034B50 (67324752)\n-11AFA3 Extract Zip Spec      14 (20) '2.0'\n-11AFA4 Extract OS            00 (0) 'MS-DOS'\n-11AFA5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-11AFA7 Compression Method    0000 (0) 'Stored'\n-11AFA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11AFAD CRC                   00000000 (0)\n-11AFB1 Compressed Size       00000000 (0)\n-11AFB5 Uncompressed Size     00000000 (0)\n-11AFB9 Filename Length       0079 (121)\n-11AFBB Extra Length          0009 (9)\n-11AFBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11AFBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11B036 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11B038   Length              0005 (5)\n-11B03A   Flags               01 (1) 'Modification'\n-11B03B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-11B03F PAYLOAD\n-\n-11B7F5 DATA DESCRIPTOR       08074B50 (134695760)\n-11B7F9 CRC                   CA474DE0 (3393670624)\n-11B7FD Compressed Size       000007B6 (1974)\n-11B801 Uncompressed Size     000007B6 (1974)\n-\n-11B805 LOCAL HEADER #434     04034B50 (67324752)\n-11B809 Extract Zip Spec      14 (20) '2.0'\n-11B80A Extract OS            00 (0) 'MS-DOS'\n-11B80B General Purpose Flag  0000 (0)\n-11B80D Compression Method    0000 (0) 'Stored'\n-11B80F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11B813 CRC                   00000000 (0)\n-11B817 Compressed Size       00000000 (0)\n-11B81B Uncompressed Size     00000000 (0)\n-11B81F Filename Length       005F (95)\n-11B821 Extra Length          0009 (9)\n-11B823 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11B823: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11B882 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11B884   Length              0005 (5)\n-11B886   Flags               01 (1) 'Modification'\n-11B887   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-11B88B LOCAL HEADER #435     04034B50 (67324752)\n-11B88F Extract Zip Spec      14 (20) '2.0'\n-11B890 Extract OS            00 (0) 'MS-DOS'\n-11B891 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-11B893 Compression Method    0000 (0) 'Stored'\n-11B895 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11B899 CRC                   00000000 (0)\n-11B89D Compressed Size       00000000 (0)\n-11B8A1 Uncompressed Size     00000000 (0)\n-11B8A5 Filename Length       0075 (117)\n-11B8A7 Extra Length          0009 (9)\n-11B8A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11B8A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11B91E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11B920   Length              0005 (5)\n-11B922   Flags               01 (1) 'Modification'\n-11B923   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-11B927 PAYLOAD\n-\n-11CAF2 DATA DESCRIPTOR       08074B50 (134695760)\n-11CAF6 CRC                   A19F99D4 (2711591380)\n-11CAFA Compressed Size       000011CB (4555)\n-11CAFE Uncompressed Size     000011CB (4555)\n-\n-11CB02 LOCAL HEADER #436     04034B50 (67324752)\n-11CB06 Extract Zip Spec      14 (20) '2.0'\n-11CB07 Extract OS            00 (0) 'MS-DOS'\n-11CB08 General Purpose Flag  0000 (0)\n-11CB0A Compression Method    0000 (0) 'Stored'\n-11CB0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11CB10 CRC                   00000000 (0)\n-11CB14 Compressed Size       00000000 (0)\n-11CB18 Uncompressed Size     00000000 (0)\n-11CB1C Filename Length       005B (91)\n-11CB1E Extra Length          0009 (9)\n-11CB20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11CB20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11CB7B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11CB7D   Length              0005 (5)\n-11CB7F   Flags               01 (1) 'Modification'\n-11CB80   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-11CB84 LOCAL HEADER #437     04034B50 (67324752)\n-11CB88 Extract Zip Spec      14 (20) '2.0'\n-11CB89 Extract OS            00 (0) 'MS-DOS'\n-11CB8A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-11CB8C Compression Method    0000 (0) 'Stored'\n-11CB8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11CB92 CRC                   00000000 (0)\n-11CB96 Compressed Size       00000000 (0)\n-11CB9A Uncompressed Size     00000000 (0)\n-11CB9E Filename Length       0071 (113)\n-11CBA0 Extra Length          0009 (9)\n-11CBA2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11CBA2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11CC13 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11CC15   Length              0005 (5)\n-11CC17   Flags               01 (1) 'Modification'\n-11CC18   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-11CC1C PAYLOAD\n-\n-11F46B DATA DESCRIPTOR       08074B50 (134695760)\n-11F46F CRC                   7573E84B (1970530379)\n-11F473 Compressed Size       0000284F (10319)\n-11F477 Uncompressed Size     0000284F (10319)\n-\n-11F47B LOCAL HEADER #438     04034B50 (67324752)\n-11F47F Extract Zip Spec      14 (20) '2.0'\n-11F480 Extract OS            00 (0) 'MS-DOS'\n-11F481 General Purpose Flag  0000 (0)\n-11F483 Compression Method    0000 (0) 'Stored'\n-11F485 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11F489 CRC                   00000000 (0)\n-11F48D Compressed Size       00000000 (0)\n-11F491 Uncompressed Size     00000000 (0)\n-11F495 Filename Length       005F (95)\n-11F497 Extra Length          0009 (9)\n-11F499 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11F499: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11F4F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11F4FA   Length              0005 (5)\n-11F4FC   Flags               01 (1) 'Modification'\n-11F4FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-11F501 LOCAL HEADER #439     04034B50 (67324752)\n-11F505 Extract Zip Spec      14 (20) '2.0'\n-11F506 Extract OS            00 (0) 'MS-DOS'\n-11F507 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-11F509 Compression Method    0000 (0) 'Stored'\n-11F50B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11F50F CRC                   00000000 (0)\n-11F513 Compressed Size       00000000 (0)\n-11F517 Uncompressed Size     00000000 (0)\n-11F51B Filename Length       0075 (117)\n-11F51D Extra Length          0009 (9)\n-11F51F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11F51F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11F594 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11F596   Length              0005 (5)\n-11F598   Flags               01 (1) 'Modification'\n-11F599   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-11F59D PAYLOAD\n-\n-121D14 DATA DESCRIPTOR       08074B50 (134695760)\n-121D18 CRC                   131CB9D8 (320649688)\n-121D1C Compressed Size       00002777 (10103)\n-121D20 Uncompressed Size     00002777 (10103)\n-\n-121D24 LOCAL HEADER #440     04034B50 (67324752)\n-121D28 Extract Zip Spec      14 (20) '2.0'\n-121D29 Extract OS            00 (0) 'MS-DOS'\n-121D2A General Purpose Flag  0000 (0)\n-121D2C Compression Method    0000 (0) 'Stored'\n-121D2E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-121D32 CRC                   00000000 (0)\n-121D36 Compressed Size       00000000 (0)\n-121D3A Uncompressed Size     00000000 (0)\n-121D3E Filename Length       005E (94)\n-121D40 Extra Length          0009 (9)\n-121D42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x121D42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-121DA0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-121DA2   Length              0005 (5)\n-121DA4   Flags               01 (1) 'Modification'\n-121DA5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-121DA9 LOCAL HEADER #441     04034B50 (67324752)\n-121DAD Extract Zip Spec      14 (20) '2.0'\n-121DAE Extract OS            00 (0) 'MS-DOS'\n-121DAF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-121DB1 Compression Method    0000 (0) 'Stored'\n-121DB3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-121DB7 CRC                   00000000 (0)\n-121DBB Compressed Size       00000000 (0)\n-121DBF Uncompressed Size     00000000 (0)\n-121DC3 Filename Length       0074 (116)\n-121DC5 Extra Length          0009 (9)\n-121DC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x121DC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-121E3B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-121E3D   Length              0005 (5)\n-121E3F   Flags               01 (1) 'Modification'\n-121E40   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-121E44 PAYLOAD\n-\n-122F51 DATA DESCRIPTOR       08074B50 (134695760)\n-122F55 CRC                   95FAB1DA (2516234714)\n-122F59 Compressed Size       0000110D (4365)\n-122F5D Uncompressed Size     0000110D (4365)\n-\n-122F61 LOCAL HEADER #442     04034B50 (67324752)\n-122F65 Extract Zip Spec      14 (20) '2.0'\n-122F66 Extract OS            00 (0) 'MS-DOS'\n-122F67 General Purpose Flag  0000 (0)\n-122F69 Compression Method    0000 (0) 'Stored'\n-122F6B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-122F6F CRC                   00000000 (0)\n-122F73 Compressed Size       00000000 (0)\n-122F77 Uncompressed Size     00000000 (0)\n-122F7B Filename Length       0061 (97)\n-122F7D Extra Length          0009 (9)\n-122F7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x122F7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-122FE0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-122FE2   Length              0005 (5)\n-122FE4   Flags               01 (1) 'Modification'\n-122FE5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-122FE9 LOCAL HEADER #443     04034B50 (67324752)\n-122FED Extract Zip Spec      14 (20) '2.0'\n-122FEE Extract OS            00 (0) 'MS-DOS'\n-122FEF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-122FF1 Compression Method    0000 (0) 'Stored'\n-122FF3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-122FF7 CRC                   00000000 (0)\n-122FFB Compressed Size       00000000 (0)\n-122FFF Uncompressed Size     00000000 (0)\n-123003 Filename Length       0077 (119)\n-123005 Extra Length          0009 (9)\n-123007 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x123007: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-12307E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-123080   Length              0005 (5)\n-123082   Flags               01 (1) 'Modification'\n-123083   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-123087 PAYLOAD\n-\n-124A5D DATA DESCRIPTOR       08074B50 (134695760)\n-124A61 CRC                   B1E82858 (2984781912)\n-124A65 Compressed Size       000019D6 (6614)\n-124A69 Uncompressed Size     000019D6 (6614)\n-\n-124A6D LOCAL HEADER #444     04034B50 (67324752)\n-124A71 Extract Zip Spec      14 (20) '2.0'\n-124A72 Extract OS            00 (0) 'MS-DOS'\n-124A73 General Purpose Flag  0000 (0)\n-124A75 Compression Method    0000 (0) 'Stored'\n-124A77 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-124A7B CRC                   00000000 (0)\n-124A7F Compressed Size       00000000 (0)\n-124A83 Uncompressed Size     00000000 (0)\n-124A87 Filename Length       005E (94)\n-124A89 Extra Length          0009 (9)\n-124A8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x124A8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-124AE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-124AEB   Length              0005 (5)\n-124AED   Flags               01 (1) 'Modification'\n-124AEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-124AF2 LOCAL HEADER #445     04034B50 (67324752)\n-124AF6 Extract Zip Spec      14 (20) '2.0'\n-124AF7 Extract OS            00 (0) 'MS-DOS'\n-124AF8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-124AFA Compression Method    0000 (0) 'Stored'\n-124AFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-124B00 CRC                   00000000 (0)\n-124B04 Compressed Size       00000000 (0)\n-124B08 Uncompressed Size     00000000 (0)\n-124B0C Filename Length       0074 (116)\n-124B0E Extra Length          0009 (9)\n-124B10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x124B10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-124B84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-124B86   Length              0005 (5)\n-124B88   Flags               01 (1) 'Modification'\n-124B89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-124B8D PAYLOAD\n-\n-125B0B DATA DESCRIPTOR       08074B50 (134695760)\n-125B0F CRC                   EA13965E (3927152222)\n-125B13 Compressed Size       00000F7E (3966)\n-125B17 Uncompressed Size     00000F7E (3966)\n-\n-125B1B LOCAL HEADER #446     04034B50 (67324752)\n-125B1F Extract Zip Spec      14 (20) '2.0'\n-125B20 Extract OS            00 (0) 'MS-DOS'\n-125B21 General Purpose Flag  0000 (0)\n-125B23 Compression Method    0000 (0) 'Stored'\n-125B25 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-125B29 CRC                   00000000 (0)\n-125B2D Compressed Size       00000000 (0)\n-125B31 Uncompressed Size     00000000 (0)\n-125B35 Filename Length       0057 (87)\n-125B37 Extra Length          0009 (9)\n-125B39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x125B39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-125B90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-125B92   Length              0005 (5)\n-125B94   Flags               01 (1) 'Modification'\n-125B95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-125B99 LOCAL HEADER #447     04034B50 (67324752)\n-125B9D Extract Zip Spec      14 (20) '2.0'\n-125B9E Extract OS            00 (0) 'MS-DOS'\n-125B9F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-125BA1 Compression Method    0000 (0) 'Stored'\n-125BA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-125BA7 CRC                   00000000 (0)\n-125BAB Compressed Size       00000000 (0)\n-125BAF Uncompressed Size     00000000 (0)\n-125BB3 Filename Length       006D (109)\n-125BB5 Extra Length          0009 (9)\n-125BB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x125BB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-125C24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-125C26   Length              0005 (5)\n-125C28   Flags               01 (1) 'Modification'\n-125C29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-125C2D PAYLOAD\n-\n-128903 DATA DESCRIPTOR       08074B50 (134695760)\n-128907 CRC                   C8903588 (3364894088)\n-12890B Compressed Size       00002CD6 (11478)\n-12890F Uncompressed Size     00002CD6 (11478)\n-\n-128913 LOCAL HEADER #448     04034B50 (67324752)\n-128917 Extract Zip Spec      14 (20) '2.0'\n-128918 Extract OS            00 (0) 'MS-DOS'\n-128919 General Purpose Flag  0000 (0)\n-12891B Compression Method    0000 (0) 'Stored'\n-12891D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-128921 CRC                   00000000 (0)\n-128925 Compressed Size       00000000 (0)\n-128929 Uncompressed Size     00000000 (0)\n-12892D Filename Length       0068 (104)\n-12892F Extra Length          0009 (9)\n-128931 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x128931: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-128999 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-12899B   Length              0005 (5)\n-12899D   Flags               01 (1) 'Modification'\n-12899E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1289A2 LOCAL HEADER #449     04034B50 (67324752)\n-1289A6 Extract Zip Spec      14 (20) '2.0'\n-1289A7 Extract OS            00 (0) 'MS-DOS'\n-1289A8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1289AA Compression Method    0000 (0) 'Stored'\n-1289AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1289B0 CRC                   00000000 (0)\n-1289B4 Compressed Size       00000000 (0)\n-1289B8 Uncompressed Size     00000000 (0)\n-1289BC Filename Length       007E (126)\n-1289BE Extra Length          0009 (9)\n-1289C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1289C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-128A3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-128A40   Length              0005 (5)\n-128A42   Flags               01 (1) 'Modification'\n-128A43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-128A47 PAYLOAD\n-\n-129476 DATA DESCRIPTOR       08074B50 (134695760)\n-12947A CRC                   D19560D0 (3516227792)\n-12947E Compressed Size       00000A2F (2607)\n-129482 Uncompressed Size     00000A2F (2607)\n-\n-129486 LOCAL HEADER #450     04034B50 (67324752)\n-12948A Extract Zip Spec      14 (20) '2.0'\n-12948B Extract OS            00 (0) 'MS-DOS'\n-12948C General Purpose Flag  0000 (0)\n-12948E Compression Method    0000 (0) 'Stored'\n-129490 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-129494 CRC                   00000000 (0)\n-129498 Compressed Size       00000000 (0)\n-12949C Uncompressed Size     00000000 (0)\n-1294A0 Filename Length       0032 (50)\n-1294A2 Extra Length          0009 (9)\n-1294A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1294A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1294D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1294D8   Length              0005 (5)\n-1294DA   Flags               01 (1) 'Modification'\n-1294DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1294DF LOCAL HEADER #451     04034B50 (67324752)\n-1294E3 Extract Zip Spec      14 (20) '2.0'\n-1294E4 Extract OS            00 (0) 'MS-DOS'\n-1294E5 General Purpose Flag  0000 (0)\n-1294E7 Compression Method    0000 (0) 'Stored'\n-1294E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1294ED CRC                   00000000 (0)\n-1294F1 Compressed Size       00000000 (0)\n-1294F5 Uncompressed Size     00000000 (0)\n-1294F9 Filename Length       0039 (57)\n-1294FB Extra Length          0009 (9)\n-1294FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1294FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-129536 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-129538   Length              0005 (5)\n-12953A   Flags               01 (1) 'Modification'\n-12953B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-12953F LOCAL HEADER #452     04034B50 (67324752)\n-129543 Extract Zip Spec      14 (20) '2.0'\n-129544 Extract OS            00 (0) 'MS-DOS'\n-129545 General Purpose Flag  0000 (0)\n-129547 Compression Method    0000 (0) 'Stored'\n-129549 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-12954D CRC                   00000000 (0)\n-129551 Compressed Size       00000000 (0)\n-129555 Uncompressed Size     00000000 (0)\n-129559 Filename Length       006F (111)\n-12955B Extra Length          0009 (9)\n-12955D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x12955D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1295CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1295CE   Length              0005 (5)\n-1295D0   Flags               01 (1) 'Modification'\n-1295D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1295D5 LOCAL HEADER #453     04034B50 (67324752)\n-1295D9 Extract Zip Spec      14 (20) '2.0'\n-1295DA Extract OS            00 (0) 'MS-DOS'\n-1295DB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1295DD Compression Method    0000 (0) 'Stored'\n-1295DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1295E3 CRC                   00000000 (0)\n-1295E7 Compressed Size       00000000 (0)\n-1295EB Uncompressed Size     00000000 (0)\n-1295EF Filename Length       0085 (133)\n-1295F1 Extra Length          0009 (9)\n-1295F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0DD0B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DD0B8   Length              0005 (5)\n+0DD0BA   Flags               01 (1) 'Modification'\n+0DD0BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DD0BF PAYLOAD\n+\n+0DE769 DATA DESCRIPTOR       08074B50 (134695760)\n+0DE76D CRC                   3DE98548 (1038714184)\n+0DE771 Compressed Size       000016AA (5802)\n+0DE775 Uncompressed Size     000016AA (5802)\n+\n+0DE779 LOCAL HEADER #338     04034B50 (67324752)\n+0DE77D Extract Zip Spec      14 (20) '2.0'\n+0DE77E Extract OS            00 (0) 'MS-DOS'\n+0DE77F General Purpose Flag  0000 (0)\n+0DE781 Compression Method    0000 (0) 'Stored'\n+0DE783 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DE787 CRC                   00000000 (0)\n+0DE78B Compressed Size       00000000 (0)\n+0DE78F Uncompressed Size     00000000 (0)\n+0DE793 Filename Length       0024 (36)\n+0DE795 Extra Length          0009 (9)\n+0DE797 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDE797: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DE7BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DE7BD   Length              0005 (5)\n+0DE7BF   Flags               01 (1) 'Modification'\n+0DE7C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DE7C4 LOCAL HEADER #339     04034B50 (67324752)\n+0DE7C8 Extract Zip Spec      14 (20) '2.0'\n+0DE7C9 Extract OS            00 (0) 'MS-DOS'\n+0DE7CA General Purpose Flag  0000 (0)\n+0DE7CC Compression Method    0000 (0) 'Stored'\n+0DE7CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DE7D2 CRC                   00000000 (0)\n+0DE7D6 Compressed Size       00000000 (0)\n+0DE7DA Uncompressed Size     00000000 (0)\n+0DE7DE Filename Length       002B (43)\n+0DE7E0 Extra Length          0009 (9)\n+0DE7E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDE7E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DE80D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DE80F   Length              0005 (5)\n+0DE811   Flags               01 (1) 'Modification'\n+0DE812   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DE816 LOCAL HEADER #340     04034B50 (67324752)\n+0DE81A Extract Zip Spec      14 (20) '2.0'\n+0DE81B Extract OS            00 (0) 'MS-DOS'\n+0DE81C General Purpose Flag  0000 (0)\n+0DE81E Compression Method    0000 (0) 'Stored'\n+0DE820 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DE824 CRC                   00000000 (0)\n+0DE828 Compressed Size       00000000 (0)\n+0DE82C Uncompressed Size     00000000 (0)\n+0DE830 Filename Length       0056 (86)\n+0DE832 Extra Length          0009 (9)\n+0DE834 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDE834: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DE88A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DE88C   Length              0005 (5)\n+0DE88E   Flags               01 (1) 'Modification'\n+0DE88F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DE893 LOCAL HEADER #341     04034B50 (67324752)\n+0DE897 Extract Zip Spec      14 (20) '2.0'\n+0DE898 Extract OS            00 (0) 'MS-DOS'\n+0DE899 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DE89B Compression Method    0000 (0) 'Stored'\n+0DE89D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DE8A1 CRC                   00000000 (0)\n+0DE8A5 Compressed Size       00000000 (0)\n+0DE8A9 Uncompressed Size     00000000 (0)\n+0DE8AD Filename Length       006C (108)\n+0DE8AF Extra Length          0009 (9)\n+0DE8B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDE8B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DE91D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DE91F   Length              0005 (5)\n+0DE921   Flags               01 (1) 'Modification'\n+0DE922   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DE926 PAYLOAD\n+\n+0DFEBB DATA DESCRIPTOR       08074B50 (134695760)\n+0DFEBF CRC                   F32265E7 (4079117799)\n+0DFEC3 Compressed Size       00001595 (5525)\n+0DFEC7 Uncompressed Size     00001595 (5525)\n+\n+0DFECB LOCAL HEADER #342     04034B50 (67324752)\n+0DFECF Extract Zip Spec      14 (20) '2.0'\n+0DFED0 Extract OS            00 (0) 'MS-DOS'\n+0DFED1 General Purpose Flag  0000 (0)\n+0DFED3 Compression Method    0000 (0) 'Stored'\n+0DFED5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DFED9 CRC                   00000000 (0)\n+0DFEDD Compressed Size       00000000 (0)\n+0DFEE1 Uncompressed Size     00000000 (0)\n+0DFEE5 Filename Length       0059 (89)\n+0DFEE7 Extra Length          0009 (9)\n+0DFEE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDFEE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DFF42 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DFF44   Length              0005 (5)\n+0DFF46   Flags               01 (1) 'Modification'\n+0DFF47   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DFF4B LOCAL HEADER #343     04034B50 (67324752)\n+0DFF4F Extract Zip Spec      14 (20) '2.0'\n+0DFF50 Extract OS            00 (0) 'MS-DOS'\n+0DFF51 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DFF53 Compression Method    0000 (0) 'Stored'\n+0DFF55 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DFF59 CRC                   00000000 (0)\n+0DFF5D Compressed Size       00000000 (0)\n+0DFF61 Uncompressed Size     00000000 (0)\n+0DFF65 Filename Length       006F (111)\n+0DFF67 Extra Length          0009 (9)\n+0DFF69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDFF69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DFFD8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DFFDA   Length              0005 (5)\n+0DFFDC   Flags               01 (1) 'Modification'\n+0DFFDD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DFFE1 PAYLOAD\n+\n+0E137A DATA DESCRIPTOR       08074B50 (134695760)\n+0E137E CRC                   33231FD5 (857939925)\n+0E1382 Compressed Size       00001399 (5017)\n+0E1386 Uncompressed Size     00001399 (5017)\n+\n+0E138A LOCAL HEADER #344     04034B50 (67324752)\n+0E138E Extract Zip Spec      14 (20) '2.0'\n+0E138F Extract OS            00 (0) 'MS-DOS'\n+0E1390 General Purpose Flag  0000 (0)\n+0E1392 Compression Method    0000 (0) 'Stored'\n+0E1394 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E1398 CRC                   00000000 (0)\n+0E139C Compressed Size       00000000 (0)\n+0E13A0 Uncompressed Size     00000000 (0)\n+0E13A4 Filename Length       0055 (85)\n+0E13A6 Extra Length          0009 (9)\n+0E13A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE13A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E13FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E13FF   Length              0005 (5)\n+0E1401   Flags               01 (1) 'Modification'\n+0E1402   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E1406 LOCAL HEADER #345     04034B50 (67324752)\n+0E140A Extract Zip Spec      14 (20) '2.0'\n+0E140B Extract OS            00 (0) 'MS-DOS'\n+0E140C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E140E Compression Method    0000 (0) 'Stored'\n+0E1410 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E1414 CRC                   00000000 (0)\n+0E1418 Compressed Size       00000000 (0)\n+0E141C Uncompressed Size     00000000 (0)\n+0E1420 Filename Length       006B (107)\n+0E1422 Extra Length          0009 (9)\n+0E1424 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE1424: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E148F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E1491   Length              0005 (5)\n+0E1493   Flags               01 (1) 'Modification'\n+0E1494   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E1498 PAYLOAD\n+\n+0E1F93 DATA DESCRIPTOR       08074B50 (134695760)\n+0E1F97 CRC                   62A57B9F (1655012255)\n+0E1F9B Compressed Size       00000AFB (2811)\n+0E1F9F Uncompressed Size     00000AFB (2811)\n+\n+0E1FA3 LOCAL HEADER #346     04034B50 (67324752)\n+0E1FA7 Extract Zip Spec      14 (20) '2.0'\n+0E1FA8 Extract OS            00 (0) 'MS-DOS'\n+0E1FA9 General Purpose Flag  0000 (0)\n+0E1FAB Compression Method    0000 (0) 'Stored'\n+0E1FAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E1FB1 CRC                   00000000 (0)\n+0E1FB5 Compressed Size       00000000 (0)\n+0E1FB9 Uncompressed Size     00000000 (0)\n+0E1FBD Filename Length       0023 (35)\n+0E1FBF Extra Length          0009 (9)\n+0E1FC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE1FC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E1FE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E1FE6   Length              0005 (5)\n+0E1FE8   Flags               01 (1) 'Modification'\n+0E1FE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E1FED LOCAL HEADER #347     04034B50 (67324752)\n+0E1FF1 Extract Zip Spec      14 (20) '2.0'\n+0E1FF2 Extract OS            00 (0) 'MS-DOS'\n+0E1FF3 General Purpose Flag  0000 (0)\n+0E1FF5 Compression Method    0000 (0) 'Stored'\n+0E1FF7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E1FFB CRC                   00000000 (0)\n+0E1FFF Compressed Size       00000000 (0)\n+0E2003 Uncompressed Size     00000000 (0)\n+0E2007 Filename Length       002A (42)\n+0E2009 Extra Length          0009 (9)\n+0E200B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE200B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E2035 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E2037   Length              0005 (5)\n+0E2039   Flags               01 (1) 'Modification'\n+0E203A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E203E LOCAL HEADER #348     04034B50 (67324752)\n+0E2042 Extract Zip Spec      14 (20) '2.0'\n+0E2043 Extract OS            00 (0) 'MS-DOS'\n+0E2044 General Purpose Flag  0000 (0)\n+0E2046 Compression Method    0000 (0) 'Stored'\n+0E2048 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E204C CRC                   00000000 (0)\n+0E2050 Compressed Size       00000000 (0)\n+0E2054 Uncompressed Size     00000000 (0)\n+0E2058 Filename Length       0052 (82)\n+0E205A Extra Length          0009 (9)\n+0E205C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE205C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E20AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E20B0   Length              0005 (5)\n+0E20B2   Flags               01 (1) 'Modification'\n+0E20B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E20B7 LOCAL HEADER #349     04034B50 (67324752)\n+0E20BB Extract Zip Spec      14 (20) '2.0'\n+0E20BC Extract OS            00 (0) 'MS-DOS'\n+0E20BD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E20BF Compression Method    0000 (0) 'Stored'\n+0E20C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E20C5 CRC                   00000000 (0)\n+0E20C9 Compressed Size       00000000 (0)\n+0E20CD Uncompressed Size     00000000 (0)\n+0E20D1 Filename Length       0068 (104)\n+0E20D3 Extra Length          0009 (9)\n+0E20D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE20D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E213D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E213F   Length              0005 (5)\n+0E2141   Flags               01 (1) 'Modification'\n+0E2142   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E2146 PAYLOAD\n+\n+0E2E3E DATA DESCRIPTOR       08074B50 (134695760)\n+0E2E42 CRC                   63C353AF (1673745327)\n+0E2E46 Compressed Size       00000CF8 (3320)\n+0E2E4A Uncompressed Size     00000CF8 (3320)\n+\n+0E2E4E LOCAL HEADER #350     04034B50 (67324752)\n+0E2E52 Extract Zip Spec      14 (20) '2.0'\n+0E2E53 Extract OS            00 (0) 'MS-DOS'\n+0E2E54 General Purpose Flag  0000 (0)\n+0E2E56 Compression Method    0000 (0) 'Stored'\n+0E2E58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E2E5C CRC                   00000000 (0)\n+0E2E60 Compressed Size       00000000 (0)\n+0E2E64 Uncompressed Size     00000000 (0)\n+0E2E68 Filename Length       0059 (89)\n+0E2E6A Extra Length          0009 (9)\n+0E2E6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE2E6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E2EC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E2EC7   Length              0005 (5)\n+0E2EC9   Flags               01 (1) 'Modification'\n+0E2ECA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E2ECE LOCAL HEADER #351     04034B50 (67324752)\n+0E2ED2 Extract Zip Spec      14 (20) '2.0'\n+0E2ED3 Extract OS            00 (0) 'MS-DOS'\n+0E2ED4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E2ED6 Compression Method    0000 (0) 'Stored'\n+0E2ED8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E2EDC CRC                   00000000 (0)\n+0E2EE0 Compressed Size       00000000 (0)\n+0E2EE4 Uncompressed Size     00000000 (0)\n+0E2EE8 Filename Length       006F (111)\n+0E2EEA Extra Length          0009 (9)\n+0E2EEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE2EEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E2F5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E2F5D   Length              0005 (5)\n+0E2F5F   Flags               01 (1) 'Modification'\n+0E2F60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E2F64 PAYLOAD\n+\n+0E3687 DATA DESCRIPTOR       08074B50 (134695760)\n+0E368B CRC                   C64481A5 (3326378405)\n+0E368F Compressed Size       00000723 (1827)\n+0E3693 Uncompressed Size     00000723 (1827)\n+\n+0E3697 LOCAL HEADER #352     04034B50 (67324752)\n+0E369B Extract Zip Spec      14 (20) '2.0'\n+0E369C Extract OS            00 (0) 'MS-DOS'\n+0E369D General Purpose Flag  0000 (0)\n+0E369F Compression Method    0000 (0) 'Stored'\n+0E36A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E36A5 CRC                   00000000 (0)\n+0E36A9 Compressed Size       00000000 (0)\n+0E36AD Uncompressed Size     00000000 (0)\n+0E36B1 Filename Length       0057 (87)\n+0E36B3 Extra Length          0009 (9)\n+0E36B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE36B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E370C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E370E   Length              0005 (5)\n+0E3710   Flags               01 (1) 'Modification'\n+0E3711   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E3715 LOCAL HEADER #353     04034B50 (67324752)\n+0E3719 Extract Zip Spec      14 (20) '2.0'\n+0E371A Extract OS            00 (0) 'MS-DOS'\n+0E371B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E371D Compression Method    0000 (0) 'Stored'\n+0E371F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E3723 CRC                   00000000 (0)\n+0E3727 Compressed Size       00000000 (0)\n+0E372B Uncompressed Size     00000000 (0)\n+0E372F Filename Length       006D (109)\n+0E3731 Extra Length          0009 (9)\n+0E3733 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE3733: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E37A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E37A2   Length              0005 (5)\n+0E37A4   Flags               01 (1) 'Modification'\n+0E37A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E37A9 PAYLOAD\n+\n+0E3E8B DATA DESCRIPTOR       08074B50 (134695760)\n+0E3E8F CRC                   39649106 (962892038)\n+0E3E93 Compressed Size       000006E2 (1762)\n+0E3E97 Uncompressed Size     000006E2 (1762)\n+\n+0E3E9B LOCAL HEADER #354     04034B50 (67324752)\n+0E3E9F Extract Zip Spec      14 (20) '2.0'\n+0E3EA0 Extract OS            00 (0) 'MS-DOS'\n+0E3EA1 General Purpose Flag  0000 (0)\n+0E3EA3 Compression Method    0000 (0) 'Stored'\n+0E3EA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E3EA9 CRC                   00000000 (0)\n+0E3EAD Compressed Size       00000000 (0)\n+0E3EB1 Uncompressed Size     00000000 (0)\n+0E3EB5 Filename Length       0052 (82)\n+0E3EB7 Extra Length          0009 (9)\n+0E3EB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE3EB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E3F0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E3F0D   Length              0005 (5)\n+0E3F0F   Flags               01 (1) 'Modification'\n+0E3F10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E3F14 LOCAL HEADER #355     04034B50 (67324752)\n+0E3F18 Extract Zip Spec      14 (20) '2.0'\n+0E3F19 Extract OS            00 (0) 'MS-DOS'\n+0E3F1A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E3F1C Compression Method    0000 (0) 'Stored'\n+0E3F1E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E3F22 CRC                   00000000 (0)\n+0E3F26 Compressed Size       00000000 (0)\n+0E3F2A Uncompressed Size     00000000 (0)\n+0E3F2E Filename Length       0068 (104)\n+0E3F30 Extra Length          0009 (9)\n+0E3F32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE3F32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E3F9A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E3F9C   Length              0005 (5)\n+0E3F9E   Flags               01 (1) 'Modification'\n+0E3F9F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E3FA3 PAYLOAD\n+\n+0E4725 DATA DESCRIPTOR       08074B50 (134695760)\n+0E4729 CRC                   8DC8B44C (2378740812)\n+0E472D Compressed Size       00000782 (1922)\n+0E4731 Uncompressed Size     00000782 (1922)\n+\n+0E4735 LOCAL HEADER #356     04034B50 (67324752)\n+0E4739 Extract Zip Spec      14 (20) '2.0'\n+0E473A Extract OS            00 (0) 'MS-DOS'\n+0E473B General Purpose Flag  0000 (0)\n+0E473D Compression Method    0000 (0) 'Stored'\n+0E473F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E4743 CRC                   00000000 (0)\n+0E4747 Compressed Size       00000000 (0)\n+0E474B Uncompressed Size     00000000 (0)\n+0E474F Filename Length       0023 (35)\n+0E4751 Extra Length          0009 (9)\n+0E4753 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE4753: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E4776 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E4778   Length              0005 (5)\n+0E477A   Flags               01 (1) 'Modification'\n+0E477B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E477F LOCAL HEADER #357     04034B50 (67324752)\n+0E4783 Extract Zip Spec      14 (20) '2.0'\n+0E4784 Extract OS            00 (0) 'MS-DOS'\n+0E4785 General Purpose Flag  0000 (0)\n+0E4787 Compression Method    0000 (0) 'Stored'\n+0E4789 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E478D CRC                   00000000 (0)\n+0E4791 Compressed Size       00000000 (0)\n+0E4795 Uncompressed Size     00000000 (0)\n+0E4799 Filename Length       002A (42)\n+0E479B Extra Length          0009 (9)\n+0E479D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE479D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E47C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E47C9   Length              0005 (5)\n+0E47CB   Flags               01 (1) 'Modification'\n+0E47CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E47D0 LOCAL HEADER #358     04034B50 (67324752)\n+0E47D4 Extract Zip Spec      14 (20) '2.0'\n+0E47D5 Extract OS            00 (0) 'MS-DOS'\n+0E47D6 General Purpose Flag  0000 (0)\n+0E47D8 Compression Method    0000 (0) 'Stored'\n+0E47DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E47DE CRC                   00000000 (0)\n+0E47E2 Compressed Size       00000000 (0)\n+0E47E6 Uncompressed Size     00000000 (0)\n+0E47EA Filename Length       0052 (82)\n+0E47EC Extra Length          0009 (9)\n+0E47EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE47EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E4840 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E4842   Length              0005 (5)\n+0E4844   Flags               01 (1) 'Modification'\n+0E4845   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E4849 LOCAL HEADER #359     04034B50 (67324752)\n+0E484D Extract Zip Spec      14 (20) '2.0'\n+0E484E Extract OS            00 (0) 'MS-DOS'\n+0E484F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E4851 Compression Method    0000 (0) 'Stored'\n+0E4853 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E4857 CRC                   00000000 (0)\n+0E485B Compressed Size       00000000 (0)\n+0E485F Uncompressed Size     00000000 (0)\n+0E4863 Filename Length       0068 (104)\n+0E4865 Extra Length          0009 (9)\n+0E4867 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE4867: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E48CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E48D1   Length              0005 (5)\n+0E48D3   Flags               01 (1) 'Modification'\n+0E48D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E48D8 PAYLOAD\n+\n+0E51EC DATA DESCRIPTOR       08074B50 (134695760)\n+0E51F0 CRC                   605D4301 (1616724737)\n+0E51F4 Compressed Size       00000914 (2324)\n+0E51F8 Uncompressed Size     00000914 (2324)\n+\n+0E51FC LOCAL HEADER #360     04034B50 (67324752)\n+0E5200 Extract Zip Spec      14 (20) '2.0'\n+0E5201 Extract OS            00 (0) 'MS-DOS'\n+0E5202 General Purpose Flag  0000 (0)\n+0E5204 Compression Method    0000 (0) 'Stored'\n+0E5206 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E520A CRC                   00000000 (0)\n+0E520E Compressed Size       00000000 (0)\n+0E5212 Uncompressed Size     00000000 (0)\n+0E5216 Filename Length       005F (95)\n+0E5218 Extra Length          0009 (9)\n+0E521A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE521A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E5279 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E527B   Length              0005 (5)\n+0E527D   Flags               01 (1) 'Modification'\n+0E527E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E5282 LOCAL HEADER #361     04034B50 (67324752)\n+0E5286 Extract Zip Spec      14 (20) '2.0'\n+0E5287 Extract OS            00 (0) 'MS-DOS'\n+0E5288 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E528A Compression Method    0000 (0) 'Stored'\n+0E528C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E5290 CRC                   00000000 (0)\n+0E5294 Compressed Size       00000000 (0)\n+0E5298 Uncompressed Size     00000000 (0)\n+0E529C Filename Length       0075 (117)\n+0E529E Extra Length          0009 (9)\n+0E52A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE52A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E5315 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E5317   Length              0005 (5)\n+0E5319   Flags               01 (1) 'Modification'\n+0E531A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E531E PAYLOAD\n+\n+0E5AC3 DATA DESCRIPTOR       08074B50 (134695760)\n+0E5AC7 CRC                   A64E298E (2790140302)\n+0E5ACB Compressed Size       000007A5 (1957)\n+0E5ACF Uncompressed Size     000007A5 (1957)\n+\n+0E5AD3 LOCAL HEADER #362     04034B50 (67324752)\n+0E5AD7 Extract Zip Spec      14 (20) '2.0'\n+0E5AD8 Extract OS            00 (0) 'MS-DOS'\n+0E5AD9 General Purpose Flag  0000 (0)\n+0E5ADB Compression Method    0000 (0) 'Stored'\n+0E5ADD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E5AE1 CRC                   00000000 (0)\n+0E5AE5 Compressed Size       00000000 (0)\n+0E5AE9 Uncompressed Size     00000000 (0)\n+0E5AED Filename Length       0058 (88)\n+0E5AEF Extra Length          0009 (9)\n+0E5AF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE5AF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E5B49 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E5B4B   Length              0005 (5)\n+0E5B4D   Flags               01 (1) 'Modification'\n+0E5B4E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E5B52 LOCAL HEADER #363     04034B50 (67324752)\n+0E5B56 Extract Zip Spec      14 (20) '2.0'\n+0E5B57 Extract OS            00 (0) 'MS-DOS'\n+0E5B58 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E5B5A Compression Method    0000 (0) 'Stored'\n+0E5B5C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E5B60 CRC                   00000000 (0)\n+0E5B64 Compressed Size       00000000 (0)\n+0E5B68 Uncompressed Size     00000000 (0)\n+0E5B6C Filename Length       006E (110)\n+0E5B6E Extra Length          0009 (9)\n+0E5B70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE5B70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E5BDE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E5BE0   Length              0005 (5)\n+0E5BE2   Flags               01 (1) 'Modification'\n+0E5BE3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E5BE7 PAYLOAD\n+\n+0E6B2A DATA DESCRIPTOR       08074B50 (134695760)\n+0E6B2E CRC                   937D5C9D (2474466461)\n+0E6B32 Compressed Size       00000F43 (3907)\n+0E6B36 Uncompressed Size     00000F43 (3907)\n+\n+0E6B3A LOCAL HEADER #364     04034B50 (67324752)\n+0E6B3E Extract Zip Spec      14 (20) '2.0'\n+0E6B3F Extract OS            00 (0) 'MS-DOS'\n+0E6B40 General Purpose Flag  0000 (0)\n+0E6B42 Compression Method    0000 (0) 'Stored'\n+0E6B44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E6B48 CRC                   00000000 (0)\n+0E6B4C Compressed Size       00000000 (0)\n+0E6B50 Uncompressed Size     00000000 (0)\n+0E6B54 Filename Length       0025 (37)\n+0E6B56 Extra Length          0009 (9)\n+0E6B58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE6B58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E6B7D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E6B7F   Length              0005 (5)\n+0E6B81   Flags               01 (1) 'Modification'\n+0E6B82   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E6B86 LOCAL HEADER #365     04034B50 (67324752)\n+0E6B8A Extract Zip Spec      14 (20) '2.0'\n+0E6B8B Extract OS            00 (0) 'MS-DOS'\n+0E6B8C General Purpose Flag  0000 (0)\n+0E6B8E Compression Method    0000 (0) 'Stored'\n+0E6B90 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E6B94 CRC                   00000000 (0)\n+0E6B98 Compressed Size       00000000 (0)\n+0E6B9C Uncompressed Size     00000000 (0)\n+0E6BA0 Filename Length       002C (44)\n+0E6BA2 Extra Length          0009 (9)\n+0E6BA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE6BA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E6BD0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E6BD2   Length              0005 (5)\n+0E6BD4   Flags               01 (1) 'Modification'\n+0E6BD5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E6BD9 LOCAL HEADER #366     04034B50 (67324752)\n+0E6BDD Extract Zip Spec      14 (20) '2.0'\n+0E6BDE Extract OS            00 (0) 'MS-DOS'\n+0E6BDF General Purpose Flag  0000 (0)\n+0E6BE1 Compression Method    0000 (0) 'Stored'\n+0E6BE3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E6BE7 CRC                   00000000 (0)\n+0E6BEB Compressed Size       00000000 (0)\n+0E6BEF Uncompressed Size     00000000 (0)\n+0E6BF3 Filename Length       005C (92)\n+0E6BF5 Extra Length          0009 (9)\n+0E6BF7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE6BF7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E6C53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E6C55   Length              0005 (5)\n+0E6C57   Flags               01 (1) 'Modification'\n+0E6C58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E6C5C LOCAL HEADER #367     04034B50 (67324752)\n+0E6C60 Extract Zip Spec      14 (20) '2.0'\n+0E6C61 Extract OS            00 (0) 'MS-DOS'\n+0E6C62 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E6C64 Compression Method    0000 (0) 'Stored'\n+0E6C66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E6C6A CRC                   00000000 (0)\n+0E6C6E Compressed Size       00000000 (0)\n+0E6C72 Uncompressed Size     00000000 (0)\n+0E6C76 Filename Length       0072 (114)\n+0E6C78 Extra Length          0009 (9)\n+0E6C7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE6C7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E6CEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E6CEE   Length              0005 (5)\n+0E6CF0   Flags               01 (1) 'Modification'\n+0E6CF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E6CF5 PAYLOAD\n+\n+0E7B8F DATA DESCRIPTOR       08074B50 (134695760)\n+0E7B93 CRC                   335CA1CD (861708749)\n+0E7B97 Compressed Size       00000E9A (3738)\n+0E7B9B Uncompressed Size     00000E9A (3738)\n+\n+0E7B9F LOCAL HEADER #368     04034B50 (67324752)\n+0E7BA3 Extract Zip Spec      14 (20) '2.0'\n+0E7BA4 Extract OS            00 (0) 'MS-DOS'\n+0E7BA5 General Purpose Flag  0000 (0)\n+0E7BA7 Compression Method    0000 (0) 'Stored'\n+0E7BA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E7BAD CRC                   00000000 (0)\n+0E7BB1 Compressed Size       00000000 (0)\n+0E7BB5 Uncompressed Size     00000000 (0)\n+0E7BB9 Filename Length       0068 (104)\n+0E7BBB Extra Length          0009 (9)\n+0E7BBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE7BBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E7C25 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E7C27   Length              0005 (5)\n+0E7C29   Flags               01 (1) 'Modification'\n+0E7C2A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E7C2E LOCAL HEADER #369     04034B50 (67324752)\n+0E7C32 Extract Zip Spec      14 (20) '2.0'\n+0E7C33 Extract OS            00 (0) 'MS-DOS'\n+0E7C34 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E7C36 Compression Method    0000 (0) 'Stored'\n+0E7C38 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E7C3C CRC                   00000000 (0)\n+0E7C40 Compressed Size       00000000 (0)\n+0E7C44 Uncompressed Size     00000000 (0)\n+0E7C48 Filename Length       007E (126)\n+0E7C4A Extra Length          0009 (9)\n+0E7C4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE7C4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E7CCA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E7CCC   Length              0005 (5)\n+0E7CCE   Flags               01 (1) 'Modification'\n+0E7CCF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E7CD3 PAYLOAD\n+\n+0E8D2C DATA DESCRIPTOR       08074B50 (134695760)\n+0E8D30 CRC                   3EE7FDDD (1055391197)\n+0E8D34 Compressed Size       00001059 (4185)\n+0E8D38 Uncompressed Size     00001059 (4185)\n+\n+0E8D3C LOCAL HEADER #370     04034B50 (67324752)\n+0E8D40 Extract Zip Spec      14 (20) '2.0'\n+0E8D41 Extract OS            00 (0) 'MS-DOS'\n+0E8D42 General Purpose Flag  0000 (0)\n+0E8D44 Compression Method    0000 (0) 'Stored'\n+0E8D46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E8D4A CRC                   00000000 (0)\n+0E8D4E Compressed Size       00000000 (0)\n+0E8D52 Uncompressed Size     00000000 (0)\n+0E8D56 Filename Length       0025 (37)\n+0E8D58 Extra Length          0009 (9)\n+0E8D5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE8D5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E8D7F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E8D81   Length              0005 (5)\n+0E8D83   Flags               01 (1) 'Modification'\n+0E8D84   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E8D88 LOCAL HEADER #371     04034B50 (67324752)\n+0E8D8C Extract Zip Spec      14 (20) '2.0'\n+0E8D8D Extract OS            00 (0) 'MS-DOS'\n+0E8D8E General Purpose Flag  0000 (0)\n+0E8D90 Compression Method    0000 (0) 'Stored'\n+0E8D92 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E8D96 CRC                   00000000 (0)\n+0E8D9A Compressed Size       00000000 (0)\n+0E8D9E Uncompressed Size     00000000 (0)\n+0E8DA2 Filename Length       002C (44)\n+0E8DA4 Extra Length          0009 (9)\n+0E8DA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE8DA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E8DD2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E8DD4   Length              0005 (5)\n+0E8DD6   Flags               01 (1) 'Modification'\n+0E8DD7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E8DDB LOCAL HEADER #372     04034B50 (67324752)\n+0E8DDF Extract Zip Spec      14 (20) '2.0'\n+0E8DE0 Extract OS            00 (0) 'MS-DOS'\n+0E8DE1 General Purpose Flag  0000 (0)\n+0E8DE3 Compression Method    0000 (0) 'Stored'\n+0E8DE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E8DE9 CRC                   00000000 (0)\n+0E8DED Compressed Size       00000000 (0)\n+0E8DF1 Uncompressed Size     00000000 (0)\n+0E8DF5 Filename Length       005A (90)\n+0E8DF7 Extra Length          0009 (9)\n+0E8DF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE8DF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E8E53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E8E55   Length              0005 (5)\n+0E8E57   Flags               01 (1) 'Modification'\n+0E8E58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E8E5C LOCAL HEADER #373     04034B50 (67324752)\n+0E8E60 Extract Zip Spec      14 (20) '2.0'\n+0E8E61 Extract OS            00 (0) 'MS-DOS'\n+0E8E62 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E8E64 Compression Method    0000 (0) 'Stored'\n+0E8E66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E8E6A CRC                   00000000 (0)\n+0E8E6E Compressed Size       00000000 (0)\n+0E8E72 Uncompressed Size     00000000 (0)\n+0E8E76 Filename Length       0070 (112)\n+0E8E78 Extra Length          0009 (9)\n+0E8E7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE8E7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E8EEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E8EEC   Length              0005 (5)\n+0E8EEE   Flags               01 (1) 'Modification'\n+0E8EEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E8EF3 PAYLOAD\n+\n+0EA6BA DATA DESCRIPTOR       08074B50 (134695760)\n+0EA6BE CRC                   0944969F (155489951)\n+0EA6C2 Compressed Size       000017C7 (6087)\n+0EA6C6 Uncompressed Size     000017C7 (6087)\n+\n+0EA6CA LOCAL HEADER #374     04034B50 (67324752)\n+0EA6CE Extract Zip Spec      14 (20) '2.0'\n+0EA6CF Extract OS            00 (0) 'MS-DOS'\n+0EA6D0 General Purpose Flag  0000 (0)\n+0EA6D2 Compression Method    0000 (0) 'Stored'\n+0EA6D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EA6D8 CRC                   00000000 (0)\n+0EA6DC Compressed Size       00000000 (0)\n+0EA6E0 Uncompressed Size     00000000 (0)\n+0EA6E4 Filename Length       0027 (39)\n+0EA6E6 Extra Length          0009 (9)\n+0EA6E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEA6E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EA70F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EA711   Length              0005 (5)\n+0EA713   Flags               01 (1) 'Modification'\n+0EA714   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0EA718 LOCAL HEADER #375     04034B50 (67324752)\n+0EA71C Extract Zip Spec      14 (20) '2.0'\n+0EA71D Extract OS            00 (0) 'MS-DOS'\n+0EA71E General Purpose Flag  0000 (0)\n+0EA720 Compression Method    0000 (0) 'Stored'\n+0EA722 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EA726 CRC                   00000000 (0)\n+0EA72A Compressed Size       00000000 (0)\n+0EA72E Uncompressed Size     00000000 (0)\n+0EA732 Filename Length       002E (46)\n+0EA734 Extra Length          0009 (9)\n+0EA736 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEA736: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EA764 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EA766   Length              0005 (5)\n+0EA768   Flags               01 (1) 'Modification'\n+0EA769   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0EA76D LOCAL HEADER #376     04034B50 (67324752)\n+0EA771 Extract Zip Spec      14 (20) '2.0'\n+0EA772 Extract OS            00 (0) 'MS-DOS'\n+0EA773 General Purpose Flag  0000 (0)\n+0EA775 Compression Method    0000 (0) 'Stored'\n+0EA777 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EA77B CRC                   00000000 (0)\n+0EA77F Compressed Size       00000000 (0)\n+0EA783 Uncompressed Size     00000000 (0)\n+0EA787 Filename Length       0067 (103)\n+0EA789 Extra Length          0009 (9)\n+0EA78B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEA78B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EA7F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EA7F4   Length              0005 (5)\n+0EA7F6   Flags               01 (1) 'Modification'\n+0EA7F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0EA7FB LOCAL HEADER #377     04034B50 (67324752)\n+0EA7FF Extract Zip Spec      14 (20) '2.0'\n+0EA800 Extract OS            00 (0) 'MS-DOS'\n+0EA801 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0EA803 Compression Method    0000 (0) 'Stored'\n+0EA805 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EA809 CRC                   00000000 (0)\n+0EA80D Compressed Size       00000000 (0)\n+0EA811 Uncompressed Size     00000000 (0)\n+0EA815 Filename Length       007D (125)\n+0EA817 Extra Length          0009 (9)\n+0EA819 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEA819: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EA896 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EA898   Length              0005 (5)\n+0EA89A   Flags               01 (1) 'Modification'\n+0EA89B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0EA89F PAYLOAD\n+\n+0EB4FA DATA DESCRIPTOR       08074B50 (134695760)\n+0EB4FE CRC                   67FA3A91 (1744452241)\n+0EB502 Compressed Size       00000C5B (3163)\n+0EB506 Uncompressed Size     00000C5B (3163)\n+\n+0EB50A LOCAL HEADER #378     04034B50 (67324752)\n+0EB50E Extract Zip Spec      14 (20) '2.0'\n+0EB50F Extract OS            00 (0) 'MS-DOS'\n+0EB510 General Purpose Flag  0000 (0)\n+0EB512 Compression Method    0000 (0) 'Stored'\n+0EB514 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EB518 CRC                   00000000 (0)\n+0EB51C Compressed Size       00000000 (0)\n+0EB520 Uncompressed Size     00000000 (0)\n+0EB524 Filename Length       0067 (103)\n+0EB526 Extra Length          0009 (9)\n+0EB528 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEB528: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EB58F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EB591   Length              0005 (5)\n+0EB593   Flags               01 (1) 'Modification'\n+0EB594   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0EB598 LOCAL HEADER #379     04034B50 (67324752)\n+0EB59C Extract Zip Spec      14 (20) '2.0'\n+0EB59D Extract OS            00 (0) 'MS-DOS'\n+0EB59E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0EB5A0 Compression Method    0000 (0) 'Stored'\n+0EB5A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EB5A6 CRC                   00000000 (0)\n+0EB5AA Compressed Size       00000000 (0)\n+0EB5AE Uncompressed Size     00000000 (0)\n+0EB5B2 Filename Length       007D (125)\n+0EB5B4 Extra Length          0009 (9)\n+0EB5B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEB5B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EB633 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EB635   Length              0005 (5)\n+0EB637   Flags               01 (1) 'Modification'\n+0EB638   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0EB63C PAYLOAD\n+\n+0EBDFC DATA DESCRIPTOR       08074B50 (134695760)\n+0EBE00 CRC                   63513D5C (1666268508)\n+0EBE04 Compressed Size       000007C0 (1984)\n+0EBE08 Uncompressed Size     000007C0 (1984)\n+\n+0EBE0C LOCAL HEADER #380     04034B50 (67324752)\n+0EBE10 Extract Zip Spec      14 (20) '2.0'\n+0EBE11 Extract OS            00 (0) 'MS-DOS'\n+0EBE12 General Purpose Flag  0000 (0)\n+0EBE14 Compression Method    0000 (0) 'Stored'\n+0EBE16 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EBE1A CRC                   00000000 (0)\n+0EBE1E Compressed Size       00000000 (0)\n+0EBE22 Uncompressed Size     00000000 (0)\n+0EBE26 Filename Length       005E (94)\n+0EBE28 Extra Length          0009 (9)\n+0EBE2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEBE2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EBE88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EBE8A   Length              0005 (5)\n+0EBE8C   Flags               01 (1) 'Modification'\n+0EBE8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0EBE91 LOCAL HEADER #381     04034B50 (67324752)\n+0EBE95 Extract Zip Spec      14 (20) '2.0'\n+0EBE96 Extract OS            00 (0) 'MS-DOS'\n+0EBE97 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0EBE99 Compression Method    0000 (0) 'Stored'\n+0EBE9B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EBE9F CRC                   00000000 (0)\n+0EBEA3 Compressed Size       00000000 (0)\n+0EBEA7 Uncompressed Size     00000000 (0)\n+0EBEAB Filename Length       0074 (116)\n+0EBEAD Extra Length          0009 (9)\n+0EBEAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEBEAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EBF23 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EBF25   Length              0005 (5)\n+0EBF27   Flags               01 (1) 'Modification'\n+0EBF28   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0EBF2C PAYLOAD\n+\n+0ECE06 DATA DESCRIPTOR       08074B50 (134695760)\n+0ECE0A CRC                   99929518 (2576520472)\n+0ECE0E Compressed Size       00000EDA (3802)\n+0ECE12 Uncompressed Size     00000EDA (3802)\n+\n+0ECE16 LOCAL HEADER #382     04034B50 (67324752)\n+0ECE1A Extract Zip Spec      14 (20) '2.0'\n+0ECE1B Extract OS            00 (0) 'MS-DOS'\n+0ECE1C General Purpose Flag  0000 (0)\n+0ECE1E Compression Method    0000 (0) 'Stored'\n+0ECE20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0ECE24 CRC                   00000000 (0)\n+0ECE28 Compressed Size       00000000 (0)\n+0ECE2C Uncompressed Size     00000000 (0)\n+0ECE30 Filename Length       005C (92)\n+0ECE32 Extra Length          0009 (9)\n+0ECE34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xECE34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0ECE90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0ECE92   Length              0005 (5)\n+0ECE94   Flags               01 (1) 'Modification'\n+0ECE95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0ECE99 LOCAL HEADER #383     04034B50 (67324752)\n+0ECE9D Extract Zip Spec      14 (20) '2.0'\n+0ECE9E Extract OS            00 (0) 'MS-DOS'\n+0ECE9F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0ECEA1 Compression Method    0000 (0) 'Stored'\n+0ECEA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0ECEA7 CRC                   00000000 (0)\n+0ECEAB Compressed Size       00000000 (0)\n+0ECEAF Uncompressed Size     00000000 (0)\n+0ECEB3 Filename Length       0072 (114)\n+0ECEB5 Extra Length          0009 (9)\n+0ECEB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xECEB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0ECF29 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0ECF2B   Length              0005 (5)\n+0ECF2D   Flags               01 (1) 'Modification'\n+0ECF2E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0ECF32 PAYLOAD\n+\n+0ED82A DATA DESCRIPTOR       08074B50 (134695760)\n+0ED82E CRC                   E6BF62E0 (3871302368)\n+0ED832 Compressed Size       000008F8 (2296)\n+0ED836 Uncompressed Size     000008F8 (2296)\n+\n+0ED83A LOCAL HEADER #384     04034B50 (67324752)\n+0ED83E Extract Zip Spec      14 (20) '2.0'\n+0ED83F Extract OS            00 (0) 'MS-DOS'\n+0ED840 General Purpose Flag  0000 (0)\n+0ED842 Compression Method    0000 (0) 'Stored'\n+0ED844 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0ED848 CRC                   00000000 (0)\n+0ED84C Compressed Size       00000000 (0)\n+0ED850 Uncompressed Size     00000000 (0)\n+0ED854 Filename Length       0061 (97)\n+0ED856 Extra Length          0009 (9)\n+0ED858 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xED858: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0ED8B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0ED8BB   Length              0005 (5)\n+0ED8BD   Flags               01 (1) 'Modification'\n+0ED8BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0ED8C2 LOCAL HEADER #385     04034B50 (67324752)\n+0ED8C6 Extract Zip Spec      14 (20) '2.0'\n+0ED8C7 Extract OS            00 (0) 'MS-DOS'\n+0ED8C8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0ED8CA Compression Method    0000 (0) 'Stored'\n+0ED8CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0ED8D0 CRC                   00000000 (0)\n+0ED8D4 Compressed Size       00000000 (0)\n+0ED8D8 Uncompressed Size     00000000 (0)\n+0ED8DC Filename Length       0077 (119)\n+0ED8DE Extra Length          0009 (9)\n+0ED8E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xED8E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0ED957 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0ED959   Length              0005 (5)\n+0ED95B   Flags               01 (1) 'Modification'\n+0ED95C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0ED960 PAYLOAD\n+\n+0EDEF4 DATA DESCRIPTOR       08074B50 (134695760)\n+0EDEF8 CRC                   01130591 (18023825)\n+0EDEFC Compressed Size       00000594 (1428)\n+0EDF00 Uncompressed Size     00000594 (1428)\n+\n+0EDF04 LOCAL HEADER #386     04034B50 (67324752)\n+0EDF08 Extract Zip Spec      14 (20) '2.0'\n+0EDF09 Extract OS            00 (0) 'MS-DOS'\n+0EDF0A General Purpose Flag  0000 (0)\n+0EDF0C Compression Method    0000 (0) 'Stored'\n+0EDF0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EDF12 CRC                   00000000 (0)\n+0EDF16 Compressed Size       00000000 (0)\n+0EDF1A Uncompressed Size     00000000 (0)\n+0EDF1E Filename Length       0063 (99)\n+0EDF20 Extra Length          0009 (9)\n+0EDF22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEDF22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EDF85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EDF87   Length              0005 (5)\n+0EDF89   Flags               01 (1) 'Modification'\n+0EDF8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0EDF8E LOCAL HEADER #387     04034B50 (67324752)\n+0EDF92 Extract Zip Spec      14 (20) '2.0'\n+0EDF93 Extract OS            00 (0) 'MS-DOS'\n+0EDF94 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0EDF96 Compression Method    0000 (0) 'Stored'\n+0EDF98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EDF9C CRC                   00000000 (0)\n+0EDFA0 Compressed Size       00000000 (0)\n+0EDFA4 Uncompressed Size     00000000 (0)\n+0EDFA8 Filename Length       0079 (121)\n+0EDFAA Extra Length          0009 (9)\n+0EDFAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEDFAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EE025 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EE027   Length              0005 (5)\n+0EE029   Flags               01 (1) 'Modification'\n+0EE02A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0EE02E PAYLOAD\n+\n+0EE85F DATA DESCRIPTOR       08074B50 (134695760)\n+0EE863 CRC                   F05E2331 (4032701233)\n+0EE867 Compressed Size       00000831 (2097)\n+0EE86B Uncompressed Size     00000831 (2097)\n+\n+0EE86F LOCAL HEADER #388     04034B50 (67324752)\n+0EE873 Extract Zip Spec      14 (20) '2.0'\n+0EE874 Extract OS            00 (0) 'MS-DOS'\n+0EE875 General Purpose Flag  0000 (0)\n+0EE877 Compression Method    0000 (0) 'Stored'\n+0EE879 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EE87D CRC                   00000000 (0)\n+0EE881 Compressed Size       00000000 (0)\n+0EE885 Uncompressed Size     00000000 (0)\n+0EE889 Filename Length       0061 (97)\n+0EE88B Extra Length          0009 (9)\n+0EE88D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEE88D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EE8EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EE8F0   Length              0005 (5)\n+0EE8F2   Flags               01 (1) 'Modification'\n+0EE8F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0EE8F7 LOCAL HEADER #389     04034B50 (67324752)\n+0EE8FB Extract Zip Spec      14 (20) '2.0'\n+0EE8FC Extract OS            00 (0) 'MS-DOS'\n+0EE8FD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0EE8FF Compression Method    0000 (0) 'Stored'\n+0EE901 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EE905 CRC                   00000000 (0)\n+0EE909 Compressed Size       00000000 (0)\n+0EE90D Uncompressed Size     00000000 (0)\n+0EE911 Filename Length       0077 (119)\n+0EE913 Extra Length          0009 (9)\n+0EE915 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEE915: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EE98C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EE98E   Length              0005 (5)\n+0EE990   Flags               01 (1) 'Modification'\n+0EE991   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0EE995 PAYLOAD\n+\n+0EFF65 DATA DESCRIPTOR       08074B50 (134695760)\n+0EFF69 CRC                   80ED3BA4 (2163030948)\n+0EFF6D Compressed Size       000015D0 (5584)\n+0EFF71 Uncompressed Size     000015D0 (5584)\n+\n+0EFF75 LOCAL HEADER #390     04034B50 (67324752)\n+0EFF79 Extract Zip Spec      14 (20) '2.0'\n+0EFF7A Extract OS            00 (0) 'MS-DOS'\n+0EFF7B General Purpose Flag  0000 (0)\n+0EFF7D Compression Method    0000 (0) 'Stored'\n+0EFF7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EFF83 CRC                   00000000 (0)\n+0EFF87 Compressed Size       00000000 (0)\n+0EFF8B Uncompressed Size     00000000 (0)\n+0EFF8F Filename Length       0067 (103)\n+0EFF91 Extra Length          0009 (9)\n+0EFF93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEFF93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EFFFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EFFFC   Length              0005 (5)\n+0EFFFE   Flags               01 (1) 'Modification'\n+0EFFFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F0003 LOCAL HEADER #391     04034B50 (67324752)\n+0F0007 Extract Zip Spec      14 (20) '2.0'\n+0F0008 Extract OS            00 (0) 'MS-DOS'\n+0F0009 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F000B Compression Method    0000 (0) 'Stored'\n+0F000D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F0011 CRC                   00000000 (0)\n+0F0015 Compressed Size       00000000 (0)\n+0F0019 Uncompressed Size     00000000 (0)\n+0F001D Filename Length       007D (125)\n+0F001F Extra Length          0009 (9)\n+0F0021 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF0021: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F009E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F00A0   Length              0005 (5)\n+0F00A2   Flags               01 (1) 'Modification'\n+0F00A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F00A7 PAYLOAD\n+\n+0F2055 DATA DESCRIPTOR       08074B50 (134695760)\n+0F2059 CRC                   7018E446 (1880679494)\n+0F205D Compressed Size       00001FAE (8110)\n+0F2061 Uncompressed Size     00001FAE (8110)\n+\n+0F2065 LOCAL HEADER #392     04034B50 (67324752)\n+0F2069 Extract Zip Spec      14 (20) '2.0'\n+0F206A Extract OS            00 (0) 'MS-DOS'\n+0F206B General Purpose Flag  0000 (0)\n+0F206D Compression Method    0000 (0) 'Stored'\n+0F206F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F2073 CRC                   00000000 (0)\n+0F2077 Compressed Size       00000000 (0)\n+0F207B Uncompressed Size     00000000 (0)\n+0F207F Filename Length       005E (94)\n+0F2081 Extra Length          0009 (9)\n+0F2083 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF2083: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F20E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F20E3   Length              0005 (5)\n+0F20E5   Flags               01 (1) 'Modification'\n+0F20E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F20EA LOCAL HEADER #393     04034B50 (67324752)\n+0F20EE Extract Zip Spec      14 (20) '2.0'\n+0F20EF Extract OS            00 (0) 'MS-DOS'\n+0F20F0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F20F2 Compression Method    0000 (0) 'Stored'\n+0F20F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F20F8 CRC                   00000000 (0)\n+0F20FC Compressed Size       00000000 (0)\n+0F2100 Uncompressed Size     00000000 (0)\n+0F2104 Filename Length       0074 (116)\n+0F2106 Extra Length          0009 (9)\n+0F2108 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF2108: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F217C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F217E   Length              0005 (5)\n+0F2180   Flags               01 (1) 'Modification'\n+0F2181   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F2185 PAYLOAD\n+\n+0F347F DATA DESCRIPTOR       08074B50 (134695760)\n+0F3483 CRC                   61A0CE5A (1637928538)\n+0F3487 Compressed Size       000012FA (4858)\n+0F348B Uncompressed Size     000012FA (4858)\n+\n+0F348F LOCAL HEADER #394     04034B50 (67324752)\n+0F3493 Extract Zip Spec      14 (20) '2.0'\n+0F3494 Extract OS            00 (0) 'MS-DOS'\n+0F3495 General Purpose Flag  0000 (0)\n+0F3497 Compression Method    0000 (0) 'Stored'\n+0F3499 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F349D CRC                   00000000 (0)\n+0F34A1 Compressed Size       00000000 (0)\n+0F34A5 Uncompressed Size     00000000 (0)\n+0F34A9 Filename Length       0061 (97)\n+0F34AB Extra Length          0009 (9)\n+0F34AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF34AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F350E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F3510   Length              0005 (5)\n+0F3512   Flags               01 (1) 'Modification'\n+0F3513   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F3517 LOCAL HEADER #395     04034B50 (67324752)\n+0F351B Extract Zip Spec      14 (20) '2.0'\n+0F351C Extract OS            00 (0) 'MS-DOS'\n+0F351D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F351F Compression Method    0000 (0) 'Stored'\n+0F3521 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F3525 CRC                   00000000 (0)\n+0F3529 Compressed Size       00000000 (0)\n+0F352D Uncompressed Size     00000000 (0)\n+0F3531 Filename Length       0077 (119)\n+0F3533 Extra Length          0009 (9)\n+0F3535 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF3535: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F35AC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F35AE   Length              0005 (5)\n+0F35B0   Flags               01 (1) 'Modification'\n+0F35B1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F35B5 PAYLOAD\n+\n+0F48CA DATA DESCRIPTOR       08074B50 (134695760)\n+0F48CE CRC                   624BE63E (1649141310)\n+0F48D2 Compressed Size       00001315 (4885)\n+0F48D6 Uncompressed Size     00001315 (4885)\n+\n+0F48DA LOCAL HEADER #396     04034B50 (67324752)\n+0F48DE Extract Zip Spec      14 (20) '2.0'\n+0F48DF Extract OS            00 (0) 'MS-DOS'\n+0F48E0 General Purpose Flag  0000 (0)\n+0F48E2 Compression Method    0000 (0) 'Stored'\n+0F48E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F48E8 CRC                   00000000 (0)\n+0F48EC Compressed Size       00000000 (0)\n+0F48F0 Uncompressed Size     00000000 (0)\n+0F48F4 Filename Length       005D (93)\n+0F48F6 Extra Length          0009 (9)\n+0F48F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF48F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F4955 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F4957   Length              0005 (5)\n+0F4959   Flags               01 (1) 'Modification'\n+0F495A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F495E LOCAL HEADER #397     04034B50 (67324752)\n+0F4962 Extract Zip Spec      14 (20) '2.0'\n+0F4963 Extract OS            00 (0) 'MS-DOS'\n+0F4964 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F4966 Compression Method    0000 (0) 'Stored'\n+0F4968 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F496C CRC                   00000000 (0)\n+0F4970 Compressed Size       00000000 (0)\n+0F4974 Uncompressed Size     00000000 (0)\n+0F4978 Filename Length       0073 (115)\n+0F497A Extra Length          0009 (9)\n+0F497C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF497C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F49EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F49F1   Length              0005 (5)\n+0F49F3   Flags               01 (1) 'Modification'\n+0F49F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F49F8 PAYLOAD\n+\n+0F71DC DATA DESCRIPTOR       08074B50 (134695760)\n+0F71E0 CRC                   F4A07CA3 (4104158371)\n+0F71E4 Compressed Size       000027E4 (10212)\n+0F71E8 Uncompressed Size     000027E4 (10212)\n+\n+0F71EC LOCAL HEADER #398     04034B50 (67324752)\n+0F71F0 Extract Zip Spec      14 (20) '2.0'\n+0F71F1 Extract OS            00 (0) 'MS-DOS'\n+0F71F2 General Purpose Flag  0000 (0)\n+0F71F4 Compression Method    0000 (0) 'Stored'\n+0F71F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F71FA CRC                   00000000 (0)\n+0F71FE Compressed Size       00000000 (0)\n+0F7202 Uncompressed Size     00000000 (0)\n+0F7206 Filename Length       0065 (101)\n+0F7208 Extra Length          0009 (9)\n+0F720A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF720A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F726F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F7271   Length              0005 (5)\n+0F7273   Flags               01 (1) 'Modification'\n+0F7274   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F7278 LOCAL HEADER #399     04034B50 (67324752)\n+0F727C Extract Zip Spec      14 (20) '2.0'\n+0F727D Extract OS            00 (0) 'MS-DOS'\n+0F727E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F7280 Compression Method    0000 (0) 'Stored'\n+0F7282 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F7286 CRC                   00000000 (0)\n+0F728A Compressed Size       00000000 (0)\n+0F728E Uncompressed Size     00000000 (0)\n+0F7292 Filename Length       007B (123)\n+0F7294 Extra Length          0009 (9)\n+0F7296 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF7296: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F7311 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F7313   Length              0005 (5)\n+0F7315   Flags               01 (1) 'Modification'\n+0F7316   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F731A PAYLOAD\n+\n+0F8590 DATA DESCRIPTOR       08074B50 (134695760)\n+0F8594 CRC                   6E031E40 (1845698112)\n+0F8598 Compressed Size       00001276 (4726)\n+0F859C Uncompressed Size     00001276 (4726)\n+\n+0F85A0 LOCAL HEADER #400     04034B50 (67324752)\n+0F85A4 Extract Zip Spec      14 (20) '2.0'\n+0F85A5 Extract OS            00 (0) 'MS-DOS'\n+0F85A6 General Purpose Flag  0000 (0)\n+0F85A8 Compression Method    0000 (0) 'Stored'\n+0F85AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F85AE CRC                   00000000 (0)\n+0F85B2 Compressed Size       00000000 (0)\n+0F85B6 Uncompressed Size     00000000 (0)\n+0F85BA Filename Length       0064 (100)\n+0F85BC Extra Length          0009 (9)\n+0F85BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF85BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F8622 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F8624   Length              0005 (5)\n+0F8626   Flags               01 (1) 'Modification'\n+0F8627   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F862B LOCAL HEADER #401     04034B50 (67324752)\n+0F862F Extract Zip Spec      14 (20) '2.0'\n+0F8630 Extract OS            00 (0) 'MS-DOS'\n+0F8631 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F8633 Compression Method    0000 (0) 'Stored'\n+0F8635 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F8639 CRC                   00000000 (0)\n+0F863D Compressed Size       00000000 (0)\n+0F8641 Uncompressed Size     00000000 (0)\n+0F8645 Filename Length       007A (122)\n+0F8647 Extra Length          0009 (9)\n+0F8649 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF8649: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F86C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F86C5   Length              0005 (5)\n+0F86C7   Flags               01 (1) 'Modification'\n+0F86C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F86CC PAYLOAD\n+\n+0F92AA DATA DESCRIPTOR       08074B50 (134695760)\n+0F92AE CRC                   5987930A (1502057226)\n+0F92B2 Compressed Size       00000BDE (3038)\n+0F92B6 Uncompressed Size     00000BDE (3038)\n+\n+0F92BA LOCAL HEADER #402     04034B50 (67324752)\n+0F92BE Extract Zip Spec      14 (20) '2.0'\n+0F92BF Extract OS            00 (0) 'MS-DOS'\n+0F92C0 General Purpose Flag  0000 (0)\n+0F92C2 Compression Method    0000 (0) 'Stored'\n+0F92C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F92C8 CRC                   00000000 (0)\n+0F92CC Compressed Size       00000000 (0)\n+0F92D0 Uncompressed Size     00000000 (0)\n+0F92D4 Filename Length       0065 (101)\n+0F92D6 Extra Length          0009 (9)\n+0F92D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF92D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F933D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F933F   Length              0005 (5)\n+0F9341   Flags               01 (1) 'Modification'\n+0F9342   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F9346 LOCAL HEADER #403     04034B50 (67324752)\n+0F934A Extract Zip Spec      14 (20) '2.0'\n+0F934B Extract OS            00 (0) 'MS-DOS'\n+0F934C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F934E Compression Method    0000 (0) 'Stored'\n+0F9350 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F9354 CRC                   00000000 (0)\n+0F9358 Compressed Size       00000000 (0)\n+0F935C Uncompressed Size     00000000 (0)\n+0F9360 Filename Length       007B (123)\n+0F9362 Extra Length          0009 (9)\n+0F9364 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF9364: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F93DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F93E1   Length              0005 (5)\n+0F93E3   Flags               01 (1) 'Modification'\n+0F93E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F93E8 PAYLOAD\n+\n+0F9CB7 DATA DESCRIPTOR       08074B50 (134695760)\n+0F9CBB CRC                   CA93F7B9 (3398694841)\n+0F9CBF Compressed Size       000008CF (2255)\n+0F9CC3 Uncompressed Size     000008CF (2255)\n+\n+0F9CC7 LOCAL HEADER #404     04034B50 (67324752)\n+0F9CCB Extract Zip Spec      14 (20) '2.0'\n+0F9CCC Extract OS            00 (0) 'MS-DOS'\n+0F9CCD General Purpose Flag  0000 (0)\n+0F9CCF Compression Method    0000 (0) 'Stored'\n+0F9CD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F9CD5 CRC                   00000000 (0)\n+0F9CD9 Compressed Size       00000000 (0)\n+0F9CDD Uncompressed Size     00000000 (0)\n+0F9CE1 Filename Length       0063 (99)\n+0F9CE3 Extra Length          0009 (9)\n+0F9CE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF9CE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F9D48 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F9D4A   Length              0005 (5)\n+0F9D4C   Flags               01 (1) 'Modification'\n+0F9D4D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F9D51 LOCAL HEADER #405     04034B50 (67324752)\n+0F9D55 Extract Zip Spec      14 (20) '2.0'\n+0F9D56 Extract OS            00 (0) 'MS-DOS'\n+0F9D57 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F9D59 Compression Method    0000 (0) 'Stored'\n+0F9D5B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F9D5F CRC                   00000000 (0)\n+0F9D63 Compressed Size       00000000 (0)\n+0F9D67 Uncompressed Size     00000000 (0)\n+0F9D6B Filename Length       0079 (121)\n+0F9D6D Extra Length          0009 (9)\n+0F9D6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF9D6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F9DE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F9DEA   Length              0005 (5)\n+0F9DEC   Flags               01 (1) 'Modification'\n+0F9DED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F9DF1 PAYLOAD\n+\n+0FAA9A DATA DESCRIPTOR       08074B50 (134695760)\n+0FAA9E CRC                   673E5975 (1732139381)\n+0FAAA2 Compressed Size       00000CA9 (3241)\n+0FAAA6 Uncompressed Size     00000CA9 (3241)\n+\n+0FAAAA LOCAL HEADER #406     04034B50 (67324752)\n+0FAAAE Extract Zip Spec      14 (20) '2.0'\n+0FAAAF Extract OS            00 (0) 'MS-DOS'\n+0FAAB0 General Purpose Flag  0000 (0)\n+0FAAB2 Compression Method    0000 (0) 'Stored'\n+0FAAB4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FAAB8 CRC                   00000000 (0)\n+0FAABC Compressed Size       00000000 (0)\n+0FAAC0 Uncompressed Size     00000000 (0)\n+0FAAC4 Filename Length       0061 (97)\n+0FAAC6 Extra Length          0009 (9)\n+0FAAC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFAAC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FAB29 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FAB2B   Length              0005 (5)\n+0FAB2D   Flags               01 (1) 'Modification'\n+0FAB2E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0FAB32 LOCAL HEADER #407     04034B50 (67324752)\n+0FAB36 Extract Zip Spec      14 (20) '2.0'\n+0FAB37 Extract OS            00 (0) 'MS-DOS'\n+0FAB38 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FAB3A Compression Method    0000 (0) 'Stored'\n+0FAB3C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FAB40 CRC                   00000000 (0)\n+0FAB44 Compressed Size       00000000 (0)\n+0FAB48 Uncompressed Size     00000000 (0)\n+0FAB4C Filename Length       0077 (119)\n+0FAB4E Extra Length          0009 (9)\n+0FAB50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFAB50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FABC7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FABC9   Length              0005 (5)\n+0FABCB   Flags               01 (1) 'Modification'\n+0FABCC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FABD0 PAYLOAD\n+\n+0FFC0C DATA DESCRIPTOR       08074B50 (134695760)\n+0FFC10 CRC                   33033645 (855848517)\n+0FFC14 Compressed Size       0000503C (20540)\n+0FFC18 Uncompressed Size     0000503C (20540)\n+\n+0FFC1C LOCAL HEADER #408     04034B50 (67324752)\n+0FFC20 Extract Zip Spec      14 (20) '2.0'\n+0FFC21 Extract OS            00 (0) 'MS-DOS'\n+0FFC22 General Purpose Flag  0000 (0)\n+0FFC24 Compression Method    0000 (0) 'Stored'\n+0FFC26 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FFC2A CRC                   00000000 (0)\n+0FFC2E Compressed Size       00000000 (0)\n+0FFC32 Uncompressed Size     00000000 (0)\n+0FFC36 Filename Length       0064 (100)\n+0FFC38 Extra Length          0009 (9)\n+0FFC3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFFC3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FFC9E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FFCA0   Length              0005 (5)\n+0FFCA2   Flags               01 (1) 'Modification'\n+0FFCA3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0FFCA7 LOCAL HEADER #409     04034B50 (67324752)\n+0FFCAB Extract Zip Spec      14 (20) '2.0'\n+0FFCAC Extract OS            00 (0) 'MS-DOS'\n+0FFCAD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FFCAF Compression Method    0000 (0) 'Stored'\n+0FFCB1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FFCB5 CRC                   00000000 (0)\n+0FFCB9 Compressed Size       00000000 (0)\n+0FFCBD Uncompressed Size     00000000 (0)\n+0FFCC1 Filename Length       007A (122)\n+0FFCC3 Extra Length          0009 (9)\n+0FFCC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFFCC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FFD3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FFD41   Length              0005 (5)\n+0FFD43   Flags               01 (1) 'Modification'\n+0FFD44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FFD48 PAYLOAD\n+\n+100556 DATA DESCRIPTOR       08074B50 (134695760)\n+10055A CRC                   F5037A64 (4110645860)\n+10055E Compressed Size       0000080E (2062)\n+100562 Uncompressed Size     0000080E (2062)\n+\n+100566 LOCAL HEADER #410     04034B50 (67324752)\n+10056A Extract Zip Spec      14 (20) '2.0'\n+10056B Extract OS            00 (0) 'MS-DOS'\n+10056C General Purpose Flag  0000 (0)\n+10056E Compression Method    0000 (0) 'Stored'\n+100570 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+100574 CRC                   00000000 (0)\n+100578 Compressed Size       00000000 (0)\n+10057C Uncompressed Size     00000000 (0)\n+100580 Filename Length       005A (90)\n+100582 Extra Length          0009 (9)\n+100584 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x100584: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1005DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1005E0   Length              0005 (5)\n+1005E2   Flags               01 (1) 'Modification'\n+1005E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1005E7 LOCAL HEADER #411     04034B50 (67324752)\n+1005EB Extract Zip Spec      14 (20) '2.0'\n+1005EC Extract OS            00 (0) 'MS-DOS'\n+1005ED General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1005EF Compression Method    0000 (0) 'Stored'\n+1005F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1005F5 CRC                   00000000 (0)\n+1005F9 Compressed Size       00000000 (0)\n+1005FD Uncompressed Size     00000000 (0)\n+100601 Filename Length       0070 (112)\n+100603 Extra Length          0009 (9)\n+100605 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x100605: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+100675 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+100677   Length              0005 (5)\n+100679   Flags               01 (1) 'Modification'\n+10067A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+10067E PAYLOAD\n+\n+102103 DATA DESCRIPTOR       08074B50 (134695760)\n+102107 CRC                   DB187B38 (3675814712)\n+10210B Compressed Size       00001A85 (6789)\n+10210F Uncompressed Size     00001A85 (6789)\n+\n+102113 LOCAL HEADER #412     04034B50 (67324752)\n+102117 Extract Zip Spec      14 (20) '2.0'\n+102118 Extract OS            00 (0) 'MS-DOS'\n+102119 General Purpose Flag  0000 (0)\n+10211B Compression Method    0000 (0) 'Stored'\n+10211D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+102121 CRC                   00000000 (0)\n+102125 Compressed Size       00000000 (0)\n+102129 Uncompressed Size     00000000 (0)\n+10212D Filename Length       005B (91)\n+10212F Extra Length          0009 (9)\n+102131 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x102131: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10218C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10218E   Length              0005 (5)\n+102190   Flags               01 (1) 'Modification'\n+102191   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+102195 LOCAL HEADER #413     04034B50 (67324752)\n+102199 Extract Zip Spec      14 (20) '2.0'\n+10219A Extract OS            00 (0) 'MS-DOS'\n+10219B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+10219D Compression Method    0000 (0) 'Stored'\n+10219F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1021A3 CRC                   00000000 (0)\n+1021A7 Compressed Size       00000000 (0)\n+1021AB Uncompressed Size     00000000 (0)\n+1021AF Filename Length       0071 (113)\n+1021B1 Extra Length          0009 (9)\n+1021B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1021B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+102224 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+102226   Length              0005 (5)\n+102228   Flags               01 (1) 'Modification'\n+102229   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+10222D PAYLOAD\n+\n+103C9B DATA DESCRIPTOR       08074B50 (134695760)\n+103C9F CRC                   CD183667 (3440916071)\n+103CA3 Compressed Size       00001A6E (6766)\n+103CA7 Uncompressed Size     00001A6E (6766)\n+\n+103CAB LOCAL HEADER #414     04034B50 (67324752)\n+103CAF Extract Zip Spec      14 (20) '2.0'\n+103CB0 Extract OS            00 (0) 'MS-DOS'\n+103CB1 General Purpose Flag  0000 (0)\n+103CB3 Compression Method    0000 (0) 'Stored'\n+103CB5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+103CB9 CRC                   00000000 (0)\n+103CBD Compressed Size       00000000 (0)\n+103CC1 Uncompressed Size     00000000 (0)\n+103CC5 Filename Length       005B (91)\n+103CC7 Extra Length          0009 (9)\n+103CC9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x103CC9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+103D24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+103D26   Length              0005 (5)\n+103D28   Flags               01 (1) 'Modification'\n+103D29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+103D2D LOCAL HEADER #415     04034B50 (67324752)\n+103D31 Extract Zip Spec      14 (20) '2.0'\n+103D32 Extract OS            00 (0) 'MS-DOS'\n+103D33 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+103D35 Compression Method    0000 (0) 'Stored'\n+103D37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+103D3B CRC                   00000000 (0)\n+103D3F Compressed Size       00000000 (0)\n+103D43 Uncompressed Size     00000000 (0)\n+103D47 Filename Length       0071 (113)\n+103D49 Extra Length          0009 (9)\n+103D4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x103D4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+103DBC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+103DBE   Length              0005 (5)\n+103DC0   Flags               01 (1) 'Modification'\n+103DC1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+103DC5 PAYLOAD\n+\n+105857 DATA DESCRIPTOR       08074B50 (134695760)\n+10585B CRC                   0C7DD276 (209572470)\n+10585F Compressed Size       00001A92 (6802)\n+105863 Uncompressed Size     00001A92 (6802)\n+\n+105867 LOCAL HEADER #416     04034B50 (67324752)\n+10586B Extract Zip Spec      14 (20) '2.0'\n+10586C Extract OS            00 (0) 'MS-DOS'\n+10586D General Purpose Flag  0000 (0)\n+10586F Compression Method    0000 (0) 'Stored'\n+105871 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+105875 CRC                   00000000 (0)\n+105879 Compressed Size       00000000 (0)\n+10587D Uncompressed Size     00000000 (0)\n+105881 Filename Length       005C (92)\n+105883 Extra Length          0009 (9)\n+105885 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x105885: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1058E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1058E3   Length              0005 (5)\n+1058E5   Flags               01 (1) 'Modification'\n+1058E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1058EA LOCAL HEADER #417     04034B50 (67324752)\n+1058EE Extract Zip Spec      14 (20) '2.0'\n+1058EF Extract OS            00 (0) 'MS-DOS'\n+1058F0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1058F2 Compression Method    0000 (0) 'Stored'\n+1058F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1058F8 CRC                   00000000 (0)\n+1058FC Compressed Size       00000000 (0)\n+105900 Uncompressed Size     00000000 (0)\n+105904 Filename Length       0072 (114)\n+105906 Extra Length          0009 (9)\n+105908 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x105908: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10597A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10597C   Length              0005 (5)\n+10597E   Flags               01 (1) 'Modification'\n+10597F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+105983 PAYLOAD\n+\n+1070B6 DATA DESCRIPTOR       08074B50 (134695760)\n+1070BA CRC                   60EA12C2 (1625952962)\n+1070BE Compressed Size       00001733 (5939)\n+1070C2 Uncompressed Size     00001733 (5939)\n+\n+1070C6 LOCAL HEADER #418     04034B50 (67324752)\n+1070CA Extract Zip Spec      14 (20) '2.0'\n+1070CB Extract OS            00 (0) 'MS-DOS'\n+1070CC General Purpose Flag  0000 (0)\n+1070CE Compression Method    0000 (0) 'Stored'\n+1070D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1070D4 CRC                   00000000 (0)\n+1070D8 Compressed Size       00000000 (0)\n+1070DC Uncompressed Size     00000000 (0)\n+1070E0 Filename Length       005F (95)\n+1070E2 Extra Length          0009 (9)\n+1070E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1070E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+107143 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+107145   Length              0005 (5)\n+107147   Flags               01 (1) 'Modification'\n+107148   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10714C LOCAL HEADER #419     04034B50 (67324752)\n+107150 Extract Zip Spec      14 (20) '2.0'\n+107151 Extract OS            00 (0) 'MS-DOS'\n+107152 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+107154 Compression Method    0000 (0) 'Stored'\n+107156 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10715A CRC                   00000000 (0)\n+10715E Compressed Size       00000000 (0)\n+107162 Uncompressed Size     00000000 (0)\n+107166 Filename Length       0075 (117)\n+107168 Extra Length          0009 (9)\n+10716A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10716A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1071DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1071E1   Length              0005 (5)\n+1071E3   Flags               01 (1) 'Modification'\n+1071E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1071E8 PAYLOAD\n+\n+108865 DATA DESCRIPTOR       08074B50 (134695760)\n+108869 CRC                   4BB1EABD (1269951165)\n+10886D Compressed Size       0000167D (5757)\n+108871 Uncompressed Size     0000167D (5757)\n+\n+108875 LOCAL HEADER #420     04034B50 (67324752)\n+108879 Extract Zip Spec      14 (20) '2.0'\n+10887A Extract OS            00 (0) 'MS-DOS'\n+10887B General Purpose Flag  0000 (0)\n+10887D Compression Method    0000 (0) 'Stored'\n+10887F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+108883 CRC                   00000000 (0)\n+108887 Compressed Size       00000000 (0)\n+10888B Uncompressed Size     00000000 (0)\n+10888F Filename Length       005F (95)\n+108891 Extra Length          0009 (9)\n+108893 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x108893: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1088F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1088F4   Length              0005 (5)\n+1088F6   Flags               01 (1) 'Modification'\n+1088F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1088FB LOCAL HEADER #421     04034B50 (67324752)\n+1088FF Extract Zip Spec      14 (20) '2.0'\n+108900 Extract OS            00 (0) 'MS-DOS'\n+108901 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+108903 Compression Method    0000 (0) 'Stored'\n+108905 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+108909 CRC                   00000000 (0)\n+10890D Compressed Size       00000000 (0)\n+108911 Uncompressed Size     00000000 (0)\n+108915 Filename Length       0075 (117)\n+108917 Extra Length          0009 (9)\n+108919 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x108919: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10898E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+108990   Length              0005 (5)\n+108992   Flags               01 (1) 'Modification'\n+108993   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+108997 PAYLOAD\n+\n+10BC21 DATA DESCRIPTOR       08074B50 (134695760)\n+10BC25 CRC                   A18A8EB9 (2710212281)\n+10BC29 Compressed Size       0000328A (12938)\n+10BC2D Uncompressed Size     0000328A (12938)\n+\n+10BC31 LOCAL HEADER #422     04034B50 (67324752)\n+10BC35 Extract Zip Spec      14 (20) '2.0'\n+10BC36 Extract OS            00 (0) 'MS-DOS'\n+10BC37 General Purpose Flag  0000 (0)\n+10BC39 Compression Method    0000 (0) 'Stored'\n+10BC3B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10BC3F CRC                   00000000 (0)\n+10BC43 Compressed Size       00000000 (0)\n+10BC47 Uncompressed Size     00000000 (0)\n+10BC4B Filename Length       005E (94)\n+10BC4D Extra Length          0009 (9)\n+10BC4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10BC4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10BCAD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10BCAF   Length              0005 (5)\n+10BCB1   Flags               01 (1) 'Modification'\n+10BCB2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10BCB6 LOCAL HEADER #423     04034B50 (67324752)\n+10BCBA Extract Zip Spec      14 (20) '2.0'\n+10BCBB Extract OS            00 (0) 'MS-DOS'\n+10BCBC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+10BCBE Compression Method    0000 (0) 'Stored'\n+10BCC0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10BCC4 CRC                   00000000 (0)\n+10BCC8 Compressed Size       00000000 (0)\n+10BCCC Uncompressed Size     00000000 (0)\n+10BCD0 Filename Length       0074 (116)\n+10BCD2 Extra Length          0009 (9)\n+10BCD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10BCD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10BD48 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10BD4A   Length              0005 (5)\n+10BD4C   Flags               01 (1) 'Modification'\n+10BD4D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+10BD51 PAYLOAD\n+\n+10F5CA DATA DESCRIPTOR       08074B50 (134695760)\n+10F5CE CRC                   B7B762D6 (3082248918)\n+10F5D2 Compressed Size       00003879 (14457)\n+10F5D6 Uncompressed Size     00003879 (14457)\n+\n+10F5DA LOCAL HEADER #424     04034B50 (67324752)\n+10F5DE Extract Zip Spec      14 (20) '2.0'\n+10F5DF Extract OS            00 (0) 'MS-DOS'\n+10F5E0 General Purpose Flag  0000 (0)\n+10F5E2 Compression Method    0000 (0) 'Stored'\n+10F5E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10F5E8 CRC                   00000000 (0)\n+10F5EC Compressed Size       00000000 (0)\n+10F5F0 Uncompressed Size     00000000 (0)\n+10F5F4 Filename Length       0062 (98)\n+10F5F6 Extra Length          0009 (9)\n+10F5F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10F5F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10F65A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10F65C   Length              0005 (5)\n+10F65E   Flags               01 (1) 'Modification'\n+10F65F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10F663 LOCAL HEADER #425     04034B50 (67324752)\n+10F667 Extract Zip Spec      14 (20) '2.0'\n+10F668 Extract OS            00 (0) 'MS-DOS'\n+10F669 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+10F66B Compression Method    0000 (0) 'Stored'\n+10F66D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10F671 CRC                   00000000 (0)\n+10F675 Compressed Size       00000000 (0)\n+10F679 Uncompressed Size     00000000 (0)\n+10F67D Filename Length       0078 (120)\n+10F67F Extra Length          0009 (9)\n+10F681 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10F681: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10F6F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10F6FB   Length              0005 (5)\n+10F6FD   Flags               01 (1) 'Modification'\n+10F6FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+10F702 PAYLOAD\n+\n+111852 DATA DESCRIPTOR       08074B50 (134695760)\n+111856 CRC                   A2B9D29A (2730087066)\n+11185A Compressed Size       00002150 (8528)\n+11185E Uncompressed Size     00002150 (8528)\n+\n+111862 LOCAL HEADER #426     04034B50 (67324752)\n+111866 Extract Zip Spec      14 (20) '2.0'\n+111867 Extract OS            00 (0) 'MS-DOS'\n+111868 General Purpose Flag  0000 (0)\n+11186A Compression Method    0000 (0) 'Stored'\n+11186C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+111870 CRC                   00000000 (0)\n+111874 Compressed Size       00000000 (0)\n+111878 Uncompressed Size     00000000 (0)\n+11187C Filename Length       005B (91)\n+11187E Extra Length          0009 (9)\n+111880 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x111880: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1118DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1118DD   Length              0005 (5)\n+1118DF   Flags               01 (1) 'Modification'\n+1118E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1118E4 LOCAL HEADER #427     04034B50 (67324752)\n+1118E8 Extract Zip Spec      14 (20) '2.0'\n+1118E9 Extract OS            00 (0) 'MS-DOS'\n+1118EA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1118EC Compression Method    0000 (0) 'Stored'\n+1118EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1118F2 CRC                   00000000 (0)\n+1118F6 Compressed Size       00000000 (0)\n+1118FA Uncompressed Size     00000000 (0)\n+1118FE Filename Length       0071 (113)\n+111900 Extra Length          0009 (9)\n+111902 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x111902: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+111973 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+111975   Length              0005 (5)\n+111977   Flags               01 (1) 'Modification'\n+111978   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+11197C PAYLOAD\n+\n+112B58 DATA DESCRIPTOR       08074B50 (134695760)\n+112B5C CRC                   C4FC7EA2 (3304881826)\n+112B60 Compressed Size       000011DC (4572)\n+112B64 Uncompressed Size     000011DC (4572)\n+\n+112B68 LOCAL HEADER #428     04034B50 (67324752)\n+112B6C Extract Zip Spec      14 (20) '2.0'\n+112B6D Extract OS            00 (0) 'MS-DOS'\n+112B6E General Purpose Flag  0000 (0)\n+112B70 Compression Method    0000 (0) 'Stored'\n+112B72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+112B76 CRC                   00000000 (0)\n+112B7A Compressed Size       00000000 (0)\n+112B7E Uncompressed Size     00000000 (0)\n+112B82 Filename Length       005E (94)\n+112B84 Extra Length          0009 (9)\n+112B86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x112B86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+112BE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+112BE6   Length              0005 (5)\n+112BE8   Flags               01 (1) 'Modification'\n+112BE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+112BED LOCAL HEADER #429     04034B50 (67324752)\n+112BF1 Extract Zip Spec      14 (20) '2.0'\n+112BF2 Extract OS            00 (0) 'MS-DOS'\n+112BF3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+112BF5 Compression Method    0000 (0) 'Stored'\n+112BF7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+112BFB CRC                   00000000 (0)\n+112BFF Compressed Size       00000000 (0)\n+112C03 Uncompressed Size     00000000 (0)\n+112C07 Filename Length       0074 (116)\n+112C09 Extra Length          0009 (9)\n+112C0B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x112C0B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+112C7F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+112C81   Length              0005 (5)\n+112C83   Flags               01 (1) 'Modification'\n+112C84   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+112C88 PAYLOAD\n+\n+119F83 DATA DESCRIPTOR       08074B50 (134695760)\n+119F87 CRC                   EE30A8D8 (3996166360)\n+119F8B Compressed Size       000072FB (29435)\n+119F8F Uncompressed Size     000072FB (29435)\n+\n+119F93 LOCAL HEADER #430     04034B50 (67324752)\n+119F97 Extract Zip Spec      14 (20) '2.0'\n+119F98 Extract OS            00 (0) 'MS-DOS'\n+119F99 General Purpose Flag  0000 (0)\n+119F9B Compression Method    0000 (0) 'Stored'\n+119F9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+119FA1 CRC                   00000000 (0)\n+119FA5 Compressed Size       00000000 (0)\n+119FA9 Uncompressed Size     00000000 (0)\n+119FAD Filename Length       0064 (100)\n+119FAF Extra Length          0009 (9)\n+119FB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x119FB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11A015 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11A017   Length              0005 (5)\n+11A019   Flags               01 (1) 'Modification'\n+11A01A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+11A01E LOCAL HEADER #431     04034B50 (67324752)\n+11A022 Extract Zip Spec      14 (20) '2.0'\n+11A023 Extract OS            00 (0) 'MS-DOS'\n+11A024 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+11A026 Compression Method    0000 (0) 'Stored'\n+11A028 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11A02C CRC                   00000000 (0)\n+11A030 Compressed Size       00000000 (0)\n+11A034 Uncompressed Size     00000000 (0)\n+11A038 Filename Length       007A (122)\n+11A03A Extra Length          0009 (9)\n+11A03C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11A03C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11A0B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11A0B8   Length              0005 (5)\n+11A0BA   Flags               01 (1) 'Modification'\n+11A0BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+11A0BF PAYLOAD\n+\n+11E8CD DATA DESCRIPTOR       08074B50 (134695760)\n+11E8D1 CRC                   EA36353C (3929421116)\n+11E8D5 Compressed Size       0000480E (18446)\n+11E8D9 Uncompressed Size     0000480E (18446)\n+\n+11E8DD LOCAL HEADER #432     04034B50 (67324752)\n+11E8E1 Extract Zip Spec      14 (20) '2.0'\n+11E8E2 Extract OS            00 (0) 'MS-DOS'\n+11E8E3 General Purpose Flag  0000 (0)\n+11E8E5 Compression Method    0000 (0) 'Stored'\n+11E8E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11E8EB CRC                   00000000 (0)\n+11E8EF Compressed Size       00000000 (0)\n+11E8F3 Uncompressed Size     00000000 (0)\n+11E8F7 Filename Length       0063 (99)\n+11E8F9 Extra Length          0009 (9)\n+11E8FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11E8FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11E95E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11E960   Length              0005 (5)\n+11E962   Flags               01 (1) 'Modification'\n+11E963   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+11E967 LOCAL HEADER #433     04034B50 (67324752)\n+11E96B Extract Zip Spec      14 (20) '2.0'\n+11E96C Extract OS            00 (0) 'MS-DOS'\n+11E96D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+11E96F Compression Method    0000 (0) 'Stored'\n+11E971 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11E975 CRC                   00000000 (0)\n+11E979 Compressed Size       00000000 (0)\n+11E97D Uncompressed Size     00000000 (0)\n+11E981 Filename Length       0079 (121)\n+11E983 Extra Length          0009 (9)\n+11E985 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11E985: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11E9FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11EA00   Length              0005 (5)\n+11EA02   Flags               01 (1) 'Modification'\n+11EA03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+11EA07 PAYLOAD\n+\n+11F1BD DATA DESCRIPTOR       08074B50 (134695760)\n+11F1C1 CRC                   CA474DE0 (3393670624)\n+11F1C5 Compressed Size       000007B6 (1974)\n+11F1C9 Uncompressed Size     000007B6 (1974)\n+\n+11F1CD LOCAL HEADER #434     04034B50 (67324752)\n+11F1D1 Extract Zip Spec      14 (20) '2.0'\n+11F1D2 Extract OS            00 (0) 'MS-DOS'\n+11F1D3 General Purpose Flag  0000 (0)\n+11F1D5 Compression Method    0000 (0) 'Stored'\n+11F1D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11F1DB CRC                   00000000 (0)\n+11F1DF Compressed Size       00000000 (0)\n+11F1E3 Uncompressed Size     00000000 (0)\n+11F1E7 Filename Length       005F (95)\n+11F1E9 Extra Length          0009 (9)\n+11F1EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11F1EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11F24A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11F24C   Length              0005 (5)\n+11F24E   Flags               01 (1) 'Modification'\n+11F24F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+11F253 LOCAL HEADER #435     04034B50 (67324752)\n+11F257 Extract Zip Spec      14 (20) '2.0'\n+11F258 Extract OS            00 (0) 'MS-DOS'\n+11F259 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+11F25B Compression Method    0000 (0) 'Stored'\n+11F25D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11F261 CRC                   00000000 (0)\n+11F265 Compressed Size       00000000 (0)\n+11F269 Uncompressed Size     00000000 (0)\n+11F26D Filename Length       0075 (117)\n+11F26F Extra Length          0009 (9)\n+11F271 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11F271: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11F2E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11F2E8   Length              0005 (5)\n+11F2EA   Flags               01 (1) 'Modification'\n+11F2EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+11F2EF PAYLOAD\n+\n+1204BA DATA DESCRIPTOR       08074B50 (134695760)\n+1204BE CRC                   A19F99D4 (2711591380)\n+1204C2 Compressed Size       000011CB (4555)\n+1204C6 Uncompressed Size     000011CB (4555)\n+\n+1204CA LOCAL HEADER #436     04034B50 (67324752)\n+1204CE Extract Zip Spec      14 (20) '2.0'\n+1204CF Extract OS            00 (0) 'MS-DOS'\n+1204D0 General Purpose Flag  0000 (0)\n+1204D2 Compression Method    0000 (0) 'Stored'\n+1204D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1204D8 CRC                   00000000 (0)\n+1204DC Compressed Size       00000000 (0)\n+1204E0 Uncompressed Size     00000000 (0)\n+1204E4 Filename Length       005B (91)\n+1204E6 Extra Length          0009 (9)\n+1204E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1204E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+120543 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+120545   Length              0005 (5)\n+120547   Flags               01 (1) 'Modification'\n+120548   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+12054C LOCAL HEADER #437     04034B50 (67324752)\n+120550 Extract Zip Spec      14 (20) '2.0'\n+120551 Extract OS            00 (0) 'MS-DOS'\n+120552 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+120554 Compression Method    0000 (0) 'Stored'\n+120556 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12055A CRC                   00000000 (0)\n+12055E Compressed Size       00000000 (0)\n+120562 Uncompressed Size     00000000 (0)\n+120566 Filename Length       0071 (113)\n+120568 Extra Length          0009 (9)\n+12056A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12056A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1205DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1205DD   Length              0005 (5)\n+1205DF   Flags               01 (1) 'Modification'\n+1205E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1205E4 PAYLOAD\n+\n+122E33 DATA DESCRIPTOR       08074B50 (134695760)\n+122E37 CRC                   7573E84B (1970530379)\n+122E3B Compressed Size       0000284F (10319)\n+122E3F Uncompressed Size     0000284F (10319)\n+\n+122E43 LOCAL HEADER #438     04034B50 (67324752)\n+122E47 Extract Zip Spec      14 (20) '2.0'\n+122E48 Extract OS            00 (0) 'MS-DOS'\n+122E49 General Purpose Flag  0000 (0)\n+122E4B Compression Method    0000 (0) 'Stored'\n+122E4D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+122E51 CRC                   00000000 (0)\n+122E55 Compressed Size       00000000 (0)\n+122E59 Uncompressed Size     00000000 (0)\n+122E5D Filename Length       005F (95)\n+122E5F Extra Length          0009 (9)\n+122E61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x122E61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+122EC0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+122EC2   Length              0005 (5)\n+122EC4   Flags               01 (1) 'Modification'\n+122EC5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+122EC9 LOCAL HEADER #439     04034B50 (67324752)\n+122ECD Extract Zip Spec      14 (20) '2.0'\n+122ECE Extract OS            00 (0) 'MS-DOS'\n+122ECF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+122ED1 Compression Method    0000 (0) 'Stored'\n+122ED3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+122ED7 CRC                   00000000 (0)\n+122EDB Compressed Size       00000000 (0)\n+122EDF Uncompressed Size     00000000 (0)\n+122EE3 Filename Length       0075 (117)\n+122EE5 Extra Length          0009 (9)\n+122EE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x122EE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+122F5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+122F5E   Length              0005 (5)\n+122F60   Flags               01 (1) 'Modification'\n+122F61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+122F65 PAYLOAD\n+\n+1256DC DATA DESCRIPTOR       08074B50 (134695760)\n+1256E0 CRC                   131CB9D8 (320649688)\n+1256E4 Compressed Size       00002777 (10103)\n+1256E8 Uncompressed Size     00002777 (10103)\n+\n+1256EC LOCAL HEADER #440     04034B50 (67324752)\n+1256F0 Extract Zip Spec      14 (20) '2.0'\n+1256F1 Extract OS            00 (0) 'MS-DOS'\n+1256F2 General Purpose Flag  0000 (0)\n+1256F4 Compression Method    0000 (0) 'Stored'\n+1256F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1256FA CRC                   00000000 (0)\n+1256FE Compressed Size       00000000 (0)\n+125702 Uncompressed Size     00000000 (0)\n+125706 Filename Length       005E (94)\n+125708 Extra Length          0009 (9)\n+12570A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12570A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+125768 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12576A   Length              0005 (5)\n+12576C   Flags               01 (1) 'Modification'\n+12576D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+125771 LOCAL HEADER #441     04034B50 (67324752)\n+125775 Extract Zip Spec      14 (20) '2.0'\n+125776 Extract OS            00 (0) 'MS-DOS'\n+125777 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+125779 Compression Method    0000 (0) 'Stored'\n+12577B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12577F CRC                   00000000 (0)\n+125783 Compressed Size       00000000 (0)\n+125787 Uncompressed Size     00000000 (0)\n+12578B Filename Length       0074 (116)\n+12578D Extra Length          0009 (9)\n+12578F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12578F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+125803 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+125805   Length              0005 (5)\n+125807   Flags               01 (1) 'Modification'\n+125808   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+12580C PAYLOAD\n+\n+126919 DATA DESCRIPTOR       08074B50 (134695760)\n+12691D CRC                   95FAB1DA (2516234714)\n+126921 Compressed Size       0000110D (4365)\n+126925 Uncompressed Size     0000110D (4365)\n+\n+126929 LOCAL HEADER #442     04034B50 (67324752)\n+12692D Extract Zip Spec      14 (20) '2.0'\n+12692E Extract OS            00 (0) 'MS-DOS'\n+12692F General Purpose Flag  0000 (0)\n+126931 Compression Method    0000 (0) 'Stored'\n+126933 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+126937 CRC                   00000000 (0)\n+12693B Compressed Size       00000000 (0)\n+12693F Uncompressed Size     00000000 (0)\n+126943 Filename Length       0061 (97)\n+126945 Extra Length          0009 (9)\n+126947 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x126947: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1269A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1269AA   Length              0005 (5)\n+1269AC   Flags               01 (1) 'Modification'\n+1269AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1269B1 LOCAL HEADER #443     04034B50 (67324752)\n+1269B5 Extract Zip Spec      14 (20) '2.0'\n+1269B6 Extract OS            00 (0) 'MS-DOS'\n+1269B7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1269B9 Compression Method    0000 (0) 'Stored'\n+1269BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1269BF CRC                   00000000 (0)\n+1269C3 Compressed Size       00000000 (0)\n+1269C7 Uncompressed Size     00000000 (0)\n+1269CB Filename Length       0077 (119)\n+1269CD Extra Length          0009 (9)\n+1269CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1269CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+126A46 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+126A48   Length              0005 (5)\n+126A4A   Flags               01 (1) 'Modification'\n+126A4B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+126A4F PAYLOAD\n+\n+128425 DATA DESCRIPTOR       08074B50 (134695760)\n+128429 CRC                   B1E82858 (2984781912)\n+12842D Compressed Size       000019D6 (6614)\n+128431 Uncompressed Size     000019D6 (6614)\n+\n+128435 LOCAL HEADER #444     04034B50 (67324752)\n+128439 Extract Zip Spec      14 (20) '2.0'\n+12843A Extract OS            00 (0) 'MS-DOS'\n+12843B General Purpose Flag  0000 (0)\n+12843D Compression Method    0000 (0) 'Stored'\n+12843F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+128443 CRC                   00000000 (0)\n+128447 Compressed Size       00000000 (0)\n+12844B Uncompressed Size     00000000 (0)\n+12844F Filename Length       005E (94)\n+128451 Extra Length          0009 (9)\n+128453 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x128453: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1284B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1284B3   Length              0005 (5)\n+1284B5   Flags               01 (1) 'Modification'\n+1284B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1284BA LOCAL HEADER #445     04034B50 (67324752)\n+1284BE Extract Zip Spec      14 (20) '2.0'\n+1284BF Extract OS            00 (0) 'MS-DOS'\n+1284C0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1284C2 Compression Method    0000 (0) 'Stored'\n+1284C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1284C8 CRC                   00000000 (0)\n+1284CC Compressed Size       00000000 (0)\n+1284D0 Uncompressed Size     00000000 (0)\n+1284D4 Filename Length       0074 (116)\n+1284D6 Extra Length          0009 (9)\n+1284D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1284D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12854C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12854E   Length              0005 (5)\n+128550   Flags               01 (1) 'Modification'\n+128551   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+128555 PAYLOAD\n+\n+1294D3 DATA DESCRIPTOR       08074B50 (134695760)\n+1294D7 CRC                   EA13965E (3927152222)\n+1294DB Compressed Size       00000F7E (3966)\n+1294DF Uncompressed Size     00000F7E (3966)\n+\n+1294E3 LOCAL HEADER #446     04034B50 (67324752)\n+1294E7 Extract Zip Spec      14 (20) '2.0'\n+1294E8 Extract OS            00 (0) 'MS-DOS'\n+1294E9 General Purpose Flag  0000 (0)\n+1294EB Compression Method    0000 (0) 'Stored'\n+1294ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1294F1 CRC                   00000000 (0)\n+1294F5 Compressed Size       00000000 (0)\n+1294F9 Uncompressed Size     00000000 (0)\n+1294FD Filename Length       0057 (87)\n+1294FF Extra Length          0009 (9)\n+129501 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x129501: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+129558 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12955A   Length              0005 (5)\n+12955C   Flags               01 (1) 'Modification'\n+12955D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+129561 LOCAL HEADER #447     04034B50 (67324752)\n+129565 Extract Zip Spec      14 (20) '2.0'\n+129566 Extract OS            00 (0) 'MS-DOS'\n+129567 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+129569 Compression Method    0000 (0) 'Stored'\n+12956B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12956F CRC                   00000000 (0)\n+129573 Compressed Size       00000000 (0)\n+129577 Uncompressed Size     00000000 (0)\n+12957B Filename Length       006D (109)\n+12957D Extra Length          0009 (9)\n+12957F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12957F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1295EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1295EE   Length              0005 (5)\n+1295F0   Flags               01 (1) 'Modification'\n+1295F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1295F5 PAYLOAD\n+\n+12C2CB DATA DESCRIPTOR       08074B50 (134695760)\n+12C2CF CRC                   C8903588 (3364894088)\n+12C2D3 Compressed Size       00002CD6 (11478)\n+12C2D7 Uncompressed Size     00002CD6 (11478)\n+\n+12C2DB LOCAL HEADER #448     04034B50 (67324752)\n+12C2DF Extract Zip Spec      14 (20) '2.0'\n+12C2E0 Extract OS            00 (0) 'MS-DOS'\n+12C2E1 General Purpose Flag  0000 (0)\n+12C2E3 Compression Method    0000 (0) 'Stored'\n+12C2E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12C2E9 CRC                   00000000 (0)\n+12C2ED Compressed Size       00000000 (0)\n+12C2F1 Uncompressed Size     00000000 (0)\n+12C2F5 Filename Length       0068 (104)\n+12C2F7 Extra Length          0009 (9)\n+12C2F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12C2F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12C361 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12C363   Length              0005 (5)\n+12C365   Flags               01 (1) 'Modification'\n+12C366   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+12C36A LOCAL HEADER #449     04034B50 (67324752)\n+12C36E Extract Zip Spec      14 (20) '2.0'\n+12C36F Extract OS            00 (0) 'MS-DOS'\n+12C370 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+12C372 Compression Method    0000 (0) 'Stored'\n+12C374 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12C378 CRC                   00000000 (0)\n+12C37C Compressed Size       00000000 (0)\n+12C380 Uncompressed Size     00000000 (0)\n+12C384 Filename Length       007E (126)\n+12C386 Extra Length          0009 (9)\n+12C388 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12C388: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12C406 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12C408   Length              0005 (5)\n+12C40A   Flags               01 (1) 'Modification'\n+12C40B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+12C40F PAYLOAD\n+\n+12CE3E DATA DESCRIPTOR       08074B50 (134695760)\n+12CE42 CRC                   D19560D0 (3516227792)\n+12CE46 Compressed Size       00000A2F (2607)\n+12CE4A Uncompressed Size     00000A2F (2607)\n+\n+12CE4E LOCAL HEADER #450     04034B50 (67324752)\n+12CE52 Extract Zip Spec      14 (20) '2.0'\n+12CE53 Extract OS            00 (0) 'MS-DOS'\n+12CE54 General Purpose Flag  0000 (0)\n+12CE56 Compression Method    0000 (0) 'Stored'\n+12CE58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12CE5C CRC                   00000000 (0)\n+12CE60 Compressed Size       00000000 (0)\n+12CE64 Uncompressed Size     00000000 (0)\n+12CE68 Filename Length       0032 (50)\n+12CE6A Extra Length          0009 (9)\n+12CE6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12CE6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12CE9E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12CEA0   Length              0005 (5)\n+12CEA2   Flags               01 (1) 'Modification'\n+12CEA3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+12CEA7 LOCAL HEADER #451     04034B50 (67324752)\n+12CEAB Extract Zip Spec      14 (20) '2.0'\n+12CEAC Extract OS            00 (0) 'MS-DOS'\n+12CEAD General Purpose Flag  0000 (0)\n+12CEAF Compression Method    0000 (0) 'Stored'\n+12CEB1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12CEB5 CRC                   00000000 (0)\n+12CEB9 Compressed Size       00000000 (0)\n+12CEBD Uncompressed Size     00000000 (0)\n+12CEC1 Filename Length       0039 (57)\n+12CEC3 Extra Length          0009 (9)\n+12CEC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12CEC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12CEFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12CF00   Length              0005 (5)\n+12CF02   Flags               01 (1) 'Modification'\n+12CF03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+12CF07 LOCAL HEADER #452     04034B50 (67324752)\n+12CF0B Extract Zip Spec      14 (20) '2.0'\n+12CF0C Extract OS            00 (0) 'MS-DOS'\n+12CF0D General Purpose Flag  0000 (0)\n+12CF0F Compression Method    0000 (0) 'Stored'\n+12CF11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12CF15 CRC                   00000000 (0)\n+12CF19 Compressed Size       00000000 (0)\n+12CF1D Uncompressed Size     00000000 (0)\n+12CF21 Filename Length       006F (111)\n+12CF23 Extra Length          0009 (9)\n+12CF25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12CF25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12CF94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12CF96   Length              0005 (5)\n+12CF98   Flags               01 (1) 'Modification'\n+12CF99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+12CF9D LOCAL HEADER #453     04034B50 (67324752)\n+12CFA1 Extract Zip Spec      14 (20) '2.0'\n+12CFA2 Extract OS            00 (0) 'MS-DOS'\n+12CFA3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+12CFA5 Compression Method    0000 (0) 'Stored'\n+12CFA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12CFAB CRC                   00000000 (0)\n+12CFAF Compressed Size       00000000 (0)\n+12CFB3 Uncompressed Size     00000000 (0)\n+12CFB7 Filename Length       0085 (133)\n+12CFB9 Extra Length          0009 (9)\n+12CFBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              X'\n #\n-# WARNING: Offset 0x1295F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x12CFBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-129678 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-12967A   Length              0005 (5)\n-12967C   Flags               01 (1) 'Modification'\n-12967D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-129681 PAYLOAD\n-\n-12E89E DATA DESCRIPTOR       08074B50 (134695760)\n-12E8A2 CRC                   A1414F13 (2705411859)\n-12E8A6 Compressed Size       0000521D (21021)\n-12E8AA Uncompressed Size     0000521D (21021)\n-\n-12E8AE LOCAL HEADER #454     04034B50 (67324752)\n-12E8B2 Extract Zip Spec      14 (20) '2.0'\n-12E8B3 Extract OS            00 (0) 'MS-DOS'\n-12E8B4 General Purpose Flag  0000 (0)\n-12E8B6 Compression Method    0000 (0) 'Stored'\n-12E8B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-12E8BC CRC                   00000000 (0)\n-12E8C0 Compressed Size       00000000 (0)\n-12E8C4 Uncompressed Size     00000000 (0)\n-12E8C8 Filename Length       002F (47)\n-12E8CA Extra Length          0009 (9)\n-12E8CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x12E8CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-12E8FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-12E8FD   Length              0005 (5)\n-12E8FF   Flags               01 (1) 'Modification'\n-12E900   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-12E904 LOCAL HEADER #455     04034B50 (67324752)\n-12E908 Extract Zip Spec      14 (20) '2.0'\n-12E909 Extract OS            00 (0) 'MS-DOS'\n-12E90A General Purpose Flag  0000 (0)\n-12E90C Compression Method    0000 (0) 'Stored'\n-12E90E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-12E912 CRC                   00000000 (0)\n-12E916 Compressed Size       00000000 (0)\n-12E91A Uncompressed Size     00000000 (0)\n-12E91E Filename Length       0036 (54)\n-12E920 Extra Length          0009 (9)\n-12E922 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x12E922: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-12E958 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-12E95A   Length              0005 (5)\n-12E95C   Flags               01 (1) 'Modification'\n-12E95D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-12E961 LOCAL HEADER #456     04034B50 (67324752)\n-12E965 Extract Zip Spec      14 (20) '2.0'\n-12E966 Extract OS            00 (0) 'MS-DOS'\n-12E967 General Purpose Flag  0000 (0)\n-12E969 Compression Method    0000 (0) 'Stored'\n-12E96B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-12E96F CRC                   00000000 (0)\n-12E973 Compressed Size       00000000 (0)\n-12E977 Uncompressed Size     00000000 (0)\n-12E97B Filename Length       006C (108)\n-12E97D Extra Length          0009 (9)\n-12E97F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x12E97F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-12E9EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-12E9ED   Length              0005 (5)\n-12E9EF   Flags               01 (1) 'Modification'\n-12E9F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-12E9F4 LOCAL HEADER #457     04034B50 (67324752)\n-12E9F8 Extract Zip Spec      14 (20) '2.0'\n-12E9F9 Extract OS            00 (0) 'MS-DOS'\n-12E9FA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-12E9FC Compression Method    0000 (0) 'Stored'\n-12E9FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-12EA02 CRC                   00000000 (0)\n-12EA06 Compressed Size       00000000 (0)\n-12EA0A Uncompressed Size     00000000 (0)\n-12EA0E Filename Length       0082 (130)\n-12EA10 Extra Length          0009 (9)\n-12EA12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x12EA12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-12EA94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-12EA96   Length              0005 (5)\n-12EA98   Flags               01 (1) 'Modification'\n-12EA99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-12EA9D PAYLOAD\n-\n-133CCD DATA DESCRIPTOR       08074B50 (134695760)\n-133CD1 CRC                   CB05D09B (3406155931)\n-133CD5 Compressed Size       00005230 (21040)\n-133CD9 Uncompressed Size     00005230 (21040)\n-\n-133CDD LOCAL HEADER #458     04034B50 (67324752)\n-133CE1 Extract Zip Spec      14 (20) '2.0'\n-133CE2 Extract OS            00 (0) 'MS-DOS'\n-133CE3 General Purpose Flag  0000 (0)\n-133CE5 Compression Method    0000 (0) 'Stored'\n-133CE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-133CEB CRC                   00000000 (0)\n-133CEF Compressed Size       00000000 (0)\n-133CF3 Uncompressed Size     00000000 (0)\n-133CF7 Filename Length       0033 (51)\n-133CF9 Extra Length          0009 (9)\n-133CFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x133CFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-133D2E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-133D30   Length              0005 (5)\n-133D32   Flags               01 (1) 'Modification'\n-133D33   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-133D37 LOCAL HEADER #459     04034B50 (67324752)\n-133D3B Extract Zip Spec      14 (20) '2.0'\n-133D3C Extract OS            00 (0) 'MS-DOS'\n-133D3D General Purpose Flag  0000 (0)\n-133D3F Compression Method    0000 (0) 'Stored'\n-133D41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-133D45 CRC                   00000000 (0)\n-133D49 Compressed Size       00000000 (0)\n-133D4D Uncompressed Size     00000000 (0)\n-133D51 Filename Length       003A (58)\n-133D53 Extra Length          0009 (9)\n-133D55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x133D55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-133D8F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-133D91   Length              0005 (5)\n-133D93   Flags               01 (1) 'Modification'\n-133D94   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-133D98 LOCAL HEADER #460     04034B50 (67324752)\n-133D9C Extract Zip Spec      14 (20) '2.0'\n-133D9D Extract OS            00 (0) 'MS-DOS'\n-133D9E General Purpose Flag  0000 (0)\n-133DA0 Compression Method    0000 (0) 'Stored'\n-133DA2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-133DA6 CRC                   00000000 (0)\n-133DAA Compressed Size       00000000 (0)\n-133DAE Uncompressed Size     00000000 (0)\n-133DB2 Filename Length       0070 (112)\n-133DB4 Extra Length          0009 (9)\n-133DB6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x133DB6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-133E26 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-133E28   Length              0005 (5)\n-133E2A   Flags               01 (1) 'Modification'\n-133E2B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-133E2F LOCAL HEADER #461     04034B50 (67324752)\n-133E33 Extract Zip Spec      14 (20) '2.0'\n-133E34 Extract OS            00 (0) 'MS-DOS'\n-133E35 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-133E37 Compression Method    0000 (0) 'Stored'\n-133E39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-133E3D CRC                   00000000 (0)\n-133E41 Compressed Size       00000000 (0)\n-133E45 Uncompressed Size     00000000 (0)\n-133E49 Filename Length       0086 (134)\n-133E4B Extra Length          0009 (9)\n-133E4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+12D040 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12D042   Length              0005 (5)\n+12D044   Flags               01 (1) 'Modification'\n+12D045   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+12D049 PAYLOAD\n+\n+132266 DATA DESCRIPTOR       08074B50 (134695760)\n+13226A CRC                   A1414F13 (2705411859)\n+13226E Compressed Size       0000521D (21021)\n+132272 Uncompressed Size     0000521D (21021)\n+\n+132276 LOCAL HEADER #454     04034B50 (67324752)\n+13227A Extract Zip Spec      14 (20) '2.0'\n+13227B Extract OS            00 (0) 'MS-DOS'\n+13227C General Purpose Flag  0000 (0)\n+13227E Compression Method    0000 (0) 'Stored'\n+132280 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+132284 CRC                   00000000 (0)\n+132288 Compressed Size       00000000 (0)\n+13228C Uncompressed Size     00000000 (0)\n+132290 Filename Length       002F (47)\n+132292 Extra Length          0009 (9)\n+132294 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x132294: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1322C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1322C5   Length              0005 (5)\n+1322C7   Flags               01 (1) 'Modification'\n+1322C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1322CC LOCAL HEADER #455     04034B50 (67324752)\n+1322D0 Extract Zip Spec      14 (20) '2.0'\n+1322D1 Extract OS            00 (0) 'MS-DOS'\n+1322D2 General Purpose Flag  0000 (0)\n+1322D4 Compression Method    0000 (0) 'Stored'\n+1322D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1322DA CRC                   00000000 (0)\n+1322DE Compressed Size       00000000 (0)\n+1322E2 Uncompressed Size     00000000 (0)\n+1322E6 Filename Length       0036 (54)\n+1322E8 Extra Length          0009 (9)\n+1322EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1322EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+132320 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+132322   Length              0005 (5)\n+132324   Flags               01 (1) 'Modification'\n+132325   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+132329 LOCAL HEADER #456     04034B50 (67324752)\n+13232D Extract Zip Spec      14 (20) '2.0'\n+13232E Extract OS            00 (0) 'MS-DOS'\n+13232F General Purpose Flag  0000 (0)\n+132331 Compression Method    0000 (0) 'Stored'\n+132333 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+132337 CRC                   00000000 (0)\n+13233B Compressed Size       00000000 (0)\n+13233F Uncompressed Size     00000000 (0)\n+132343 Filename Length       006C (108)\n+132345 Extra Length          0009 (9)\n+132347 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x132347: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1323B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1323B5   Length              0005 (5)\n+1323B7   Flags               01 (1) 'Modification'\n+1323B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1323BC LOCAL HEADER #457     04034B50 (67324752)\n+1323C0 Extract Zip Spec      14 (20) '2.0'\n+1323C1 Extract OS            00 (0) 'MS-DOS'\n+1323C2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1323C4 Compression Method    0000 (0) 'Stored'\n+1323C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1323CA CRC                   00000000 (0)\n+1323CE Compressed Size       00000000 (0)\n+1323D2 Uncompressed Size     00000000 (0)\n+1323D6 Filename Length       0082 (130)\n+1323D8 Extra Length          0009 (9)\n+1323DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1323DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13245C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13245E   Length              0005 (5)\n+132460   Flags               01 (1) 'Modification'\n+132461   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+132465 PAYLOAD\n+\n+137695 DATA DESCRIPTOR       08074B50 (134695760)\n+137699 CRC                   CB05D09B (3406155931)\n+13769D Compressed Size       00005230 (21040)\n+1376A1 Uncompressed Size     00005230 (21040)\n+\n+1376A5 LOCAL HEADER #458     04034B50 (67324752)\n+1376A9 Extract Zip Spec      14 (20) '2.0'\n+1376AA Extract OS            00 (0) 'MS-DOS'\n+1376AB General Purpose Flag  0000 (0)\n+1376AD Compression Method    0000 (0) 'Stored'\n+1376AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1376B3 CRC                   00000000 (0)\n+1376B7 Compressed Size       00000000 (0)\n+1376BB Uncompressed Size     00000000 (0)\n+1376BF Filename Length       0033 (51)\n+1376C1 Extra Length          0009 (9)\n+1376C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1376C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1376F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1376F8   Length              0005 (5)\n+1376FA   Flags               01 (1) 'Modification'\n+1376FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1376FF LOCAL HEADER #459     04034B50 (67324752)\n+137703 Extract Zip Spec      14 (20) '2.0'\n+137704 Extract OS            00 (0) 'MS-DOS'\n+137705 General Purpose Flag  0000 (0)\n+137707 Compression Method    0000 (0) 'Stored'\n+137709 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13770D CRC                   00000000 (0)\n+137711 Compressed Size       00000000 (0)\n+137715 Uncompressed Size     00000000 (0)\n+137719 Filename Length       003A (58)\n+13771B Extra Length          0009 (9)\n+13771D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13771D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+137757 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+137759   Length              0005 (5)\n+13775B   Flags               01 (1) 'Modification'\n+13775C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+137760 LOCAL HEADER #460     04034B50 (67324752)\n+137764 Extract Zip Spec      14 (20) '2.0'\n+137765 Extract OS            00 (0) 'MS-DOS'\n+137766 General Purpose Flag  0000 (0)\n+137768 Compression Method    0000 (0) 'Stored'\n+13776A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13776E CRC                   00000000 (0)\n+137772 Compressed Size       00000000 (0)\n+137776 Uncompressed Size     00000000 (0)\n+13777A Filename Length       0070 (112)\n+13777C Extra Length          0009 (9)\n+13777E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13777E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1377EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1377F0   Length              0005 (5)\n+1377F2   Flags               01 (1) 'Modification'\n+1377F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1377F7 LOCAL HEADER #461     04034B50 (67324752)\n+1377FB Extract Zip Spec      14 (20) '2.0'\n+1377FC Extract OS            00 (0) 'MS-DOS'\n+1377FD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1377FF Compression Method    0000 (0) 'Stored'\n+137801 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+137805 CRC                   00000000 (0)\n+137809 Compressed Size       00000000 (0)\n+13780D Uncompressed Size     00000000 (0)\n+137811 Filename Length       0086 (134)\n+137813 Extra Length          0009 (9)\n+137815 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x133E4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x137815: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-133ED3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-133ED5   Length              0005 (5)\n-133ED7   Flags               01 (1) 'Modification'\n-133ED8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-133EDC PAYLOAD\n-\n-1347E0 DATA DESCRIPTOR       08074B50 (134695760)\n-1347E4 CRC                   17E2323C (400699964)\n-1347E8 Compressed Size       00000904 (2308)\n-1347EC Uncompressed Size     00000904 (2308)\n-\n-1347F0 LOCAL HEADER #462     04034B50 (67324752)\n-1347F4 Extract Zip Spec      14 (20) '2.0'\n-1347F5 Extract OS            00 (0) 'MS-DOS'\n-1347F6 General Purpose Flag  0000 (0)\n-1347F8 Compression Method    0000 (0) 'Stored'\n-1347FA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1347FE CRC                   00000000 (0)\n-134802 Compressed Size       00000000 (0)\n-134806 Uncompressed Size     00000000 (0)\n-13480A Filename Length       0030 (48)\n-13480C Extra Length          0009 (9)\n-13480E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13480E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13483E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-134840   Length              0005 (5)\n-134842   Flags               01 (1) 'Modification'\n-134843   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-134847 LOCAL HEADER #463     04034B50 (67324752)\n-13484B Extract Zip Spec      14 (20) '2.0'\n-13484C Extract OS            00 (0) 'MS-DOS'\n-13484D General Purpose Flag  0000 (0)\n-13484F Compression Method    0000 (0) 'Stored'\n-134851 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-134855 CRC                   00000000 (0)\n-134859 Compressed Size       00000000 (0)\n-13485D Uncompressed Size     00000000 (0)\n-134861 Filename Length       0037 (55)\n-134863 Extra Length          0009 (9)\n-134865 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x134865: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13489C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13489E   Length              0005 (5)\n-1348A0   Flags               01 (1) 'Modification'\n-1348A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1348A5 LOCAL HEADER #464     04034B50 (67324752)\n-1348A9 Extract Zip Spec      14 (20) '2.0'\n-1348AA Extract OS            00 (0) 'MS-DOS'\n-1348AB General Purpose Flag  0000 (0)\n-1348AD Compression Method    0000 (0) 'Stored'\n-1348AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1348B3 CRC                   00000000 (0)\n-1348B7 Compressed Size       00000000 (0)\n-1348BB Uncompressed Size     00000000 (0)\n-1348BF Filename Length       007B (123)\n-1348C1 Extra Length          0009 (9)\n-1348C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1348C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13493E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-134940   Length              0005 (5)\n-134942   Flags               01 (1) 'Modification'\n-134943   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-134947 LOCAL HEADER #465     04034B50 (67324752)\n-13494B Extract Zip Spec      14 (20) '2.0'\n-13494C Extract OS            00 (0) 'MS-DOS'\n-13494D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-13494F Compression Method    0000 (0) 'Stored'\n-134951 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-134955 CRC                   00000000 (0)\n-134959 Compressed Size       00000000 (0)\n-13495D Uncompressed Size     00000000 (0)\n-134961 Filename Length       0091 (145)\n-134963 Extra Length          0009 (9)\n-134965 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+13789B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13789D   Length              0005 (5)\n+13789F   Flags               01 (1) 'Modification'\n+1378A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1378A4 PAYLOAD\n+\n+1381A8 DATA DESCRIPTOR       08074B50 (134695760)\n+1381AC CRC                   17E2323C (400699964)\n+1381B0 Compressed Size       00000904 (2308)\n+1381B4 Uncompressed Size     00000904 (2308)\n+\n+1381B8 LOCAL HEADER #462     04034B50 (67324752)\n+1381BC Extract Zip Spec      14 (20) '2.0'\n+1381BD Extract OS            00 (0) 'MS-DOS'\n+1381BE General Purpose Flag  0000 (0)\n+1381C0 Compression Method    0000 (0) 'Stored'\n+1381C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1381C6 CRC                   00000000 (0)\n+1381CA Compressed Size       00000000 (0)\n+1381CE Uncompressed Size     00000000 (0)\n+1381D2 Filename Length       0030 (48)\n+1381D4 Extra Length          0009 (9)\n+1381D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1381D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+138206 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+138208   Length              0005 (5)\n+13820A   Flags               01 (1) 'Modification'\n+13820B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13820F LOCAL HEADER #463     04034B50 (67324752)\n+138213 Extract Zip Spec      14 (20) '2.0'\n+138214 Extract OS            00 (0) 'MS-DOS'\n+138215 General Purpose Flag  0000 (0)\n+138217 Compression Method    0000 (0) 'Stored'\n+138219 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13821D CRC                   00000000 (0)\n+138221 Compressed Size       00000000 (0)\n+138225 Uncompressed Size     00000000 (0)\n+138229 Filename Length       0037 (55)\n+13822B Extra Length          0009 (9)\n+13822D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13822D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+138264 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+138266   Length              0005 (5)\n+138268   Flags               01 (1) 'Modification'\n+138269   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13826D LOCAL HEADER #464     04034B50 (67324752)\n+138271 Extract Zip Spec      14 (20) '2.0'\n+138272 Extract OS            00 (0) 'MS-DOS'\n+138273 General Purpose Flag  0000 (0)\n+138275 Compression Method    0000 (0) 'Stored'\n+138277 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13827B CRC                   00000000 (0)\n+13827F Compressed Size       00000000 (0)\n+138283 Uncompressed Size     00000000 (0)\n+138287 Filename Length       007B (123)\n+138289 Extra Length          0009 (9)\n+13828B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13828B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+138306 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+138308   Length              0005 (5)\n+13830A   Flags               01 (1) 'Modification'\n+13830B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13830F LOCAL HEADER #465     04034B50 (67324752)\n+138313 Extract Zip Spec      14 (20) '2.0'\n+138314 Extract OS            00 (0) 'MS-DOS'\n+138315 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+138317 Compression Method    0000 (0) 'Stored'\n+138319 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13831D CRC                   00000000 (0)\n+138321 Compressed Size       00000000 (0)\n+138325 Uncompressed Size     00000000 (0)\n+138329 Filename Length       0091 (145)\n+13832B Extra Length          0009 (9)\n+13832D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x134965: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x13832D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1349F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1349F8   Length              0005 (5)\n-1349FA   Flags               01 (1) 'Modification'\n-1349FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1349FF PAYLOAD\n-\n-135A35 DATA DESCRIPTOR       08074B50 (134695760)\n-135A39 CRC                   CC28EBBC (3425233852)\n-135A3D Compressed Size       00001036 (4150)\n-135A41 Uncompressed Size     00001036 (4150)\n-\n-135A45 LOCAL HEADER #466     04034B50 (67324752)\n-135A49 Extract Zip Spec      14 (20) '2.0'\n-135A4A Extract OS            00 (0) 'MS-DOS'\n-135A4B General Purpose Flag  0000 (0)\n-135A4D Compression Method    0000 (0) 'Stored'\n-135A4F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-135A53 CRC                   00000000 (0)\n-135A57 Compressed Size       00000000 (0)\n-135A5B Uncompressed Size     00000000 (0)\n-135A5F Filename Length       0031 (49)\n-135A61 Extra Length          0009 (9)\n-135A63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x135A63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-135A94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-135A96   Length              0005 (5)\n-135A98   Flags               01 (1) 'Modification'\n-135A99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-135A9D LOCAL HEADER #467     04034B50 (67324752)\n-135AA1 Extract Zip Spec      14 (20) '2.0'\n-135AA2 Extract OS            00 (0) 'MS-DOS'\n-135AA3 General Purpose Flag  0000 (0)\n-135AA5 Compression Method    0000 (0) 'Stored'\n-135AA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-135AAB CRC                   00000000 (0)\n-135AAF Compressed Size       00000000 (0)\n-135AB3 Uncompressed Size     00000000 (0)\n-135AB7 Filename Length       0038 (56)\n-135AB9 Extra Length          0009 (9)\n-135ABB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x135ABB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-135AF3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-135AF5   Length              0005 (5)\n-135AF7   Flags               01 (1) 'Modification'\n-135AF8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-135AFC LOCAL HEADER #468     04034B50 (67324752)\n-135B00 Extract Zip Spec      14 (20) '2.0'\n-135B01 Extract OS            00 (0) 'MS-DOS'\n-135B02 General Purpose Flag  0000 (0)\n-135B04 Compression Method    0000 (0) 'Stored'\n-135B06 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-135B0A CRC                   00000000 (0)\n-135B0E Compressed Size       00000000 (0)\n-135B12 Uncompressed Size     00000000 (0)\n-135B16 Filename Length       006C (108)\n-135B18 Extra Length          0009 (9)\n-135B1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x135B1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-135B86 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-135B88   Length              0005 (5)\n-135B8A   Flags               01 (1) 'Modification'\n-135B8B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-135B8F LOCAL HEADER #469     04034B50 (67324752)\n-135B93 Extract Zip Spec      14 (20) '2.0'\n-135B94 Extract OS            00 (0) 'MS-DOS'\n-135B95 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-135B97 Compression Method    0000 (0) 'Stored'\n-135B99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-135B9D CRC                   00000000 (0)\n-135BA1 Compressed Size       00000000 (0)\n-135BA5 Uncompressed Size     00000000 (0)\n-135BA9 Filename Length       0082 (130)\n-135BAB Extra Length          0009 (9)\n-135BAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x135BAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-135C2F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-135C31   Length              0005 (5)\n-135C33   Flags               01 (1) 'Modification'\n-135C34   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-135C38 PAYLOAD\n-\n-13670C DATA DESCRIPTOR       08074B50 (134695760)\n-136710 CRC                   3FC95820 (1070159904)\n-136714 Compressed Size       00000AD4 (2772)\n-136718 Uncompressed Size     00000AD4 (2772)\n-\n-13671C LOCAL HEADER #470     04034B50 (67324752)\n-136720 Extract Zip Spec      14 (20) '2.0'\n-136721 Extract OS            00 (0) 'MS-DOS'\n-136722 General Purpose Flag  0000 (0)\n-136724 Compression Method    0000 (0) 'Stored'\n-136726 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13672A CRC                   00000000 (0)\n-13672E Compressed Size       00000000 (0)\n-136732 Uncompressed Size     00000000 (0)\n-136736 Filename Length       0026 (38)\n-136738 Extra Length          0009 (9)\n-13673A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13673A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-136760 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-136762   Length              0005 (5)\n-136764   Flags               01 (1) 'Modification'\n-136765   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-136769 LOCAL HEADER #471     04034B50 (67324752)\n-13676D Extract Zip Spec      14 (20) '2.0'\n-13676E Extract OS            00 (0) 'MS-DOS'\n-13676F General Purpose Flag  0000 (0)\n-136771 Compression Method    0000 (0) 'Stored'\n-136773 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-136777 CRC                   00000000 (0)\n-13677B Compressed Size       00000000 (0)\n-13677F Uncompressed Size     00000000 (0)\n-136783 Filename Length       002D (45)\n-136785 Extra Length          0009 (9)\n-136787 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x136787: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1367B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1367B6   Length              0005 (5)\n-1367B8   Flags               01 (1) 'Modification'\n-1367B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1367BD LOCAL HEADER #472     04034B50 (67324752)\n-1367C1 Extract Zip Spec      14 (20) '2.0'\n-1367C2 Extract OS            00 (0) 'MS-DOS'\n-1367C3 General Purpose Flag  0000 (0)\n-1367C5 Compression Method    0000 (0) 'Stored'\n-1367C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1367CB CRC                   00000000 (0)\n-1367CF Compressed Size       00000000 (0)\n-1367D3 Uncompressed Size     00000000 (0)\n-1367D7 Filename Length       005B (91)\n-1367D9 Extra Length          0009 (9)\n-1367DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1367DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-136836 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-136838   Length              0005 (5)\n-13683A   Flags               01 (1) 'Modification'\n-13683B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13683F LOCAL HEADER #473     04034B50 (67324752)\n-136843 Extract Zip Spec      14 (20) '2.0'\n-136844 Extract OS            00 (0) 'MS-DOS'\n-136845 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-136847 Compression Method    0000 (0) 'Stored'\n-136849 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13684D CRC                   00000000 (0)\n-136851 Compressed Size       00000000 (0)\n-136855 Uncompressed Size     00000000 (0)\n-136859 Filename Length       0071 (113)\n-13685B Extra Length          0009 (9)\n-13685D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13685D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1368CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1368D0   Length              0005 (5)\n-1368D2   Flags               01 (1) 'Modification'\n-1368D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1368D7 PAYLOAD\n-\n-137606 DATA DESCRIPTOR       08074B50 (134695760)\n-13760A CRC                   41CBDE11 (1103879697)\n-13760E Compressed Size       00000D2F (3375)\n-137612 Uncompressed Size     00000D2F (3375)\n-\n-137616 LOCAL HEADER #474     04034B50 (67324752)\n-13761A Extract Zip Spec      14 (20) '2.0'\n-13761B Extract OS            00 (0) 'MS-DOS'\n-13761C General Purpose Flag  0000 (0)\n-13761E Compression Method    0000 (0) 'Stored'\n-137620 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-137624 CRC                   00000000 (0)\n-137628 Compressed Size       00000000 (0)\n-13762C Uncompressed Size     00000000 (0)\n-137630 Filename Length       0061 (97)\n-137632 Extra Length          0009 (9)\n-137634 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x137634: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-137695 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-137697   Length              0005 (5)\n-137699   Flags               01 (1) 'Modification'\n-13769A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13769E LOCAL HEADER #475     04034B50 (67324752)\n-1376A2 Extract Zip Spec      14 (20) '2.0'\n-1376A3 Extract OS            00 (0) 'MS-DOS'\n-1376A4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1376A6 Compression Method    0000 (0) 'Stored'\n-1376A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1376AC CRC                   00000000 (0)\n-1376B0 Compressed Size       00000000 (0)\n-1376B4 Uncompressed Size     00000000 (0)\n-1376B8 Filename Length       0077 (119)\n-1376BA Extra Length          0009 (9)\n-1376BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1376BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-137733 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-137735   Length              0005 (5)\n-137737   Flags               01 (1) 'Modification'\n-137738   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-13773C PAYLOAD\n-\n-1393B5 DATA DESCRIPTOR       08074B50 (134695760)\n-1393B9 CRC                   1D768ED5 (494309077)\n-1393BD Compressed Size       00001C79 (7289)\n-1393C1 Uncompressed Size     00001C79 (7289)\n-\n-1393C5 LOCAL HEADER #476     04034B50 (67324752)\n-1393C9 Extract Zip Spec      14 (20) '2.0'\n-1393CA Extract OS            00 (0) 'MS-DOS'\n-1393CB General Purpose Flag  0000 (0)\n-1393CD Compression Method    0000 (0) 'Stored'\n-1393CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1393D3 CRC                   00000000 (0)\n-1393D7 Compressed Size       00000000 (0)\n-1393DB Uncompressed Size     00000000 (0)\n-1393DF Filename Length       002F (47)\n-1393E1 Extra Length          0009 (9)\n-1393E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1393E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-139412 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-139414   Length              0005 (5)\n-139416   Flags               01 (1) 'Modification'\n-139417   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13941B LOCAL HEADER #477     04034B50 (67324752)\n-13941F Extract Zip Spec      14 (20) '2.0'\n-139420 Extract OS            00 (0) 'MS-DOS'\n-139421 General Purpose Flag  0000 (0)\n-139423 Compression Method    0000 (0) 'Stored'\n-139425 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-139429 CRC                   00000000 (0)\n-13942D Compressed Size       00000000 (0)\n-139431 Uncompressed Size     00000000 (0)\n-139435 Filename Length       0036 (54)\n-139437 Extra Length          0009 (9)\n-139439 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x139439: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13946F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-139471   Length              0005 (5)\n-139473   Flags               01 (1) 'Modification'\n-139474   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-139478 LOCAL HEADER #478     04034B50 (67324752)\n-13947C Extract Zip Spec      14 (20) '2.0'\n-13947D Extract OS            00 (0) 'MS-DOS'\n-13947E General Purpose Flag  0000 (0)\n-139480 Compression Method    0000 (0) 'Stored'\n-139482 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-139486 CRC                   00000000 (0)\n-13948A Compressed Size       00000000 (0)\n-13948E Uncompressed Size     00000000 (0)\n-139492 Filename Length       0069 (105)\n-139494 Extra Length          0009 (9)\n-139496 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x139496: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1394FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-139501   Length              0005 (5)\n-139503   Flags               01 (1) 'Modification'\n-139504   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-139508 LOCAL HEADER #479     04034B50 (67324752)\n-13950C Extract Zip Spec      14 (20) '2.0'\n-13950D Extract OS            00 (0) 'MS-DOS'\n-13950E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-139510 Compression Method    0000 (0) 'Stored'\n-139512 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-139516 CRC                   00000000 (0)\n-13951A Compressed Size       00000000 (0)\n-13951E Uncompressed Size     00000000 (0)\n-139522 Filename Length       007F (127)\n-139524 Extra Length          0009 (9)\n-139526 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x139526: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1395A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1395A7   Length              0005 (5)\n-1395A9   Flags               01 (1) 'Modification'\n-1395AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1395AE PAYLOAD\n-\n-13B2C7 DATA DESCRIPTOR       08074B50 (134695760)\n-13B2CB CRC                   7A85C658 (2055587416)\n-13B2CF Compressed Size       00001D19 (7449)\n-13B2D3 Uncompressed Size     00001D19 (7449)\n-\n-13B2D7 LOCAL HEADER #480     04034B50 (67324752)\n-13B2DB Extract Zip Spec      14 (20) '2.0'\n-13B2DC Extract OS            00 (0) 'MS-DOS'\n-13B2DD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-13B2DF Compression Method    0000 (0) 'Stored'\n-13B2E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13B2E5 CRC                   00000000 (0)\n-13B2E9 Compressed Size       00000000 (0)\n-13B2ED Uncompressed Size     00000000 (0)\n-13B2F1 Filename Length       001A (26)\n-13B2F3 Extra Length          0009 (9)\n-13B2F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13B2F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13B30F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13B311   Length              0005 (5)\n-13B313   Flags               01 (1) 'Modification'\n-13B314   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-13B318 PAYLOAD\n-\n-64A3FF DATA DESCRIPTOR       08074B50 (134695760)\n-64A403 CRC                   879A3E43 (2275032643)\n-64A407 Compressed Size       0050F0E7 (5304551)\n-64A40B Uncompressed Size     0050F0E7 (5304551)\n-\n-64A40F CENTRAL HEADER #1     02014B50 (33639248)\n-64A413 Created Zip Spec      14 (20) '2.0'\n-64A414 Created OS            00 (0) 'MS-DOS'\n-64A415 Extract Zip Spec      14 (20) '2.0'\n-64A416 Extract OS            00 (0) 'MS-DOS'\n-64A417 General Purpose Flag  0000 (0)\n-64A419 Compression Method    0000 (0) 'Stored'\n-64A41B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A41F CRC                   00000000 (0)\n-64A423 Compressed Size       00000000 (0)\n-64A427 Uncompressed Size     00000000 (0)\n-64A42B Filename Length       0009 (9)\n-64A42D Extra Length          0009 (9)\n-64A42F Comment Length        0000 (0)\n-64A431 Disk Start            0000 (0)\n-64A433 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A435 Ext File Attributes   00000000 (0)\n-64A439 Local Header Offset   00000000 (0)\n-64A43D Filename              'XXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A43D: Filename 'XXXXXXXXX'\n-#          Zero length filename\n-#\n-64A446 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A448   Length              0005 (5)\n-64A44A   Flags               01 (1) 'Modification'\n-64A44B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A44F CENTRAL HEADER #2     02014B50 (33639248)\n-64A453 Created Zip Spec      14 (20) '2.0'\n-64A454 Created OS            00 (0) 'MS-DOS'\n-64A455 Extract Zip Spec      14 (20) '2.0'\n-64A456 Extract OS            00 (0) 'MS-DOS'\n-64A457 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64A459 Compression Method    0000 (0) 'Stored'\n-64A45B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A45F CRC                   9DCF049A (2647590042)\n-64A463 Compressed Size       00012A7A (76410)\n-64A467 Uncompressed Size     00012A7A (76410)\n-64A46B Filename Length       0015 (21)\n-64A46D Extra Length          0009 (9)\n-64A46F Comment Length        0000 (0)\n-64A471 Disk Start            0000 (0)\n-64A473 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A475 Ext File Attributes   00000000 (0)\n-64A479 Local Header Offset   00000030 (48)\n-64A47D Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A47D: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64A492 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A494   Length              0005 (5)\n-64A496   Flags               01 (1) 'Modification'\n-64A497   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A49B CENTRAL HEADER #3     02014B50 (33639248)\n-64A49F Created Zip Spec      14 (20) '2.0'\n-64A4A0 Created OS            00 (0) 'MS-DOS'\n-64A4A1 Extract Zip Spec      14 (20) '2.0'\n-64A4A2 Extract OS            00 (0) 'MS-DOS'\n-64A4A3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64A4A5 Compression Method    0000 (0) 'Stored'\n-64A4A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A4AB CRC                   86E2B4B4 (2263004340)\n-64A4AF Compressed Size       00002C5E (11358)\n-64A4B3 Uncompressed Size     00002C5E (11358)\n-64A4B7 Filename Length       0010 (16)\n-64A4B9 Extra Length          0009 (9)\n-64A4BB Comment Length        0000 (0)\n-64A4BD Disk Start            0000 (0)\n-64A4BF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A4C1 Ext File Attributes   00000000 (0)\n-64A4C5 Local Header Offset   00012AF6 (76534)\n-64A4C9 Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A4C9: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64A4D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A4DB   Length              0005 (5)\n-64A4DD   Flags               01 (1) 'Modification'\n-64A4DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A4E2 CENTRAL HEADER #4     02014B50 (33639248)\n-64A4E6 Created Zip Spec      14 (20) '2.0'\n-64A4E7 Created OS            00 (0) 'MS-DOS'\n-64A4E8 Extract Zip Spec      14 (20) '2.0'\n-64A4E9 Extract OS            00 (0) 'MS-DOS'\n-64A4EA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64A4EC Compression Method    0000 (0) 'Stored'\n-64A4EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A4F2 CRC                   05EA707D (99250301)\n-64A4F6 Compressed Size       00000106 (262)\n-64A4FA Uncompressed Size     00000106 (262)\n-64A4FE Filename Length       0014 (20)\n-64A500 Extra Length          0009 (9)\n-64A502 Comment Length        0000 (0)\n-64A504 Disk Start            0000 (0)\n-64A506 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A508 Ext File Attributes   00000000 (0)\n-64A50C Local Header Offset   0001579B (87963)\n-64A510 Filename              'XXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A510: Filename 'XXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64A524 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A526   Length              0005 (5)\n-64A528   Flags               01 (1) 'Modification'\n-64A529   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A52D CENTRAL HEADER #5     02014B50 (33639248)\n-64A531 Created Zip Spec      14 (20) '2.0'\n-64A532 Created OS            00 (0) 'MS-DOS'\n-64A533 Extract Zip Spec      14 (20) '2.0'\n-64A534 Extract OS            00 (0) 'MS-DOS'\n-64A535 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64A537 Compression Method    0000 (0) 'Stored'\n-64A539 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A53D CRC                   91A82808 (2443716616)\n-64A541 Compressed Size       000000A0 (160)\n-64A545 Uncompressed Size     000000A0 (160)\n-64A549 Filename Length       000F (15)\n-64A54B Extra Length          0009 (9)\n-64A54D Comment Length        0000 (0)\n-64A54F Disk Start            0000 (0)\n-64A551 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A553 Ext File Attributes   00000000 (0)\n-64A557 Local Header Offset   000158EC (88300)\n-64A55B Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A55B: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64A56A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A56C   Length              0005 (5)\n-64A56E   Flags               01 (1) 'Modification'\n-64A56F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A573 CENTRAL HEADER #6     02014B50 (33639248)\n-64A577 Created Zip Spec      14 (20) '2.0'\n-64A578 Created OS            00 (0) 'MS-DOS'\n-64A579 Extract Zip Spec      14 (20) '2.0'\n-64A57A Extract OS            00 (0) 'MS-DOS'\n-64A57B General Purpose Flag  0000 (0)\n-64A57D Compression Method    0000 (0) 'Stored'\n-64A57F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A583 CRC                   00000000 (0)\n-64A587 Compressed Size       00000000 (0)\n-64A58B Uncompressed Size     00000000 (0)\n-64A58F Filename Length       000F (15)\n-64A591 Extra Length          0009 (9)\n-64A593 Comment Length        0000 (0)\n-64A595 Disk Start            0000 (0)\n-64A597 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A599 Ext File Attributes   00000000 (0)\n-64A59D Local Header Offset   000159D2 (88530)\n-64A5A1 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A5A1: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64A5B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A5B2   Length              0005 (5)\n-64A5B4   Flags               01 (1) 'Modification'\n-64A5B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A5B9 CENTRAL HEADER #7     02014B50 (33639248)\n-64A5BD Created Zip Spec      14 (20) '2.0'\n-64A5BE Created OS            00 (0) 'MS-DOS'\n-64A5BF Extract Zip Spec      14 (20) '2.0'\n-64A5C0 Extract OS            00 (0) 'MS-DOS'\n-64A5C1 General Purpose Flag  0000 (0)\n-64A5C3 Compression Method    0000 (0) 'Stored'\n-64A5C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A5C9 CRC                   00000000 (0)\n-64A5CD Compressed Size       00000000 (0)\n-64A5D1 Uncompressed Size     00000000 (0)\n-64A5D5 Filename Length       001F (31)\n-64A5D7 Extra Length          0009 (9)\n-64A5D9 Comment Length        0000 (0)\n-64A5DB Disk Start            0000 (0)\n-64A5DD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A5DF Ext File Attributes   00000000 (0)\n-64A5E3 Local Header Offset   00015A08 (88584)\n-64A5E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A5E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64A606 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A608   Length              0005 (5)\n-64A60A   Flags               01 (1) 'Modification'\n-64A60B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A60F CENTRAL HEADER #8     02014B50 (33639248)\n-64A613 Created Zip Spec      14 (20) '2.0'\n-64A614 Created OS            00 (0) 'MS-DOS'\n-64A615 Extract Zip Spec      14 (20) '2.0'\n-64A616 Extract OS            00 (0) 'MS-DOS'\n-64A617 General Purpose Flag  0000 (0)\n-64A619 Compression Method    0000 (0) 'Stored'\n-64A61B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A61F CRC                   00000000 (0)\n-64A623 Compressed Size       00000000 (0)\n-64A627 Uncompressed Size     00000000 (0)\n-64A62B Filename Length       0035 (53)\n-64A62D Extra Length          0009 (9)\n-64A62F Comment Length        0000 (0)\n-64A631 Disk Start            0000 (0)\n-64A633 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A635 Ext File Attributes   00000000 (0)\n-64A639 Local Header Offset   00015A4E (88654)\n-64A63D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A63D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64A672 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A674   Length              0005 (5)\n-64A676   Flags               01 (1) 'Modification'\n-64A677   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A67B CENTRAL HEADER #9     02014B50 (33639248)\n-64A67F Created Zip Spec      14 (20) '2.0'\n-64A680 Created OS            00 (0) 'MS-DOS'\n-64A681 Extract Zip Spec      14 (20) '2.0'\n-64A682 Extract OS            00 (0) 'MS-DOS'\n-64A683 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64A685 Compression Method    0000 (0) 'Stored'\n-64A687 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A68B CRC                   00000000 (0)\n-64A68F Compressed Size       00000000 (0)\n-64A693 Uncompressed Size     00000000 (0)\n-64A697 Filename Length       0043 (67)\n-64A699 Extra Length          0009 (9)\n-64A69B Comment Length        0000 (0)\n-64A69D Disk Start            0000 (0)\n-64A69F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A6A1 Ext File Attributes   00000000 (0)\n-64A6A5 Local Header Offset   00015AAA (88746)\n-64A6A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A6A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64A6EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A6EE   Length              0005 (5)\n-64A6F0   Flags               01 (1) 'Modification'\n-64A6F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A6F5 CENTRAL HEADER #10    02014B50 (33639248)\n-64A6F9 Created Zip Spec      14 (20) '2.0'\n-64A6FA Created OS            00 (0) 'MS-DOS'\n-64A6FB Extract Zip Spec      14 (20) '2.0'\n-64A6FC Extract OS            00 (0) 'MS-DOS'\n-64A6FD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64A6FF Compression Method    0000 (0) 'Stored'\n-64A701 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A705 CRC                   71BCF1C4 (1908208068)\n-64A709 Compressed Size       00001C37 (7223)\n-64A70D Uncompressed Size     00001C37 (7223)\n-64A711 Filename Length       003C (60)\n-64A713 Extra Length          0009 (9)\n-64A715 Comment Length        0000 (0)\n-64A717 Disk Start            0000 (0)\n-64A719 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A71B Ext File Attributes   00000000 (0)\n-64A71F Local Header Offset   00015B24 (88868)\n-64A723 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A723: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64A75F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A761   Length              0005 (5)\n-64A763   Flags               01 (1) 'Modification'\n-64A764   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A768 CENTRAL HEADER #11    02014B50 (33639248)\n-64A76C Created Zip Spec      14 (20) '2.0'\n-64A76D Created OS            00 (0) 'MS-DOS'\n-64A76E Extract Zip Spec      14 (20) '2.0'\n-64A76F Extract OS            00 (0) 'MS-DOS'\n-64A770 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64A772 Compression Method    0000 (0) 'Stored'\n-64A774 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A778 CRC                   A0542DCB (2689871307)\n-64A77C Compressed Size       000004EB (1259)\n-64A780 Uncompressed Size     000004EB (1259)\n-64A784 Filename Length       0010 (16)\n-64A786 Extra Length          0009 (9)\n-64A788 Comment Length        0000 (0)\n-64A78A Disk Start            0000 (0)\n-64A78C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A78E Ext File Attributes   00000000 (0)\n-64A792 Local Header Offset   000177CE (96206)\n-64A796 Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A796: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64A7A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A7A8   Length              0005 (5)\n-64A7AA   Flags               01 (1) 'Modification'\n-64A7AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A7AF CENTRAL HEADER #12    02014B50 (33639248)\n-64A7B3 Created Zip Spec      14 (20) '2.0'\n-64A7B4 Created OS            00 (0) 'MS-DOS'\n-64A7B5 Extract Zip Spec      14 (20) '2.0'\n-64A7B6 Extract OS            00 (0) 'MS-DOS'\n-64A7B7 General Purpose Flag  0000 (0)\n-64A7B9 Compression Method    0000 (0) 'Stored'\n-64A7BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A7BF CRC                   00000000 (0)\n-64A7C3 Compressed Size       00000000 (0)\n-64A7C7 Uncompressed Size     00000000 (0)\n-64A7CB Filename Length       0005 (5)\n-64A7CD Extra Length          0009 (9)\n-64A7CF Comment Length        0000 (0)\n-64A7D1 Disk Start            0000 (0)\n-64A7D3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A7D5 Ext File Attributes   00000000 (0)\n-64A7D9 Local Header Offset   00017D00 (97536)\n-64A7DD Filename              'XXXXX'\n-#\n-# WARNING: Offset 0x64A7DD: Filename 'XXXXX'\n-#          Zero length filename\n-#\n-64A7E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A7E4   Length              0005 (5)\n-64A7E6   Flags               01 (1) 'Modification'\n-64A7E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A7EB CENTRAL HEADER #13    02014B50 (33639248)\n-64A7EF Created Zip Spec      14 (20) '2.0'\n-64A7F0 Created OS            00 (0) 'MS-DOS'\n-64A7F1 Extract Zip Spec      14 (20) '2.0'\n-64A7F2 Extract OS            00 (0) 'MS-DOS'\n-64A7F3 General Purpose Flag  0000 (0)\n-64A7F5 Compression Method    0000 (0) 'Stored'\n-64A7F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A7FB CRC                   00000000 (0)\n-64A7FF Compressed Size       00000000 (0)\n-64A803 Uncompressed Size     00000000 (0)\n-64A807 Filename Length       0015 (21)\n-64A809 Extra Length          0009 (9)\n-64A80B Comment Length        0000 (0)\n-64A80D Disk Start            0000 (0)\n-64A80F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A811 Ext File Attributes   00000000 (0)\n-64A815 Local Header Offset   00017D2C (97580)\n-64A819 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A819: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64A82E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A830   Length              0005 (5)\n-64A832   Flags               01 (1) 'Modification'\n-64A833   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A837 CENTRAL HEADER #14    02014B50 (33639248)\n-64A83B Created Zip Spec      14 (20) '2.0'\n-64A83C Created OS            00 (0) 'MS-DOS'\n-64A83D Extract Zip Spec      14 (20) '2.0'\n-64A83E Extract OS            00 (0) 'MS-DOS'\n-64A83F General Purpose Flag  0000 (0)\n-64A841 Compression Method    0000 (0) 'Stored'\n-64A843 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A847 CRC                   00000000 (0)\n-64A84B Compressed Size       00000000 (0)\n-64A84F Uncompressed Size     00000000 (0)\n-64A853 Filename Length       0027 (39)\n-64A855 Extra Length          0009 (9)\n-64A857 Comment Length        0000 (0)\n-64A859 Disk Start            0000 (0)\n-64A85B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A85D Ext File Attributes   00000000 (0)\n-64A861 Local Header Offset   00017D68 (97640)\n-64A865 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A865: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64A88C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A88E   Length              0005 (5)\n-64A890   Flags               01 (1) 'Modification'\n-64A891   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A895 CENTRAL HEADER #15    02014B50 (33639248)\n-64A899 Created Zip Spec      14 (20) '2.0'\n-64A89A Created OS            00 (0) 'MS-DOS'\n-64A89B Extract Zip Spec      14 (20) '2.0'\n-64A89C Extract OS            00 (0) 'MS-DOS'\n-64A89D General Purpose Flag  0000 (0)\n-64A89F Compression Method    0000 (0) 'Stored'\n-64A8A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A8A5 CRC                   00000000 (0)\n-64A8A9 Compressed Size       00000000 (0)\n-64A8AD Uncompressed Size     00000000 (0)\n-64A8B1 Filename Length       002E (46)\n-64A8B3 Extra Length          0009 (9)\n-64A8B5 Comment Length        0000 (0)\n-64A8B7 Disk Start            0000 (0)\n-64A8B9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A8BB Ext File Attributes   00000000 (0)\n-64A8BF Local Header Offset   00017DB6 (97718)\n-64A8C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A8C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64A8F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A8F3   Length              0005 (5)\n-64A8F5   Flags               01 (1) 'Modification'\n-64A8F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A8FA CENTRAL HEADER #16    02014B50 (33639248)\n-64A8FE Created Zip Spec      14 (20) '2.0'\n-64A8FF Created OS            00 (0) 'MS-DOS'\n-64A900 Extract Zip Spec      14 (20) '2.0'\n-64A901 Extract OS            00 (0) 'MS-DOS'\n-64A902 General Purpose Flag  0000 (0)\n-64A904 Compression Method    0000 (0) 'Stored'\n-64A906 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A90A CRC                   00000000 (0)\n-64A90E Compressed Size       00000000 (0)\n-64A912 Uncompressed Size     00000000 (0)\n-64A916 Filename Length       0065 (101)\n-64A918 Extra Length          0009 (9)\n-64A91A Comment Length        0000 (0)\n-64A91C Disk Start            0000 (0)\n-64A91E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A920 Ext File Attributes   00000000 (0)\n-64A924 Local Header Offset   00017E0B (97803)\n-64A928 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A928: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64A98D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64A98F   Length              0005 (5)\n-64A991   Flags               01 (1) 'Modification'\n-64A992   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64A996 CENTRAL HEADER #17    02014B50 (33639248)\n-64A99A Created Zip Spec      14 (20) '2.0'\n-64A99B Created OS            00 (0) 'MS-DOS'\n-64A99C Extract Zip Spec      14 (20) '2.0'\n-64A99D Extract OS            00 (0) 'MS-DOS'\n-64A99E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64A9A0 Compression Method    0000 (0) 'Stored'\n-64A9A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64A9A6 CRC                   9CB4EC6B (2629102699)\n-64A9AA Compressed Size       00000AA2 (2722)\n-64A9AE Uncompressed Size     00000AA2 (2722)\n-64A9B2 Filename Length       007B (123)\n-64A9B4 Extra Length          0009 (9)\n-64A9B6 Comment Length        0000 (0)\n-64A9B8 Disk Start            0000 (0)\n-64A9BA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64A9BC Ext File Attributes   00000000 (0)\n-64A9C0 Local Header Offset   00017E97 (97943)\n-64A9C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A9C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64AA3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64AA41   Length              0005 (5)\n-64AA43   Flags               01 (1) 'Modification'\n-64AA44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64AA48 CENTRAL HEADER #18    02014B50 (33639248)\n-64AA4C Created Zip Spec      14 (20) '2.0'\n-64AA4D Created OS            00 (0) 'MS-DOS'\n-64AA4E Extract Zip Spec      14 (20) '2.0'\n-64AA4F Extract OS            00 (0) 'MS-DOS'\n-64AA50 General Purpose Flag  0000 (0)\n-64AA52 Compression Method    0000 (0) 'Stored'\n-64AA54 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64AA58 CRC                   00000000 (0)\n-64AA5C Compressed Size       00000000 (0)\n-64AA60 Uncompressed Size     00000000 (0)\n-64AA64 Filename Length       0025 (37)\n-64AA66 Extra Length          0009 (9)\n-64AA68 Comment Length        0000 (0)\n-64AA6A Disk Start            0000 (0)\n-64AA6C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64AA6E Ext File Attributes   00000000 (0)\n-64AA72 Local Header Offset   000189EB (100843)\n-64AA76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64AA76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64AA9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64AA9D   Length              0005 (5)\n-64AA9F   Flags               01 (1) 'Modification'\n-64AAA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64AAA4 CENTRAL HEADER #19    02014B50 (33639248)\n-64AAA8 Created Zip Spec      14 (20) '2.0'\n-64AAA9 Created OS            00 (0) 'MS-DOS'\n-64AAAA Extract Zip Spec      14 (20) '2.0'\n-64AAAB Extract OS            00 (0) 'MS-DOS'\n-64AAAC General Purpose Flag  0000 (0)\n-64AAAE Compression Method    0000 (0) 'Stored'\n-64AAB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64AAB4 CRC                   00000000 (0)\n-64AAB8 Compressed Size       00000000 (0)\n-64AABC Uncompressed Size     00000000 (0)\n-64AAC0 Filename Length       002C (44)\n-64AAC2 Extra Length          0009 (9)\n-64AAC4 Comment Length        0000 (0)\n-64AAC6 Disk Start            0000 (0)\n-64AAC8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64AACA Ext File Attributes   00000000 (0)\n-64AACE Local Header Offset   00018A37 (100919)\n-64AAD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64AAD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64AAFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64AB00   Length              0005 (5)\n-64AB02   Flags               01 (1) 'Modification'\n-64AB03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64AB07 CENTRAL HEADER #20    02014B50 (33639248)\n-64AB0B Created Zip Spec      14 (20) '2.0'\n-64AB0C Created OS            00 (0) 'MS-DOS'\n-64AB0D Extract Zip Spec      14 (20) '2.0'\n-64AB0E Extract OS            00 (0) 'MS-DOS'\n-64AB0F General Purpose Flag  0000 (0)\n-64AB11 Compression Method    0000 (0) 'Stored'\n-64AB13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64AB17 CRC                   00000000 (0)\n-64AB1B Compressed Size       00000000 (0)\n-64AB1F Uncompressed Size     00000000 (0)\n-64AB23 Filename Length       0061 (97)\n-64AB25 Extra Length          0009 (9)\n-64AB27 Comment Length        0000 (0)\n-64AB29 Disk Start            0000 (0)\n-64AB2B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64AB2D Ext File Attributes   00000000 (0)\n-64AB31 Local Header Offset   00018A8A (101002)\n-64AB35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64AB35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64AB96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64AB98   Length              0005 (5)\n-64AB9A   Flags               01 (1) 'Modification'\n-64AB9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64AB9F CENTRAL HEADER #21    02014B50 (33639248)\n-64ABA3 Created Zip Spec      14 (20) '2.0'\n-64ABA4 Created OS            00 (0) 'MS-DOS'\n-64ABA5 Extract Zip Spec      14 (20) '2.0'\n-64ABA6 Extract OS            00 (0) 'MS-DOS'\n-64ABA7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64ABA9 Compression Method    0000 (0) 'Stored'\n-64ABAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64ABAF CRC                   1401A9F3 (335653363)\n-64ABB3 Compressed Size       00000945 (2373)\n-64ABB7 Uncompressed Size     00000945 (2373)\n-64ABBB Filename Length       0077 (119)\n-64ABBD Extra Length          0009 (9)\n-64ABBF Comment Length        0000 (0)\n-64ABC1 Disk Start            0000 (0)\n-64ABC3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64ABC5 Ext File Attributes   00000000 (0)\n-64ABC9 Local Header Offset   00018B12 (101138)\n-64ABCD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64ABCD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64AC44 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64AC46   Length              0005 (5)\n-64AC48   Flags               01 (1) 'Modification'\n-64AC49   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64AC4D CENTRAL HEADER #22    02014B50 (33639248)\n-64AC51 Created Zip Spec      14 (20) '2.0'\n-64AC52 Created OS            00 (0) 'MS-DOS'\n-64AC53 Extract Zip Spec      14 (20) '2.0'\n-64AC54 Extract OS            00 (0) 'MS-DOS'\n-64AC55 General Purpose Flag  0000 (0)\n-64AC57 Compression Method    0000 (0) 'Stored'\n-64AC59 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64AC5D CRC                   00000000 (0)\n-64AC61 Compressed Size       00000000 (0)\n-64AC65 Uncompressed Size     00000000 (0)\n-64AC69 Filename Length       0023 (35)\n-64AC6B Extra Length          0009 (9)\n-64AC6D Comment Length        0000 (0)\n-64AC6F Disk Start            0000 (0)\n-64AC71 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64AC73 Ext File Attributes   00000000 (0)\n-64AC77 Local Header Offset   00019505 (103685)\n-64AC7B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64AC7B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64AC9E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64ACA0   Length              0005 (5)\n-64ACA2   Flags               01 (1) 'Modification'\n-64ACA3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64ACA7 CENTRAL HEADER #23    02014B50 (33639248)\n-64ACAB Created Zip Spec      14 (20) '2.0'\n-64ACAC Created OS            00 (0) 'MS-DOS'\n-64ACAD Extract Zip Spec      14 (20) '2.0'\n-64ACAE Extract OS            00 (0) 'MS-DOS'\n-64ACAF General Purpose Flag  0000 (0)\n-64ACB1 Compression Method    0000 (0) 'Stored'\n-64ACB3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64ACB7 CRC                   00000000 (0)\n-64ACBB Compressed Size       00000000 (0)\n-64ACBF Uncompressed Size     00000000 (0)\n-64ACC3 Filename Length       002A (42)\n-64ACC5 Extra Length          0009 (9)\n-64ACC7 Comment Length        0000 (0)\n-64ACC9 Disk Start            0000 (0)\n-64ACCB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64ACCD Ext File Attributes   00000000 (0)\n-64ACD1 Local Header Offset   0001954F (103759)\n-64ACD5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64ACD5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64ACFF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64AD01   Length              0005 (5)\n-64AD03   Flags               01 (1) 'Modification'\n-64AD04   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64AD08 CENTRAL HEADER #24    02014B50 (33639248)\n-64AD0C Created Zip Spec      14 (20) '2.0'\n-64AD0D Created OS            00 (0) 'MS-DOS'\n-64AD0E Extract Zip Spec      14 (20) '2.0'\n-64AD0F Extract OS            00 (0) 'MS-DOS'\n-64AD10 General Purpose Flag  0000 (0)\n-64AD12 Compression Method    0000 (0) 'Stored'\n-64AD14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64AD18 CRC                   00000000 (0)\n-64AD1C Compressed Size       00000000 (0)\n-64AD20 Uncompressed Size     00000000 (0)\n-64AD24 Filename Length       0056 (86)\n-64AD26 Extra Length          0009 (9)\n-64AD28 Comment Length        0000 (0)\n-64AD2A Disk Start            0000 (0)\n-64AD2C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64AD2E Ext File Attributes   00000000 (0)\n-64AD32 Local Header Offset   000195A0 (103840)\n-64AD36 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64AD36: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64AD8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64AD8E   Length              0005 (5)\n-64AD90   Flags               01 (1) 'Modification'\n-64AD91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64AD95 CENTRAL HEADER #25    02014B50 (33639248)\n-64AD99 Created Zip Spec      14 (20) '2.0'\n-64AD9A Created OS            00 (0) 'MS-DOS'\n-64AD9B Extract Zip Spec      14 (20) '2.0'\n-64AD9C Extract OS            00 (0) 'MS-DOS'\n-64AD9D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64AD9F Compression Method    0000 (0) 'Stored'\n-64ADA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64ADA5 CRC                   445AD7B2 (1146804146)\n-64ADA9 Compressed Size       00000FBF (4031)\n-64ADAD Uncompressed Size     00000FBF (4031)\n-64ADB1 Filename Length       006C (108)\n-64ADB3 Extra Length          0009 (9)\n-64ADB5 Comment Length        0000 (0)\n-64ADB7 Disk Start            0000 (0)\n-64ADB9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64ADBB Ext File Attributes   00000000 (0)\n-64ADBF Local Header Offset   0001961D (103965)\n-64ADC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64ADC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64AE2F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64AE31   Length              0005 (5)\n-64AE33   Flags               01 (1) 'Modification'\n-64AE34   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64AE38 CENTRAL HEADER #26    02014B50 (33639248)\n-64AE3C Created Zip Spec      14 (20) '2.0'\n-64AE3D Created OS            00 (0) 'MS-DOS'\n-64AE3E Extract Zip Spec      14 (20) '2.0'\n-64AE3F Extract OS            00 (0) 'MS-DOS'\n-64AE40 General Purpose Flag  0000 (0)\n-64AE42 Compression Method    0000 (0) 'Stored'\n-64AE44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64AE48 CRC                   00000000 (0)\n-64AE4C Compressed Size       00000000 (0)\n-64AE50 Uncompressed Size     00000000 (0)\n-64AE54 Filename Length       0056 (86)\n-64AE56 Extra Length          0009 (9)\n-64AE58 Comment Length        0000 (0)\n-64AE5A Disk Start            0000 (0)\n-64AE5C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64AE5E Ext File Attributes   00000000 (0)\n-64AE62 Local Header Offset   0001A67F (108159)\n-64AE66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64AE66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64AEBC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64AEBE   Length              0005 (5)\n-64AEC0   Flags               01 (1) 'Modification'\n-64AEC1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64AEC5 CENTRAL HEADER #27    02014B50 (33639248)\n-64AEC9 Created Zip Spec      14 (20) '2.0'\n-64AECA Created OS            00 (0) 'MS-DOS'\n-64AECB Extract Zip Spec      14 (20) '2.0'\n-64AECC Extract OS            00 (0) 'MS-DOS'\n-64AECD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64AECF Compression Method    0000 (0) 'Stored'\n-64AED1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64AED5 CRC                   A2A96EA2 (2729012898)\n-64AED9 Compressed Size       000016DE (5854)\n-64AEDD Uncompressed Size     000016DE (5854)\n-64AEE1 Filename Length       006C (108)\n-64AEE3 Extra Length          0009 (9)\n-64AEE5 Comment Length        0000 (0)\n-64AEE7 Disk Start            0000 (0)\n-64AEE9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64AEEB Ext File Attributes   00000000 (0)\n-64AEEF Local Header Offset   0001A6FC (108284)\n-64AEF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64AEF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64AF5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64AF61   Length              0005 (5)\n-64AF63   Flags               01 (1) 'Modification'\n-64AF64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64AF68 CENTRAL HEADER #28    02014B50 (33639248)\n-64AF6C Created Zip Spec      14 (20) '2.0'\n-64AF6D Created OS            00 (0) 'MS-DOS'\n-64AF6E Extract Zip Spec      14 (20) '2.0'\n-64AF6F Extract OS            00 (0) 'MS-DOS'\n-64AF70 General Purpose Flag  0000 (0)\n-64AF72 Compression Method    0000 (0) 'Stored'\n-64AF74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64AF78 CRC                   00000000 (0)\n-64AF7C Compressed Size       00000000 (0)\n-64AF80 Uncompressed Size     00000000 (0)\n-64AF84 Filename Length       002F (47)\n-64AF86 Extra Length          0009 (9)\n-64AF88 Comment Length        0000 (0)\n-64AF8A Disk Start            0000 (0)\n-64AF8C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64AF8E Ext File Attributes   00000000 (0)\n-64AF92 Local Header Offset   0001BE7D (114301)\n-64AF96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64AF96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64AFC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64AFC7   Length              0005 (5)\n-64AFC9   Flags               01 (1) 'Modification'\n-64AFCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64AFCE CENTRAL HEADER #29    02014B50 (33639248)\n-64AFD2 Created Zip Spec      14 (20) '2.0'\n-64AFD3 Created OS            00 (0) 'MS-DOS'\n-64AFD4 Extract Zip Spec      14 (20) '2.0'\n-64AFD5 Extract OS            00 (0) 'MS-DOS'\n-64AFD6 General Purpose Flag  0000 (0)\n-64AFD8 Compression Method    0000 (0) 'Stored'\n-64AFDA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64AFDE CRC                   00000000 (0)\n-64AFE2 Compressed Size       00000000 (0)\n-64AFE6 Uncompressed Size     00000000 (0)\n-64AFEA Filename Length       0036 (54)\n-64AFEC Extra Length          0009 (9)\n-64AFEE Comment Length        0000 (0)\n-64AFF0 Disk Start            0000 (0)\n-64AFF2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64AFF4 Ext File Attributes   00000000 (0)\n-64AFF8 Local Header Offset   0001BED3 (114387)\n-64AFFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64AFFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B032 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B034   Length              0005 (5)\n-64B036   Flags               01 (1) 'Modification'\n-64B037   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B03B CENTRAL HEADER #30    02014B50 (33639248)\n-64B03F Created Zip Spec      14 (20) '2.0'\n-64B040 Created OS            00 (0) 'MS-DOS'\n-64B041 Extract Zip Spec      14 (20) '2.0'\n-64B042 Extract OS            00 (0) 'MS-DOS'\n-64B043 General Purpose Flag  0000 (0)\n-64B045 Compression Method    0000 (0) 'Stored'\n-64B047 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B04B CRC                   00000000 (0)\n-64B04F Compressed Size       00000000 (0)\n-64B053 Uncompressed Size     00000000 (0)\n-64B057 Filename Length       0066 (102)\n-64B059 Extra Length          0009 (9)\n-64B05B Comment Length        0000 (0)\n-64B05D Disk Start            0000 (0)\n-64B05F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B061 Ext File Attributes   00000000 (0)\n-64B065 Local Header Offset   0001BF30 (114480)\n-64B069 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B069: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B0CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B0D1   Length              0005 (5)\n-64B0D3   Flags               01 (1) 'Modification'\n-64B0D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B0D8 CENTRAL HEADER #31    02014B50 (33639248)\n-64B0DC Created Zip Spec      14 (20) '2.0'\n-64B0DD Created OS            00 (0) 'MS-DOS'\n-64B0DE Extract Zip Spec      14 (20) '2.0'\n-64B0DF Extract OS            00 (0) 'MS-DOS'\n-64B0E0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64B0E2 Compression Method    0000 (0) 'Stored'\n-64B0E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B0E8 CRC                   7416DF2A (1947655978)\n-64B0EC Compressed Size       00001512 (5394)\n-64B0F0 Uncompressed Size     00001512 (5394)\n-64B0F4 Filename Length       007C (124)\n-64B0F6 Extra Length          0009 (9)\n-64B0F8 Comment Length        0000 (0)\n-64B0FA Disk Start            0000 (0)\n-64B0FC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B0FE Ext File Attributes   00000000 (0)\n-64B102 Local Header Offset   0001BFBD (114621)\n-64B106 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B106: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B182 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B184   Length              0005 (5)\n-64B186   Flags               01 (1) 'Modification'\n-64B187   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B18B CENTRAL HEADER #32    02014B50 (33639248)\n-64B18F Created Zip Spec      14 (20) '2.0'\n-64B190 Created OS            00 (0) 'MS-DOS'\n-64B191 Extract Zip Spec      14 (20) '2.0'\n-64B192 Extract OS            00 (0) 'MS-DOS'\n-64B193 General Purpose Flag  0000 (0)\n-64B195 Compression Method    0000 (0) 'Stored'\n-64B197 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B19B CRC                   00000000 (0)\n-64B19F Compressed Size       00000000 (0)\n-64B1A3 Uncompressed Size     00000000 (0)\n-64B1A7 Filename Length       0022 (34)\n-64B1A9 Extra Length          0009 (9)\n-64B1AB Comment Length        0000 (0)\n-64B1AD Disk Start            0000 (0)\n-64B1AF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B1B1 Ext File Attributes   00000000 (0)\n-64B1B5 Local Header Offset   0001D582 (120194)\n-64B1B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B1B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B1DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B1DD   Length              0005 (5)\n-64B1DF   Flags               01 (1) 'Modification'\n-64B1E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B1E4 CENTRAL HEADER #33    02014B50 (33639248)\n-64B1E8 Created Zip Spec      14 (20) '2.0'\n-64B1E9 Created OS            00 (0) 'MS-DOS'\n-64B1EA Extract Zip Spec      14 (20) '2.0'\n-64B1EB Extract OS            00 (0) 'MS-DOS'\n-64B1EC General Purpose Flag  0000 (0)\n-64B1EE Compression Method    0000 (0) 'Stored'\n-64B1F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B1F4 CRC                   00000000 (0)\n-64B1F8 Compressed Size       00000000 (0)\n-64B1FC Uncompressed Size     00000000 (0)\n-64B200 Filename Length       0029 (41)\n-64B202 Extra Length          0009 (9)\n-64B204 Comment Length        0000 (0)\n-64B206 Disk Start            0000 (0)\n-64B208 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B20A Ext File Attributes   00000000 (0)\n-64B20E Local Header Offset   0001D5CB (120267)\n-64B212 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B212: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B23B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B23D   Length              0005 (5)\n-64B23F   Flags               01 (1) 'Modification'\n-64B240   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B244 CENTRAL HEADER #34    02014B50 (33639248)\n-64B248 Created Zip Spec      14 (20) '2.0'\n-64B249 Created OS            00 (0) 'MS-DOS'\n-64B24A Extract Zip Spec      14 (20) '2.0'\n-64B24B Extract OS            00 (0) 'MS-DOS'\n-64B24C General Purpose Flag  0000 (0)\n-64B24E Compression Method    0000 (0) 'Stored'\n-64B250 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B254 CRC                   00000000 (0)\n-64B258 Compressed Size       00000000 (0)\n-64B25C Uncompressed Size     00000000 (0)\n-64B260 Filename Length       0063 (99)\n-64B262 Extra Length          0009 (9)\n-64B264 Comment Length        0000 (0)\n-64B266 Disk Start            0000 (0)\n-64B268 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B26A Ext File Attributes   00000000 (0)\n-64B26E Local Header Offset   0001D61B (120347)\n-64B272 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B272: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B2D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B2D7   Length              0005 (5)\n-64B2D9   Flags               01 (1) 'Modification'\n-64B2DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B2DE CENTRAL HEADER #35    02014B50 (33639248)\n-64B2E2 Created Zip Spec      14 (20) '2.0'\n-64B2E3 Created OS            00 (0) 'MS-DOS'\n-64B2E4 Extract Zip Spec      14 (20) '2.0'\n-64B2E5 Extract OS            00 (0) 'MS-DOS'\n-64B2E6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64B2E8 Compression Method    0000 (0) 'Stored'\n-64B2EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B2EE CRC                   826E1CC4 (2188254404)\n-64B2F2 Compressed Size       00002F90 (12176)\n-64B2F6 Uncompressed Size     00002F90 (12176)\n-64B2FA Filename Length       0079 (121)\n-64B2FC Extra Length          0009 (9)\n-64B2FE Comment Length        0000 (0)\n-64B300 Disk Start            0000 (0)\n-64B302 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B304 Ext File Attributes   00000000 (0)\n-64B308 Local Header Offset   0001D6A5 (120485)\n-64B30C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B30C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B385 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B387   Length              0005 (5)\n-64B389   Flags               01 (1) 'Modification'\n-64B38A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B38E CENTRAL HEADER #36    02014B50 (33639248)\n-64B392 Created Zip Spec      14 (20) '2.0'\n-64B393 Created OS            00 (0) 'MS-DOS'\n-64B394 Extract Zip Spec      14 (20) '2.0'\n-64B395 Extract OS            00 (0) 'MS-DOS'\n-64B396 General Purpose Flag  0000 (0)\n-64B398 Compression Method    0000 (0) 'Stored'\n-64B39A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B39E CRC                   00000000 (0)\n-64B3A2 Compressed Size       00000000 (0)\n-64B3A6 Uncompressed Size     00000000 (0)\n-64B3AA Filename Length       006C (108)\n-64B3AC Extra Length          0009 (9)\n-64B3AE Comment Length        0000 (0)\n-64B3B0 Disk Start            0000 (0)\n-64B3B2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B3B4 Ext File Attributes   00000000 (0)\n-64B3B8 Local Header Offset   000206E5 (132837)\n-64B3BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B3BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B428 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B42A   Length              0005 (5)\n-64B42C   Flags               01 (1) 'Modification'\n-64B42D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B431 CENTRAL HEADER #37    02014B50 (33639248)\n-64B435 Created Zip Spec      14 (20) '2.0'\n-64B436 Created OS            00 (0) 'MS-DOS'\n-64B437 Extract Zip Spec      14 (20) '2.0'\n-64B438 Extract OS            00 (0) 'MS-DOS'\n-64B439 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64B43B Compression Method    0000 (0) 'Stored'\n-64B43D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B441 CRC                   1BE163AC (467755948)\n-64B445 Compressed Size       00000967 (2407)\n-64B449 Uncompressed Size     00000967 (2407)\n-64B44D Filename Length       0082 (130)\n-64B44F Extra Length          0009 (9)\n-64B451 Comment Length        0000 (0)\n-64B453 Disk Start            0000 (0)\n-64B455 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B457 Ext File Attributes   00000000 (0)\n-64B45B Local Header Offset   00020778 (132984)\n-64B45F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B45F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B4E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B4E3   Length              0005 (5)\n-64B4E5   Flags               01 (1) 'Modification'\n-64B4E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B4EA CENTRAL HEADER #38    02014B50 (33639248)\n-64B4EE Created Zip Spec      14 (20) '2.0'\n-64B4EF Created OS            00 (0) 'MS-DOS'\n-64B4F0 Extract Zip Spec      14 (20) '2.0'\n-64B4F1 Extract OS            00 (0) 'MS-DOS'\n-64B4F2 General Purpose Flag  0000 (0)\n-64B4F4 Compression Method    0000 (0) 'Stored'\n-64B4F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B4FA CRC                   00000000 (0)\n-64B4FE Compressed Size       00000000 (0)\n-64B502 Uncompressed Size     00000000 (0)\n-64B506 Filename Length       0066 (102)\n-64B508 Extra Length          0009 (9)\n-64B50A Comment Length        0000 (0)\n-64B50C Disk Start            0000 (0)\n-64B50E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B510 Ext File Attributes   00000000 (0)\n-64B514 Local Header Offset   00021198 (135576)\n-64B518 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B518: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B57E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B580   Length              0005 (5)\n-64B582   Flags               01 (1) 'Modification'\n-64B583   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B587 CENTRAL HEADER #39    02014B50 (33639248)\n-64B58B Created Zip Spec      14 (20) '2.0'\n-64B58C Created OS            00 (0) 'MS-DOS'\n-64B58D Extract Zip Spec      14 (20) '2.0'\n-64B58E Extract OS            00 (0) 'MS-DOS'\n-64B58F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64B591 Compression Method    0000 (0) 'Stored'\n-64B593 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B597 CRC                   11DB1110 (299569424)\n-64B59B Compressed Size       0000080F (2063)\n-64B59F Uncompressed Size     0000080F (2063)\n-64B5A3 Filename Length       007C (124)\n-64B5A5 Extra Length          0009 (9)\n-64B5A7 Comment Length        0000 (0)\n-64B5A9 Disk Start            0000 (0)\n-64B5AB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B5AD Ext File Attributes   00000000 (0)\n-64B5B1 Local Header Offset   00021225 (135717)\n-64B5B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B5B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B631 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B633   Length              0005 (5)\n-64B635   Flags               01 (1) 'Modification'\n-64B636   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B63A CENTRAL HEADER #40    02014B50 (33639248)\n-64B63E Created Zip Spec      14 (20) '2.0'\n-64B63F Created OS            00 (0) 'MS-DOS'\n-64B640 Extract Zip Spec      14 (20) '2.0'\n-64B641 Extract OS            00 (0) 'MS-DOS'\n-64B642 General Purpose Flag  0000 (0)\n-64B644 Compression Method    0000 (0) 'Stored'\n-64B646 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B64A CRC                   00000000 (0)\n-64B64E Compressed Size       00000000 (0)\n-64B652 Uncompressed Size     00000000 (0)\n-64B656 Filename Length       0062 (98)\n-64B658 Extra Length          0009 (9)\n-64B65A Comment Length        0000 (0)\n-64B65C Disk Start            0000 (0)\n-64B65E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B660 Ext File Attributes   00000000 (0)\n-64B664 Local Header Offset   00021AE7 (137959)\n-64B668 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B668: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B6CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B6CC   Length              0005 (5)\n-64B6CE   Flags               01 (1) 'Modification'\n-64B6CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B6D3 CENTRAL HEADER #41    02014B50 (33639248)\n-64B6D7 Created Zip Spec      14 (20) '2.0'\n-64B6D8 Created OS            00 (0) 'MS-DOS'\n-64B6D9 Extract Zip Spec      14 (20) '2.0'\n-64B6DA Extract OS            00 (0) 'MS-DOS'\n-64B6DB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64B6DD Compression Method    0000 (0) 'Stored'\n-64B6DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B6E3 CRC                   30A69673 (816223859)\n-64B6E7 Compressed Size       00000C1C (3100)\n-64B6EB Uncompressed Size     00000C1C (3100)\n-64B6EF Filename Length       0078 (120)\n-64B6F1 Extra Length          0009 (9)\n-64B6F3 Comment Length        0000 (0)\n-64B6F5 Disk Start            0000 (0)\n-64B6F7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B6F9 Ext File Attributes   00000000 (0)\n-64B6FD Local Header Offset   00021B70 (138096)\n-64B701 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B701: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B779 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B77B   Length              0005 (5)\n-64B77D   Flags               01 (1) 'Modification'\n-64B77E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B782 CENTRAL HEADER #42    02014B50 (33639248)\n-64B786 Created Zip Spec      14 (20) '2.0'\n-64B787 Created OS            00 (0) 'MS-DOS'\n-64B788 Extract Zip Spec      14 (20) '2.0'\n-64B789 Extract OS            00 (0) 'MS-DOS'\n-64B78A General Purpose Flag  0000 (0)\n-64B78C Compression Method    0000 (0) 'Stored'\n-64B78E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B792 CRC                   00000000 (0)\n-64B796 Compressed Size       00000000 (0)\n-64B79A Uncompressed Size     00000000 (0)\n-64B79E Filename Length       006C (108)\n-64B7A0 Extra Length          0009 (9)\n-64B7A2 Comment Length        0000 (0)\n-64B7A4 Disk Start            0000 (0)\n-64B7A6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B7A8 Ext File Attributes   00000000 (0)\n-64B7AC Local Header Offset   0002283B (141371)\n-64B7B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B7B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B81C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B81E   Length              0005 (5)\n-64B820   Flags               01 (1) 'Modification'\n-64B821   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B825 CENTRAL HEADER #43    02014B50 (33639248)\n-64B829 Created Zip Spec      14 (20) '2.0'\n-64B82A Created OS            00 (0) 'MS-DOS'\n-64B82B Extract Zip Spec      14 (20) '2.0'\n-64B82C Extract OS            00 (0) 'MS-DOS'\n-64B82D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64B82F Compression Method    0000 (0) 'Stored'\n-64B831 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B835 CRC                   0C316B32 (204565298)\n-64B839 Compressed Size       000006D7 (1751)\n-64B83D Uncompressed Size     000006D7 (1751)\n-64B841 Filename Length       0082 (130)\n-64B843 Extra Length          0009 (9)\n-64B845 Comment Length        0000 (0)\n-64B847 Disk Start            0000 (0)\n-64B849 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B84B Ext File Attributes   00000000 (0)\n-64B84F Local Header Offset   000228CE (141518)\n-64B853 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B853: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B8D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B8D7   Length              0005 (5)\n-64B8D9   Flags               01 (1) 'Modification'\n-64B8DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B8DE CENTRAL HEADER #44    02014B50 (33639248)\n-64B8E2 Created Zip Spec      14 (20) '2.0'\n-64B8E3 Created OS            00 (0) 'MS-DOS'\n-64B8E4 Extract Zip Spec      14 (20) '2.0'\n-64B8E5 Extract OS            00 (0) 'MS-DOS'\n-64B8E6 General Purpose Flag  0000 (0)\n-64B8E8 Compression Method    0000 (0) 'Stored'\n-64B8EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B8EE CRC                   00000000 (0)\n-64B8F2 Compressed Size       00000000 (0)\n-64B8F6 Uncompressed Size     00000000 (0)\n-64B8FA Filename Length       0068 (104)\n-64B8FC Extra Length          0009 (9)\n-64B8FE Comment Length        0000 (0)\n-64B900 Disk Start            0000 (0)\n-64B902 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B904 Ext File Attributes   00000000 (0)\n-64B908 Local Header Offset   0002305E (143454)\n-64B90C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B90C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64B974 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64B976   Length              0005 (5)\n-64B978   Flags               01 (1) 'Modification'\n-64B979   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64B97D CENTRAL HEADER #45    02014B50 (33639248)\n-64B981 Created Zip Spec      14 (20) '2.0'\n-64B982 Created OS            00 (0) 'MS-DOS'\n-64B983 Extract Zip Spec      14 (20) '2.0'\n-64B984 Extract OS            00 (0) 'MS-DOS'\n-64B985 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64B987 Compression Method    0000 (0) 'Stored'\n-64B989 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64B98D CRC                   37BEEC96 (935259286)\n-64B991 Compressed Size       0000133B (4923)\n-64B995 Uncompressed Size     0000133B (4923)\n-64B999 Filename Length       007E (126)\n-64B99B Extra Length          0009 (9)\n-64B99D Comment Length        0000 (0)\n-64B99F Disk Start            0000 (0)\n-64B9A1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64B9A3 Ext File Attributes   00000000 (0)\n-64B9A7 Local Header Offset   000230ED (143597)\n-64B9AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64B9AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64BA29 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64BA2B   Length              0005 (5)\n-64BA2D   Flags               01 (1) 'Modification'\n-64BA2E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64BA32 CENTRAL HEADER #46    02014B50 (33639248)\n-64BA36 Created Zip Spec      14 (20) '2.0'\n-64BA37 Created OS            00 (0) 'MS-DOS'\n-64BA38 Extract Zip Spec      14 (20) '2.0'\n-64BA39 Extract OS            00 (0) 'MS-DOS'\n-64BA3A General Purpose Flag  0000 (0)\n-64BA3C Compression Method    0000 (0) 'Stored'\n-64BA3E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64BA42 CRC                   00000000 (0)\n-64BA46 Compressed Size       00000000 (0)\n-64BA4A Uncompressed Size     00000000 (0)\n-64BA4E Filename Length       0070 (112)\n-64BA50 Extra Length          0009 (9)\n-64BA52 Comment Length        0000 (0)\n-64BA54 Disk Start            0000 (0)\n-64BA56 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64BA58 Ext File Attributes   00000000 (0)\n-64BA5C Local Header Offset   000244DD (148701)\n-64BA60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64BA60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64BAD0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64BAD2   Length              0005 (5)\n-64BAD4   Flags               01 (1) 'Modification'\n-64BAD5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64BAD9 CENTRAL HEADER #47    02014B50 (33639248)\n-64BADD Created Zip Spec      14 (20) '2.0'\n-64BADE Created OS            00 (0) 'MS-DOS'\n-64BADF Extract Zip Spec      14 (20) '2.0'\n-64BAE0 Extract OS            00 (0) 'MS-DOS'\n-64BAE1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64BAE3 Compression Method    0000 (0) 'Stored'\n-64BAE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64BAE9 CRC                   D0AE7BE4 (3501095908)\n-64BAED Compressed Size       0000074C (1868)\n-64BAF1 Uncompressed Size     0000074C (1868)\n-64BAF5 Filename Length       0086 (134)\n-64BAF7 Extra Length          0009 (9)\n-64BAF9 Comment Length        0000 (0)\n-64BAFB Disk Start            0000 (0)\n-64BAFD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64BAFF Ext File Attributes   00000000 (0)\n-64BB03 Local Header Offset   00024574 (148852)\n-64BB07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1383BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1383C0   Length              0005 (5)\n+1383C2   Flags               01 (1) 'Modification'\n+1383C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1383C7 PAYLOAD\n+\n+1393FD DATA DESCRIPTOR       08074B50 (134695760)\n+139401 CRC                   CC28EBBC (3425233852)\n+139405 Compressed Size       00001036 (4150)\n+139409 Uncompressed Size     00001036 (4150)\n+\n+13940D LOCAL HEADER #466     04034B50 (67324752)\n+139411 Extract Zip Spec      14 (20) '2.0'\n+139412 Extract OS            00 (0) 'MS-DOS'\n+139413 General Purpose Flag  0000 (0)\n+139415 Compression Method    0000 (0) 'Stored'\n+139417 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13941B CRC                   00000000 (0)\n+13941F Compressed Size       00000000 (0)\n+139423 Uncompressed Size     00000000 (0)\n+139427 Filename Length       0031 (49)\n+139429 Extra Length          0009 (9)\n+13942B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13942B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13945C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13945E   Length              0005 (5)\n+139460   Flags               01 (1) 'Modification'\n+139461   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+139465 LOCAL HEADER #467     04034B50 (67324752)\n+139469 Extract Zip Spec      14 (20) '2.0'\n+13946A Extract OS            00 (0) 'MS-DOS'\n+13946B General Purpose Flag  0000 (0)\n+13946D Compression Method    0000 (0) 'Stored'\n+13946F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+139473 CRC                   00000000 (0)\n+139477 Compressed Size       00000000 (0)\n+13947B Uncompressed Size     00000000 (0)\n+13947F Filename Length       0038 (56)\n+139481 Extra Length          0009 (9)\n+139483 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x139483: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1394BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1394BD   Length              0005 (5)\n+1394BF   Flags               01 (1) 'Modification'\n+1394C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1394C4 LOCAL HEADER #468     04034B50 (67324752)\n+1394C8 Extract Zip Spec      14 (20) '2.0'\n+1394C9 Extract OS            00 (0) 'MS-DOS'\n+1394CA General Purpose Flag  0000 (0)\n+1394CC Compression Method    0000 (0) 'Stored'\n+1394CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1394D2 CRC                   00000000 (0)\n+1394D6 Compressed Size       00000000 (0)\n+1394DA Uncompressed Size     00000000 (0)\n+1394DE Filename Length       006C (108)\n+1394E0 Extra Length          0009 (9)\n+1394E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1394E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13954E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+139550   Length              0005 (5)\n+139552   Flags               01 (1) 'Modification'\n+139553   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+139557 LOCAL HEADER #469     04034B50 (67324752)\n+13955B Extract Zip Spec      14 (20) '2.0'\n+13955C Extract OS            00 (0) 'MS-DOS'\n+13955D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+13955F Compression Method    0000 (0) 'Stored'\n+139561 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+139565 CRC                   00000000 (0)\n+139569 Compressed Size       00000000 (0)\n+13956D Uncompressed Size     00000000 (0)\n+139571 Filename Length       0082 (130)\n+139573 Extra Length          0009 (9)\n+139575 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x139575: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1395F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1395F9   Length              0005 (5)\n+1395FB   Flags               01 (1) 'Modification'\n+1395FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+139600 PAYLOAD\n+\n+13A0D4 DATA DESCRIPTOR       08074B50 (134695760)\n+13A0D8 CRC                   3FC95820 (1070159904)\n+13A0DC Compressed Size       00000AD4 (2772)\n+13A0E0 Uncompressed Size     00000AD4 (2772)\n+\n+13A0E4 LOCAL HEADER #470     04034B50 (67324752)\n+13A0E8 Extract Zip Spec      14 (20) '2.0'\n+13A0E9 Extract OS            00 (0) 'MS-DOS'\n+13A0EA General Purpose Flag  0000 (0)\n+13A0EC Compression Method    0000 (0) 'Stored'\n+13A0EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13A0F2 CRC                   00000000 (0)\n+13A0F6 Compressed Size       00000000 (0)\n+13A0FA Uncompressed Size     00000000 (0)\n+13A0FE Filename Length       0026 (38)\n+13A100 Extra Length          0009 (9)\n+13A102 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13A102: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13A128 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13A12A   Length              0005 (5)\n+13A12C   Flags               01 (1) 'Modification'\n+13A12D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13A131 LOCAL HEADER #471     04034B50 (67324752)\n+13A135 Extract Zip Spec      14 (20) '2.0'\n+13A136 Extract OS            00 (0) 'MS-DOS'\n+13A137 General Purpose Flag  0000 (0)\n+13A139 Compression Method    0000 (0) 'Stored'\n+13A13B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13A13F CRC                   00000000 (0)\n+13A143 Compressed Size       00000000 (0)\n+13A147 Uncompressed Size     00000000 (0)\n+13A14B Filename Length       002D (45)\n+13A14D Extra Length          0009 (9)\n+13A14F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13A14F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13A17C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13A17E   Length              0005 (5)\n+13A180   Flags               01 (1) 'Modification'\n+13A181   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13A185 LOCAL HEADER #472     04034B50 (67324752)\n+13A189 Extract Zip Spec      14 (20) '2.0'\n+13A18A Extract OS            00 (0) 'MS-DOS'\n+13A18B General Purpose Flag  0000 (0)\n+13A18D Compression Method    0000 (0) 'Stored'\n+13A18F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13A193 CRC                   00000000 (0)\n+13A197 Compressed Size       00000000 (0)\n+13A19B Uncompressed Size     00000000 (0)\n+13A19F Filename Length       005B (91)\n+13A1A1 Extra Length          0009 (9)\n+13A1A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13A1A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13A1FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13A200   Length              0005 (5)\n+13A202   Flags               01 (1) 'Modification'\n+13A203   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13A207 LOCAL HEADER #473     04034B50 (67324752)\n+13A20B Extract Zip Spec      14 (20) '2.0'\n+13A20C Extract OS            00 (0) 'MS-DOS'\n+13A20D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+13A20F Compression Method    0000 (0) 'Stored'\n+13A211 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13A215 CRC                   00000000 (0)\n+13A219 Compressed Size       00000000 (0)\n+13A21D Uncompressed Size     00000000 (0)\n+13A221 Filename Length       0071 (113)\n+13A223 Extra Length          0009 (9)\n+13A225 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13A225: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13A296 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13A298   Length              0005 (5)\n+13A29A   Flags               01 (1) 'Modification'\n+13A29B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+13A29F PAYLOAD\n+\n+13AFCE DATA DESCRIPTOR       08074B50 (134695760)\n+13AFD2 CRC                   41CBDE11 (1103879697)\n+13AFD6 Compressed Size       00000D2F (3375)\n+13AFDA Uncompressed Size     00000D2F (3375)\n+\n+13AFDE LOCAL HEADER #474     04034B50 (67324752)\n+13AFE2 Extract Zip Spec      14 (20) '2.0'\n+13AFE3 Extract OS            00 (0) 'MS-DOS'\n+13AFE4 General Purpose Flag  0000 (0)\n+13AFE6 Compression Method    0000 (0) 'Stored'\n+13AFE8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13AFEC CRC                   00000000 (0)\n+13AFF0 Compressed Size       00000000 (0)\n+13AFF4 Uncompressed Size     00000000 (0)\n+13AFF8 Filename Length       0061 (97)\n+13AFFA Extra Length          0009 (9)\n+13AFFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13AFFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13B05D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13B05F   Length              0005 (5)\n+13B061   Flags               01 (1) 'Modification'\n+13B062   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13B066 LOCAL HEADER #475     04034B50 (67324752)\n+13B06A Extract Zip Spec      14 (20) '2.0'\n+13B06B Extract OS            00 (0) 'MS-DOS'\n+13B06C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+13B06E Compression Method    0000 (0) 'Stored'\n+13B070 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13B074 CRC                   00000000 (0)\n+13B078 Compressed Size       00000000 (0)\n+13B07C Uncompressed Size     00000000 (0)\n+13B080 Filename Length       0077 (119)\n+13B082 Extra Length          0009 (9)\n+13B084 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13B084: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13B0FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13B0FD   Length              0005 (5)\n+13B0FF   Flags               01 (1) 'Modification'\n+13B100   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+13B104 PAYLOAD\n+\n+13CD7D DATA DESCRIPTOR       08074B50 (134695760)\n+13CD81 CRC                   1D768ED5 (494309077)\n+13CD85 Compressed Size       00001C79 (7289)\n+13CD89 Uncompressed Size     00001C79 (7289)\n+\n+13CD8D LOCAL HEADER #476     04034B50 (67324752)\n+13CD91 Extract Zip Spec      14 (20) '2.0'\n+13CD92 Extract OS            00 (0) 'MS-DOS'\n+13CD93 General Purpose Flag  0000 (0)\n+13CD95 Compression Method    0000 (0) 'Stored'\n+13CD97 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13CD9B CRC                   00000000 (0)\n+13CD9F Compressed Size       00000000 (0)\n+13CDA3 Uncompressed Size     00000000 (0)\n+13CDA7 Filename Length       002F (47)\n+13CDA9 Extra Length          0009 (9)\n+13CDAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13CDAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13CDDA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13CDDC   Length              0005 (5)\n+13CDDE   Flags               01 (1) 'Modification'\n+13CDDF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13CDE3 LOCAL HEADER #477     04034B50 (67324752)\n+13CDE7 Extract Zip Spec      14 (20) '2.0'\n+13CDE8 Extract OS            00 (0) 'MS-DOS'\n+13CDE9 General Purpose Flag  0000 (0)\n+13CDEB Compression Method    0000 (0) 'Stored'\n+13CDED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13CDF1 CRC                   00000000 (0)\n+13CDF5 Compressed Size       00000000 (0)\n+13CDF9 Uncompressed Size     00000000 (0)\n+13CDFD Filename Length       0036 (54)\n+13CDFF Extra Length          0009 (9)\n+13CE01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13CE01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13CE37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13CE39   Length              0005 (5)\n+13CE3B   Flags               01 (1) 'Modification'\n+13CE3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13CE40 LOCAL HEADER #478     04034B50 (67324752)\n+13CE44 Extract Zip Spec      14 (20) '2.0'\n+13CE45 Extract OS            00 (0) 'MS-DOS'\n+13CE46 General Purpose Flag  0000 (0)\n+13CE48 Compression Method    0000 (0) 'Stored'\n+13CE4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13CE4E CRC                   00000000 (0)\n+13CE52 Compressed Size       00000000 (0)\n+13CE56 Uncompressed Size     00000000 (0)\n+13CE5A Filename Length       0069 (105)\n+13CE5C Extra Length          0009 (9)\n+13CE5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13CE5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13CEC7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13CEC9   Length              0005 (5)\n+13CECB   Flags               01 (1) 'Modification'\n+13CECC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13CED0 LOCAL HEADER #479     04034B50 (67324752)\n+13CED4 Extract Zip Spec      14 (20) '2.0'\n+13CED5 Extract OS            00 (0) 'MS-DOS'\n+13CED6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+13CED8 Compression Method    0000 (0) 'Stored'\n+13CEDA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13CEDE CRC                   00000000 (0)\n+13CEE2 Compressed Size       00000000 (0)\n+13CEE6 Uncompressed Size     00000000 (0)\n+13CEEA Filename Length       007F (127)\n+13CEEC Extra Length          0009 (9)\n+13CEEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13CEEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13CF6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13CF6F   Length              0005 (5)\n+13CF71   Flags               01 (1) 'Modification'\n+13CF72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+13CF76 PAYLOAD\n+\n+13EC8F DATA DESCRIPTOR       08074B50 (134695760)\n+13EC93 CRC                   7A85C658 (2055587416)\n+13EC97 Compressed Size       00001D19 (7449)\n+13EC9B Uncompressed Size     00001D19 (7449)\n+\n+13EC9F LOCAL HEADER #480     04034B50 (67324752)\n+13ECA3 Extract Zip Spec      14 (20) '2.0'\n+13ECA4 Extract OS            00 (0) 'MS-DOS'\n+13ECA5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+13ECA7 Compression Method    0000 (0) 'Stored'\n+13ECA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13ECAD CRC                   00000000 (0)\n+13ECB1 Compressed Size       00000000 (0)\n+13ECB5 Uncompressed Size     00000000 (0)\n+13ECB9 Filename Length       001A (26)\n+13ECBB Extra Length          0009 (9)\n+13ECBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13ECBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13ECD7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13ECD9   Length              0005 (5)\n+13ECDB   Flags               01 (1) 'Modification'\n+13ECDC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+13ECE0 PAYLOAD\n+\n+64E024 DATA DESCRIPTOR       08074B50 (134695760)\n+64E028 CRC                   788D733C (2022535996)\n+64E02C Compressed Size       0050F344 (5305156)\n+64E030 Uncompressed Size     0050F344 (5305156)\n+\n+64E034 CENTRAL HEADER #1     02014B50 (33639248)\n+64E038 Created Zip Spec      14 (20) '2.0'\n+64E039 Created OS            00 (0) 'MS-DOS'\n+64E03A Extract Zip Spec      14 (20) '2.0'\n+64E03B Extract OS            00 (0) 'MS-DOS'\n+64E03C General Purpose Flag  0000 (0)\n+64E03E Compression Method    0000 (0) 'Stored'\n+64E040 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E044 CRC                   00000000 (0)\n+64E048 Compressed Size       00000000 (0)\n+64E04C Uncompressed Size     00000000 (0)\n+64E050 Filename Length       0009 (9)\n+64E052 Extra Length          0009 (9)\n+64E054 Comment Length        0000 (0)\n+64E056 Disk Start            0000 (0)\n+64E058 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E05A Ext File Attributes   00000000 (0)\n+64E05E Local Header Offset   00000000 (0)\n+64E062 Filename              'XXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E062: Filename 'XXXXXXXXX'\n+#          Zero length filename\n+#\n+64E06B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E06D   Length              0005 (5)\n+64E06F   Flags               01 (1) 'Modification'\n+64E070   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E074 CENTRAL HEADER #2     02014B50 (33639248)\n+64E078 Created Zip Spec      14 (20) '2.0'\n+64E079 Created OS            00 (0) 'MS-DOS'\n+64E07A Extract Zip Spec      14 (20) '2.0'\n+64E07B Extract OS            00 (0) 'MS-DOS'\n+64E07C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64E07E Compression Method    0000 (0) 'Stored'\n+64E080 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E084 CRC                   CCFF255F (3439273311)\n+64E088 Compressed Size       0001647E (91262)\n+64E08C Uncompressed Size     0001647E (91262)\n+64E090 Filename Length       0015 (21)\n+64E092 Extra Length          0009 (9)\n+64E094 Comment Length        0000 (0)\n+64E096 Disk Start            0000 (0)\n+64E098 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E09A Ext File Attributes   00000000 (0)\n+64E09E Local Header Offset   00000030 (48)\n+64E0A2 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E0A2: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E0B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E0B9   Length              0005 (5)\n+64E0BB   Flags               01 (1) 'Modification'\n+64E0BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E0C0 CENTRAL HEADER #3     02014B50 (33639248)\n+64E0C4 Created Zip Spec      14 (20) '2.0'\n+64E0C5 Created OS            00 (0) 'MS-DOS'\n+64E0C6 Extract Zip Spec      14 (20) '2.0'\n+64E0C7 Extract OS            00 (0) 'MS-DOS'\n+64E0C8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64E0CA Compression Method    0000 (0) 'Stored'\n+64E0CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E0D0 CRC                   86E2B4B4 (2263004340)\n+64E0D4 Compressed Size       00002C5E (11358)\n+64E0D8 Uncompressed Size     00002C5E (11358)\n+64E0DC Filename Length       0010 (16)\n+64E0DE Extra Length          0009 (9)\n+64E0E0 Comment Length        0000 (0)\n+64E0E2 Disk Start            0000 (0)\n+64E0E4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E0E6 Ext File Attributes   00000000 (0)\n+64E0EA Local Header Offset   000164FA (91386)\n+64E0EE Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E0EE: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E0FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E100   Length              0005 (5)\n+64E102   Flags               01 (1) 'Modification'\n+64E103   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E107 CENTRAL HEADER #4     02014B50 (33639248)\n+64E10B Created Zip Spec      14 (20) '2.0'\n+64E10C Created OS            00 (0) 'MS-DOS'\n+64E10D Extract Zip Spec      14 (20) '2.0'\n+64E10E Extract OS            00 (0) 'MS-DOS'\n+64E10F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64E111 Compression Method    0000 (0) 'Stored'\n+64E113 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E117 CRC                   05EA707D (99250301)\n+64E11B Compressed Size       00000106 (262)\n+64E11F Uncompressed Size     00000106 (262)\n+64E123 Filename Length       0014 (20)\n+64E125 Extra Length          0009 (9)\n+64E127 Comment Length        0000 (0)\n+64E129 Disk Start            0000 (0)\n+64E12B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E12D Ext File Attributes   00000000 (0)\n+64E131 Local Header Offset   0001919F (102815)\n+64E135 Filename              'XXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E135: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E149 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E14B   Length              0005 (5)\n+64E14D   Flags               01 (1) 'Modification'\n+64E14E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E152 CENTRAL HEADER #5     02014B50 (33639248)\n+64E156 Created Zip Spec      14 (20) '2.0'\n+64E157 Created OS            00 (0) 'MS-DOS'\n+64E158 Extract Zip Spec      14 (20) '2.0'\n+64E159 Extract OS            00 (0) 'MS-DOS'\n+64E15A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64E15C Compression Method    0000 (0) 'Stored'\n+64E15E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E162 CRC                   91A82808 (2443716616)\n+64E166 Compressed Size       000000A0 (160)\n+64E16A Uncompressed Size     000000A0 (160)\n+64E16E Filename Length       000F (15)\n+64E170 Extra Length          0009 (9)\n+64E172 Comment Length        0000 (0)\n+64E174 Disk Start            0000 (0)\n+64E176 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E178 Ext File Attributes   00000000 (0)\n+64E17C Local Header Offset   000192F0 (103152)\n+64E180 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E180: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E18F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E191   Length              0005 (5)\n+64E193   Flags               01 (1) 'Modification'\n+64E194   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E198 CENTRAL HEADER #6     02014B50 (33639248)\n+64E19C Created Zip Spec      14 (20) '2.0'\n+64E19D Created OS            00 (0) 'MS-DOS'\n+64E19E Extract Zip Spec      14 (20) '2.0'\n+64E19F Extract OS            00 (0) 'MS-DOS'\n+64E1A0 General Purpose Flag  0000 (0)\n+64E1A2 Compression Method    0000 (0) 'Stored'\n+64E1A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E1A8 CRC                   00000000 (0)\n+64E1AC Compressed Size       00000000 (0)\n+64E1B0 Uncompressed Size     00000000 (0)\n+64E1B4 Filename Length       000F (15)\n+64E1B6 Extra Length          0009 (9)\n+64E1B8 Comment Length        0000 (0)\n+64E1BA Disk Start            0000 (0)\n+64E1BC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E1BE Ext File Attributes   00000000 (0)\n+64E1C2 Local Header Offset   000193D6 (103382)\n+64E1C6 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E1C6: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E1D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E1D7   Length              0005 (5)\n+64E1D9   Flags               01 (1) 'Modification'\n+64E1DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E1DE CENTRAL HEADER #7     02014B50 (33639248)\n+64E1E2 Created Zip Spec      14 (20) '2.0'\n+64E1E3 Created OS            00 (0) 'MS-DOS'\n+64E1E4 Extract Zip Spec      14 (20) '2.0'\n+64E1E5 Extract OS            00 (0) 'MS-DOS'\n+64E1E6 General Purpose Flag  0000 (0)\n+64E1E8 Compression Method    0000 (0) 'Stored'\n+64E1EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E1EE CRC                   00000000 (0)\n+64E1F2 Compressed Size       00000000 (0)\n+64E1F6 Uncompressed Size     00000000 (0)\n+64E1FA Filename Length       001F (31)\n+64E1FC Extra Length          0009 (9)\n+64E1FE Comment Length        0000 (0)\n+64E200 Disk Start            0000 (0)\n+64E202 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E204 Ext File Attributes   00000000 (0)\n+64E208 Local Header Offset   0001940C (103436)\n+64E20C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E20C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E22B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E22D   Length              0005 (5)\n+64E22F   Flags               01 (1) 'Modification'\n+64E230   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E234 CENTRAL HEADER #8     02014B50 (33639248)\n+64E238 Created Zip Spec      14 (20) '2.0'\n+64E239 Created OS            00 (0) 'MS-DOS'\n+64E23A Extract Zip Spec      14 (20) '2.0'\n+64E23B Extract OS            00 (0) 'MS-DOS'\n+64E23C General Purpose Flag  0000 (0)\n+64E23E Compression Method    0000 (0) 'Stored'\n+64E240 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E244 CRC                   00000000 (0)\n+64E248 Compressed Size       00000000 (0)\n+64E24C Uncompressed Size     00000000 (0)\n+64E250 Filename Length       0035 (53)\n+64E252 Extra Length          0009 (9)\n+64E254 Comment Length        0000 (0)\n+64E256 Disk Start            0000 (0)\n+64E258 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E25A Ext File Attributes   00000000 (0)\n+64E25E Local Header Offset   00019452 (103506)\n+64E262 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E262: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E297 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E299   Length              0005 (5)\n+64E29B   Flags               01 (1) 'Modification'\n+64E29C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E2A0 CENTRAL HEADER #9     02014B50 (33639248)\n+64E2A4 Created Zip Spec      14 (20) '2.0'\n+64E2A5 Created OS            00 (0) 'MS-DOS'\n+64E2A6 Extract Zip Spec      14 (20) '2.0'\n+64E2A7 Extract OS            00 (0) 'MS-DOS'\n+64E2A8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64E2AA Compression Method    0000 (0) 'Stored'\n+64E2AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E2B0 CRC                   00000000 (0)\n+64E2B4 Compressed Size       00000000 (0)\n+64E2B8 Uncompressed Size     00000000 (0)\n+64E2BC Filename Length       0043 (67)\n+64E2BE Extra Length          0009 (9)\n+64E2C0 Comment Length        0000 (0)\n+64E2C2 Disk Start            0000 (0)\n+64E2C4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E2C6 Ext File Attributes   00000000 (0)\n+64E2CA Local Header Offset   000194AE (103598)\n+64E2CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E2CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E311 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E313   Length              0005 (5)\n+64E315   Flags               01 (1) 'Modification'\n+64E316   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E31A CENTRAL HEADER #10    02014B50 (33639248)\n+64E31E Created Zip Spec      14 (20) '2.0'\n+64E31F Created OS            00 (0) 'MS-DOS'\n+64E320 Extract Zip Spec      14 (20) '2.0'\n+64E321 Extract OS            00 (0) 'MS-DOS'\n+64E322 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64E324 Compression Method    0000 (0) 'Stored'\n+64E326 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E32A CRC                   71BCF1C4 (1908208068)\n+64E32E Compressed Size       00001C37 (7223)\n+64E332 Uncompressed Size     00001C37 (7223)\n+64E336 Filename Length       003C (60)\n+64E338 Extra Length          0009 (9)\n+64E33A Comment Length        0000 (0)\n+64E33C Disk Start            0000 (0)\n+64E33E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E340 Ext File Attributes   00000000 (0)\n+64E344 Local Header Offset   00019528 (103720)\n+64E348 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E348: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E384 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E386   Length              0005 (5)\n+64E388   Flags               01 (1) 'Modification'\n+64E389   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E38D CENTRAL HEADER #11    02014B50 (33639248)\n+64E391 Created Zip Spec      14 (20) '2.0'\n+64E392 Created OS            00 (0) 'MS-DOS'\n+64E393 Extract Zip Spec      14 (20) '2.0'\n+64E394 Extract OS            00 (0) 'MS-DOS'\n+64E395 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64E397 Compression Method    0000 (0) 'Stored'\n+64E399 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E39D CRC                   ADF1FCE9 (2918317289)\n+64E3A1 Compressed Size       000004AF (1199)\n+64E3A5 Uncompressed Size     000004AF (1199)\n+64E3A9 Filename Length       0010 (16)\n+64E3AB Extra Length          0009 (9)\n+64E3AD Comment Length        0000 (0)\n+64E3AF Disk Start            0000 (0)\n+64E3B1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E3B3 Ext File Attributes   00000000 (0)\n+64E3B7 Local Header Offset   0001B1D2 (111058)\n+64E3BB Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E3BB: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E3CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E3CD   Length              0005 (5)\n+64E3CF   Flags               01 (1) 'Modification'\n+64E3D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E3D4 CENTRAL HEADER #12    02014B50 (33639248)\n+64E3D8 Created Zip Spec      14 (20) '2.0'\n+64E3D9 Created OS            00 (0) 'MS-DOS'\n+64E3DA Extract Zip Spec      14 (20) '2.0'\n+64E3DB Extract OS            00 (0) 'MS-DOS'\n+64E3DC General Purpose Flag  0000 (0)\n+64E3DE Compression Method    0000 (0) 'Stored'\n+64E3E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E3E4 CRC                   00000000 (0)\n+64E3E8 Compressed Size       00000000 (0)\n+64E3EC Uncompressed Size     00000000 (0)\n+64E3F0 Filename Length       0005 (5)\n+64E3F2 Extra Length          0009 (9)\n+64E3F4 Comment Length        0000 (0)\n+64E3F6 Disk Start            0000 (0)\n+64E3F8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E3FA Ext File Attributes   00000000 (0)\n+64E3FE Local Header Offset   0001B6C8 (112328)\n+64E402 Filename              'XXXXX'\n+#\n+# WARNING: Offset 0x64E402: Filename 'XXXXX'\n+#          Zero length filename\n+#\n+64E407 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E409   Length              0005 (5)\n+64E40B   Flags               01 (1) 'Modification'\n+64E40C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E410 CENTRAL HEADER #13    02014B50 (33639248)\n+64E414 Created Zip Spec      14 (20) '2.0'\n+64E415 Created OS            00 (0) 'MS-DOS'\n+64E416 Extract Zip Spec      14 (20) '2.0'\n+64E417 Extract OS            00 (0) 'MS-DOS'\n+64E418 General Purpose Flag  0000 (0)\n+64E41A Compression Method    0000 (0) 'Stored'\n+64E41C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E420 CRC                   00000000 (0)\n+64E424 Compressed Size       00000000 (0)\n+64E428 Uncompressed Size     00000000 (0)\n+64E42C Filename Length       0015 (21)\n+64E42E Extra Length          0009 (9)\n+64E430 Comment Length        0000 (0)\n+64E432 Disk Start            0000 (0)\n+64E434 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E436 Ext File Attributes   00000000 (0)\n+64E43A Local Header Offset   0001B6F4 (112372)\n+64E43E Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E43E: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E453 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E455   Length              0005 (5)\n+64E457   Flags               01 (1) 'Modification'\n+64E458   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E45C CENTRAL HEADER #14    02014B50 (33639248)\n+64E460 Created Zip Spec      14 (20) '2.0'\n+64E461 Created OS            00 (0) 'MS-DOS'\n+64E462 Extract Zip Spec      14 (20) '2.0'\n+64E463 Extract OS            00 (0) 'MS-DOS'\n+64E464 General Purpose Flag  0000 (0)\n+64E466 Compression Method    0000 (0) 'Stored'\n+64E468 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E46C CRC                   00000000 (0)\n+64E470 Compressed Size       00000000 (0)\n+64E474 Uncompressed Size     00000000 (0)\n+64E478 Filename Length       0027 (39)\n+64E47A Extra Length          0009 (9)\n+64E47C Comment Length        0000 (0)\n+64E47E Disk Start            0000 (0)\n+64E480 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E482 Ext File Attributes   00000000 (0)\n+64E486 Local Header Offset   0001B730 (112432)\n+64E48A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E48A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E4B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E4B3   Length              0005 (5)\n+64E4B5   Flags               01 (1) 'Modification'\n+64E4B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E4BA CENTRAL HEADER #15    02014B50 (33639248)\n+64E4BE Created Zip Spec      14 (20) '2.0'\n+64E4BF Created OS            00 (0) 'MS-DOS'\n+64E4C0 Extract Zip Spec      14 (20) '2.0'\n+64E4C1 Extract OS            00 (0) 'MS-DOS'\n+64E4C2 General Purpose Flag  0000 (0)\n+64E4C4 Compression Method    0000 (0) 'Stored'\n+64E4C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E4CA CRC                   00000000 (0)\n+64E4CE Compressed Size       00000000 (0)\n+64E4D2 Uncompressed Size     00000000 (0)\n+64E4D6 Filename Length       002E (46)\n+64E4D8 Extra Length          0009 (9)\n+64E4DA Comment Length        0000 (0)\n+64E4DC Disk Start            0000 (0)\n+64E4DE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E4E0 Ext File Attributes   00000000 (0)\n+64E4E4 Local Header Offset   0001B77E (112510)\n+64E4E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E4E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E516 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E518   Length              0005 (5)\n+64E51A   Flags               01 (1) 'Modification'\n+64E51B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E51F CENTRAL HEADER #16    02014B50 (33639248)\n+64E523 Created Zip Spec      14 (20) '2.0'\n+64E524 Created OS            00 (0) 'MS-DOS'\n+64E525 Extract Zip Spec      14 (20) '2.0'\n+64E526 Extract OS            00 (0) 'MS-DOS'\n+64E527 General Purpose Flag  0000 (0)\n+64E529 Compression Method    0000 (0) 'Stored'\n+64E52B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E52F CRC                   00000000 (0)\n+64E533 Compressed Size       00000000 (0)\n+64E537 Uncompressed Size     00000000 (0)\n+64E53B Filename Length       0065 (101)\n+64E53D Extra Length          0009 (9)\n+64E53F Comment Length        0000 (0)\n+64E541 Disk Start            0000 (0)\n+64E543 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E545 Ext File Attributes   00000000 (0)\n+64E549 Local Header Offset   0001B7D3 (112595)\n+64E54D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E54D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E5B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E5B4   Length              0005 (5)\n+64E5B6   Flags               01 (1) 'Modification'\n+64E5B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E5BB CENTRAL HEADER #17    02014B50 (33639248)\n+64E5BF Created Zip Spec      14 (20) '2.0'\n+64E5C0 Created OS            00 (0) 'MS-DOS'\n+64E5C1 Extract Zip Spec      14 (20) '2.0'\n+64E5C2 Extract OS            00 (0) 'MS-DOS'\n+64E5C3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64E5C5 Compression Method    0000 (0) 'Stored'\n+64E5C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E5CB CRC                   9CB4EC6B (2629102699)\n+64E5CF Compressed Size       00000AA2 (2722)\n+64E5D3 Uncompressed Size     00000AA2 (2722)\n+64E5D7 Filename Length       007B (123)\n+64E5D9 Extra Length          0009 (9)\n+64E5DB Comment Length        0000 (0)\n+64E5DD Disk Start            0000 (0)\n+64E5DF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E5E1 Ext File Attributes   00000000 (0)\n+64E5E5 Local Header Offset   0001B85F (112735)\n+64E5E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E5E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E664 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E666   Length              0005 (5)\n+64E668   Flags               01 (1) 'Modification'\n+64E669   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E66D CENTRAL HEADER #18    02014B50 (33639248)\n+64E671 Created Zip Spec      14 (20) '2.0'\n+64E672 Created OS            00 (0) 'MS-DOS'\n+64E673 Extract Zip Spec      14 (20) '2.0'\n+64E674 Extract OS            00 (0) 'MS-DOS'\n+64E675 General Purpose Flag  0000 (0)\n+64E677 Compression Method    0000 (0) 'Stored'\n+64E679 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E67D CRC                   00000000 (0)\n+64E681 Compressed Size       00000000 (0)\n+64E685 Uncompressed Size     00000000 (0)\n+64E689 Filename Length       0025 (37)\n+64E68B Extra Length          0009 (9)\n+64E68D Comment Length        0000 (0)\n+64E68F Disk Start            0000 (0)\n+64E691 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E693 Ext File Attributes   00000000 (0)\n+64E697 Local Header Offset   0001C3B3 (115635)\n+64E69B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E69B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E6C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E6C2   Length              0005 (5)\n+64E6C4   Flags               01 (1) 'Modification'\n+64E6C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E6C9 CENTRAL HEADER #19    02014B50 (33639248)\n+64E6CD Created Zip Spec      14 (20) '2.0'\n+64E6CE Created OS            00 (0) 'MS-DOS'\n+64E6CF Extract Zip Spec      14 (20) '2.0'\n+64E6D0 Extract OS            00 (0) 'MS-DOS'\n+64E6D1 General Purpose Flag  0000 (0)\n+64E6D3 Compression Method    0000 (0) 'Stored'\n+64E6D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E6D9 CRC                   00000000 (0)\n+64E6DD Compressed Size       00000000 (0)\n+64E6E1 Uncompressed Size     00000000 (0)\n+64E6E5 Filename Length       002C (44)\n+64E6E7 Extra Length          0009 (9)\n+64E6E9 Comment Length        0000 (0)\n+64E6EB Disk Start            0000 (0)\n+64E6ED Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E6EF Ext File Attributes   00000000 (0)\n+64E6F3 Local Header Offset   0001C3FF (115711)\n+64E6F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E6F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E723 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E725   Length              0005 (5)\n+64E727   Flags               01 (1) 'Modification'\n+64E728   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E72C CENTRAL HEADER #20    02014B50 (33639248)\n+64E730 Created Zip Spec      14 (20) '2.0'\n+64E731 Created OS            00 (0) 'MS-DOS'\n+64E732 Extract Zip Spec      14 (20) '2.0'\n+64E733 Extract OS            00 (0) 'MS-DOS'\n+64E734 General Purpose Flag  0000 (0)\n+64E736 Compression Method    0000 (0) 'Stored'\n+64E738 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E73C CRC                   00000000 (0)\n+64E740 Compressed Size       00000000 (0)\n+64E744 Uncompressed Size     00000000 (0)\n+64E748 Filename Length       0061 (97)\n+64E74A Extra Length          0009 (9)\n+64E74C Comment Length        0000 (0)\n+64E74E Disk Start            0000 (0)\n+64E750 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E752 Ext File Attributes   00000000 (0)\n+64E756 Local Header Offset   0001C452 (115794)\n+64E75A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E75A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E7BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E7BD   Length              0005 (5)\n+64E7BF   Flags               01 (1) 'Modification'\n+64E7C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E7C4 CENTRAL HEADER #21    02014B50 (33639248)\n+64E7C8 Created Zip Spec      14 (20) '2.0'\n+64E7C9 Created OS            00 (0) 'MS-DOS'\n+64E7CA Extract Zip Spec      14 (20) '2.0'\n+64E7CB Extract OS            00 (0) 'MS-DOS'\n+64E7CC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64E7CE Compression Method    0000 (0) 'Stored'\n+64E7D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E7D4 CRC                   1401A9F3 (335653363)\n+64E7D8 Compressed Size       00000945 (2373)\n+64E7DC Uncompressed Size     00000945 (2373)\n+64E7E0 Filename Length       0077 (119)\n+64E7E2 Extra Length          0009 (9)\n+64E7E4 Comment Length        0000 (0)\n+64E7E6 Disk Start            0000 (0)\n+64E7E8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E7EA Ext File Attributes   00000000 (0)\n+64E7EE Local Header Offset   0001C4DA (115930)\n+64E7F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E7F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E869 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E86B   Length              0005 (5)\n+64E86D   Flags               01 (1) 'Modification'\n+64E86E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E872 CENTRAL HEADER #22    02014B50 (33639248)\n+64E876 Created Zip Spec      14 (20) '2.0'\n+64E877 Created OS            00 (0) 'MS-DOS'\n+64E878 Extract Zip Spec      14 (20) '2.0'\n+64E879 Extract OS            00 (0) 'MS-DOS'\n+64E87A General Purpose Flag  0000 (0)\n+64E87C Compression Method    0000 (0) 'Stored'\n+64E87E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E882 CRC                   00000000 (0)\n+64E886 Compressed Size       00000000 (0)\n+64E88A Uncompressed Size     00000000 (0)\n+64E88E Filename Length       0023 (35)\n+64E890 Extra Length          0009 (9)\n+64E892 Comment Length        0000 (0)\n+64E894 Disk Start            0000 (0)\n+64E896 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E898 Ext File Attributes   00000000 (0)\n+64E89C Local Header Offset   0001CECD (118477)\n+64E8A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E8A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E8C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E8C5   Length              0005 (5)\n+64E8C7   Flags               01 (1) 'Modification'\n+64E8C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E8CC CENTRAL HEADER #23    02014B50 (33639248)\n+64E8D0 Created Zip Spec      14 (20) '2.0'\n+64E8D1 Created OS            00 (0) 'MS-DOS'\n+64E8D2 Extract Zip Spec      14 (20) '2.0'\n+64E8D3 Extract OS            00 (0) 'MS-DOS'\n+64E8D4 General Purpose Flag  0000 (0)\n+64E8D6 Compression Method    0000 (0) 'Stored'\n+64E8D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E8DC CRC                   00000000 (0)\n+64E8E0 Compressed Size       00000000 (0)\n+64E8E4 Uncompressed Size     00000000 (0)\n+64E8E8 Filename Length       002A (42)\n+64E8EA Extra Length          0009 (9)\n+64E8EC Comment Length        0000 (0)\n+64E8EE Disk Start            0000 (0)\n+64E8F0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E8F2 Ext File Attributes   00000000 (0)\n+64E8F6 Local Header Offset   0001CF17 (118551)\n+64E8FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E8FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E924 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E926   Length              0005 (5)\n+64E928   Flags               01 (1) 'Modification'\n+64E929   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E92D CENTRAL HEADER #24    02014B50 (33639248)\n+64E931 Created Zip Spec      14 (20) '2.0'\n+64E932 Created OS            00 (0) 'MS-DOS'\n+64E933 Extract Zip Spec      14 (20) '2.0'\n+64E934 Extract OS            00 (0) 'MS-DOS'\n+64E935 General Purpose Flag  0000 (0)\n+64E937 Compression Method    0000 (0) 'Stored'\n+64E939 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E93D CRC                   00000000 (0)\n+64E941 Compressed Size       00000000 (0)\n+64E945 Uncompressed Size     00000000 (0)\n+64E949 Filename Length       0056 (86)\n+64E94B Extra Length          0009 (9)\n+64E94D Comment Length        0000 (0)\n+64E94F Disk Start            0000 (0)\n+64E951 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E953 Ext File Attributes   00000000 (0)\n+64E957 Local Header Offset   0001CF68 (118632)\n+64E95B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E95B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64E9B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64E9B3   Length              0005 (5)\n+64E9B5   Flags               01 (1) 'Modification'\n+64E9B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64E9BA CENTRAL HEADER #25    02014B50 (33639248)\n+64E9BE Created Zip Spec      14 (20) '2.0'\n+64E9BF Created OS            00 (0) 'MS-DOS'\n+64E9C0 Extract Zip Spec      14 (20) '2.0'\n+64E9C1 Extract OS            00 (0) 'MS-DOS'\n+64E9C2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64E9C4 Compression Method    0000 (0) 'Stored'\n+64E9C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64E9CA CRC                   445AD7B2 (1146804146)\n+64E9CE Compressed Size       00000FBF (4031)\n+64E9D2 Uncompressed Size     00000FBF (4031)\n+64E9D6 Filename Length       006C (108)\n+64E9D8 Extra Length          0009 (9)\n+64E9DA Comment Length        0000 (0)\n+64E9DC Disk Start            0000 (0)\n+64E9DE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64E9E0 Ext File Attributes   00000000 (0)\n+64E9E4 Local Header Offset   0001CFE5 (118757)\n+64E9E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64E9E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64EA54 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64EA56   Length              0005 (5)\n+64EA58   Flags               01 (1) 'Modification'\n+64EA59   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64EA5D CENTRAL HEADER #26    02014B50 (33639248)\n+64EA61 Created Zip Spec      14 (20) '2.0'\n+64EA62 Created OS            00 (0) 'MS-DOS'\n+64EA63 Extract Zip Spec      14 (20) '2.0'\n+64EA64 Extract OS            00 (0) 'MS-DOS'\n+64EA65 General Purpose Flag  0000 (0)\n+64EA67 Compression Method    0000 (0) 'Stored'\n+64EA69 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64EA6D CRC                   00000000 (0)\n+64EA71 Compressed Size       00000000 (0)\n+64EA75 Uncompressed Size     00000000 (0)\n+64EA79 Filename Length       0056 (86)\n+64EA7B Extra Length          0009 (9)\n+64EA7D Comment Length        0000 (0)\n+64EA7F Disk Start            0000 (0)\n+64EA81 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64EA83 Ext File Attributes   00000000 (0)\n+64EA87 Local Header Offset   0001E047 (122951)\n+64EA8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64EA8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64EAE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64EAE3   Length              0005 (5)\n+64EAE5   Flags               01 (1) 'Modification'\n+64EAE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64EAEA CENTRAL HEADER #27    02014B50 (33639248)\n+64EAEE Created Zip Spec      14 (20) '2.0'\n+64EAEF Created OS            00 (0) 'MS-DOS'\n+64EAF0 Extract Zip Spec      14 (20) '2.0'\n+64EAF1 Extract OS            00 (0) 'MS-DOS'\n+64EAF2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64EAF4 Compression Method    0000 (0) 'Stored'\n+64EAF6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64EAFA CRC                   A2A96EA2 (2729012898)\n+64EAFE Compressed Size       000016DE (5854)\n+64EB02 Uncompressed Size     000016DE (5854)\n+64EB06 Filename Length       006C (108)\n+64EB08 Extra Length          0009 (9)\n+64EB0A Comment Length        0000 (0)\n+64EB0C Disk Start            0000 (0)\n+64EB0E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64EB10 Ext File Attributes   00000000 (0)\n+64EB14 Local Header Offset   0001E0C4 (123076)\n+64EB18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64EB18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64EB84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64EB86   Length              0005 (5)\n+64EB88   Flags               01 (1) 'Modification'\n+64EB89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64EB8D CENTRAL HEADER #28    02014B50 (33639248)\n+64EB91 Created Zip Spec      14 (20) '2.0'\n+64EB92 Created OS            00 (0) 'MS-DOS'\n+64EB93 Extract Zip Spec      14 (20) '2.0'\n+64EB94 Extract OS            00 (0) 'MS-DOS'\n+64EB95 General Purpose Flag  0000 (0)\n+64EB97 Compression Method    0000 (0) 'Stored'\n+64EB99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64EB9D CRC                   00000000 (0)\n+64EBA1 Compressed Size       00000000 (0)\n+64EBA5 Uncompressed Size     00000000 (0)\n+64EBA9 Filename Length       002F (47)\n+64EBAB Extra Length          0009 (9)\n+64EBAD Comment Length        0000 (0)\n+64EBAF Disk Start            0000 (0)\n+64EBB1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64EBB3 Ext File Attributes   00000000 (0)\n+64EBB7 Local Header Offset   0001F845 (129093)\n+64EBBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64EBBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64EBEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64EBEC   Length              0005 (5)\n+64EBEE   Flags               01 (1) 'Modification'\n+64EBEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64EBF3 CENTRAL HEADER #29    02014B50 (33639248)\n+64EBF7 Created Zip Spec      14 (20) '2.0'\n+64EBF8 Created OS            00 (0) 'MS-DOS'\n+64EBF9 Extract Zip Spec      14 (20) '2.0'\n+64EBFA Extract OS            00 (0) 'MS-DOS'\n+64EBFB General Purpose Flag  0000 (0)\n+64EBFD Compression Method    0000 (0) 'Stored'\n+64EBFF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64EC03 CRC                   00000000 (0)\n+64EC07 Compressed Size       00000000 (0)\n+64EC0B Uncompressed Size     00000000 (0)\n+64EC0F Filename Length       0036 (54)\n+64EC11 Extra Length          0009 (9)\n+64EC13 Comment Length        0000 (0)\n+64EC15 Disk Start            0000 (0)\n+64EC17 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64EC19 Ext File Attributes   00000000 (0)\n+64EC1D Local Header Offset   0001F89B (129179)\n+64EC21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64EC21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64EC57 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64EC59   Length              0005 (5)\n+64EC5B   Flags               01 (1) 'Modification'\n+64EC5C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64EC60 CENTRAL HEADER #30    02014B50 (33639248)\n+64EC64 Created Zip Spec      14 (20) '2.0'\n+64EC65 Created OS            00 (0) 'MS-DOS'\n+64EC66 Extract Zip Spec      14 (20) '2.0'\n+64EC67 Extract OS            00 (0) 'MS-DOS'\n+64EC68 General Purpose Flag  0000 (0)\n+64EC6A Compression Method    0000 (0) 'Stored'\n+64EC6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64EC70 CRC                   00000000 (0)\n+64EC74 Compressed Size       00000000 (0)\n+64EC78 Uncompressed Size     00000000 (0)\n+64EC7C Filename Length       0066 (102)\n+64EC7E Extra Length          0009 (9)\n+64EC80 Comment Length        0000 (0)\n+64EC82 Disk Start            0000 (0)\n+64EC84 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64EC86 Ext File Attributes   00000000 (0)\n+64EC8A Local Header Offset   0001F8F8 (129272)\n+64EC8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64EC8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64ECF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64ECF6   Length              0005 (5)\n+64ECF8   Flags               01 (1) 'Modification'\n+64ECF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64ECFD CENTRAL HEADER #31    02014B50 (33639248)\n+64ED01 Created Zip Spec      14 (20) '2.0'\n+64ED02 Created OS            00 (0) 'MS-DOS'\n+64ED03 Extract Zip Spec      14 (20) '2.0'\n+64ED04 Extract OS            00 (0) 'MS-DOS'\n+64ED05 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64ED07 Compression Method    0000 (0) 'Stored'\n+64ED09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64ED0D CRC                   7416DF2A (1947655978)\n+64ED11 Compressed Size       00001512 (5394)\n+64ED15 Uncompressed Size     00001512 (5394)\n+64ED19 Filename Length       007C (124)\n+64ED1B Extra Length          0009 (9)\n+64ED1D Comment Length        0000 (0)\n+64ED1F Disk Start            0000 (0)\n+64ED21 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64ED23 Ext File Attributes   00000000 (0)\n+64ED27 Local Header Offset   0001F985 (129413)\n+64ED2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64ED2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64EDA7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64EDA9   Length              0005 (5)\n+64EDAB   Flags               01 (1) 'Modification'\n+64EDAC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64EDB0 CENTRAL HEADER #32    02014B50 (33639248)\n+64EDB4 Created Zip Spec      14 (20) '2.0'\n+64EDB5 Created OS            00 (0) 'MS-DOS'\n+64EDB6 Extract Zip Spec      14 (20) '2.0'\n+64EDB7 Extract OS            00 (0) 'MS-DOS'\n+64EDB8 General Purpose Flag  0000 (0)\n+64EDBA Compression Method    0000 (0) 'Stored'\n+64EDBC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64EDC0 CRC                   00000000 (0)\n+64EDC4 Compressed Size       00000000 (0)\n+64EDC8 Uncompressed Size     00000000 (0)\n+64EDCC Filename Length       0022 (34)\n+64EDCE Extra Length          0009 (9)\n+64EDD0 Comment Length        0000 (0)\n+64EDD2 Disk Start            0000 (0)\n+64EDD4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64EDD6 Ext File Attributes   00000000 (0)\n+64EDDA Local Header Offset   00020F4A (134986)\n+64EDDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64EDDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64EE00 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64EE02   Length              0005 (5)\n+64EE04   Flags               01 (1) 'Modification'\n+64EE05   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64EE09 CENTRAL HEADER #33    02014B50 (33639248)\n+64EE0D Created Zip Spec      14 (20) '2.0'\n+64EE0E Created OS            00 (0) 'MS-DOS'\n+64EE0F Extract Zip Spec      14 (20) '2.0'\n+64EE10 Extract OS            00 (0) 'MS-DOS'\n+64EE11 General Purpose Flag  0000 (0)\n+64EE13 Compression Method    0000 (0) 'Stored'\n+64EE15 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64EE19 CRC                   00000000 (0)\n+64EE1D Compressed Size       00000000 (0)\n+64EE21 Uncompressed Size     00000000 (0)\n+64EE25 Filename Length       0029 (41)\n+64EE27 Extra Length          0009 (9)\n+64EE29 Comment Length        0000 (0)\n+64EE2B Disk Start            0000 (0)\n+64EE2D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64EE2F Ext File Attributes   00000000 (0)\n+64EE33 Local Header Offset   00020F93 (135059)\n+64EE37 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64EE37: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64EE60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64EE62   Length              0005 (5)\n+64EE64   Flags               01 (1) 'Modification'\n+64EE65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64EE69 CENTRAL HEADER #34    02014B50 (33639248)\n+64EE6D Created Zip Spec      14 (20) '2.0'\n+64EE6E Created OS            00 (0) 'MS-DOS'\n+64EE6F Extract Zip Spec      14 (20) '2.0'\n+64EE70 Extract OS            00 (0) 'MS-DOS'\n+64EE71 General Purpose Flag  0000 (0)\n+64EE73 Compression Method    0000 (0) 'Stored'\n+64EE75 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64EE79 CRC                   00000000 (0)\n+64EE7D Compressed Size       00000000 (0)\n+64EE81 Uncompressed Size     00000000 (0)\n+64EE85 Filename Length       0063 (99)\n+64EE87 Extra Length          0009 (9)\n+64EE89 Comment Length        0000 (0)\n+64EE8B Disk Start            0000 (0)\n+64EE8D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64EE8F Ext File Attributes   00000000 (0)\n+64EE93 Local Header Offset   00020FE3 (135139)\n+64EE97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64EE97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64EEFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64EEFC   Length              0005 (5)\n+64EEFE   Flags               01 (1) 'Modification'\n+64EEFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64EF03 CENTRAL HEADER #35    02014B50 (33639248)\n+64EF07 Created Zip Spec      14 (20) '2.0'\n+64EF08 Created OS            00 (0) 'MS-DOS'\n+64EF09 Extract Zip Spec      14 (20) '2.0'\n+64EF0A Extract OS            00 (0) 'MS-DOS'\n+64EF0B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64EF0D Compression Method    0000 (0) 'Stored'\n+64EF0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64EF13 CRC                   826E1CC4 (2188254404)\n+64EF17 Compressed Size       00002F90 (12176)\n+64EF1B Uncompressed Size     00002F90 (12176)\n+64EF1F Filename Length       0079 (121)\n+64EF21 Extra Length          0009 (9)\n+64EF23 Comment Length        0000 (0)\n+64EF25 Disk Start            0000 (0)\n+64EF27 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64EF29 Ext File Attributes   00000000 (0)\n+64EF2D Local Header Offset   0002106D (135277)\n+64EF31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64EF31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64EFAA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64EFAC   Length              0005 (5)\n+64EFAE   Flags               01 (1) 'Modification'\n+64EFAF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64EFB3 CENTRAL HEADER #36    02014B50 (33639248)\n+64EFB7 Created Zip Spec      14 (20) '2.0'\n+64EFB8 Created OS            00 (0) 'MS-DOS'\n+64EFB9 Extract Zip Spec      14 (20) '2.0'\n+64EFBA Extract OS            00 (0) 'MS-DOS'\n+64EFBB General Purpose Flag  0000 (0)\n+64EFBD Compression Method    0000 (0) 'Stored'\n+64EFBF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64EFC3 CRC                   00000000 (0)\n+64EFC7 Compressed Size       00000000 (0)\n+64EFCB Uncompressed Size     00000000 (0)\n+64EFCF Filename Length       006C (108)\n+64EFD1 Extra Length          0009 (9)\n+64EFD3 Comment Length        0000 (0)\n+64EFD5 Disk Start            0000 (0)\n+64EFD7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64EFD9 Ext File Attributes   00000000 (0)\n+64EFDD Local Header Offset   000240AD (147629)\n+64EFE1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64EFE1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64F04D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64F04F   Length              0005 (5)\n+64F051   Flags               01 (1) 'Modification'\n+64F052   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64F056 CENTRAL HEADER #37    02014B50 (33639248)\n+64F05A Created Zip Spec      14 (20) '2.0'\n+64F05B Created OS            00 (0) 'MS-DOS'\n+64F05C Extract Zip Spec      14 (20) '2.0'\n+64F05D Extract OS            00 (0) 'MS-DOS'\n+64F05E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64F060 Compression Method    0000 (0) 'Stored'\n+64F062 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64F066 CRC                   1BE163AC (467755948)\n+64F06A Compressed Size       00000967 (2407)\n+64F06E Uncompressed Size     00000967 (2407)\n+64F072 Filename Length       0082 (130)\n+64F074 Extra Length          0009 (9)\n+64F076 Comment Length        0000 (0)\n+64F078 Disk Start            0000 (0)\n+64F07A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64F07C Ext File Attributes   00000000 (0)\n+64F080 Local Header Offset   00024140 (147776)\n+64F084 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64F084: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64F106 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64F108   Length              0005 (5)\n+64F10A   Flags               01 (1) 'Modification'\n+64F10B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64F10F CENTRAL HEADER #38    02014B50 (33639248)\n+64F113 Created Zip Spec      14 (20) '2.0'\n+64F114 Created OS            00 (0) 'MS-DOS'\n+64F115 Extract Zip Spec      14 (20) '2.0'\n+64F116 Extract OS            00 (0) 'MS-DOS'\n+64F117 General Purpose Flag  0000 (0)\n+64F119 Compression Method    0000 (0) 'Stored'\n+64F11B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64F11F CRC                   00000000 (0)\n+64F123 Compressed Size       00000000 (0)\n+64F127 Uncompressed Size     00000000 (0)\n+64F12B Filename Length       0066 (102)\n+64F12D Extra Length          0009 (9)\n+64F12F Comment Length        0000 (0)\n+64F131 Disk Start            0000 (0)\n+64F133 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64F135 Ext File Attributes   00000000 (0)\n+64F139 Local Header Offset   00024B60 (150368)\n+64F13D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64F13D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64F1A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64F1A5   Length              0005 (5)\n+64F1A7   Flags               01 (1) 'Modification'\n+64F1A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64F1AC CENTRAL HEADER #39    02014B50 (33639248)\n+64F1B0 Created Zip Spec      14 (20) '2.0'\n+64F1B1 Created OS            00 (0) 'MS-DOS'\n+64F1B2 Extract Zip Spec      14 (20) '2.0'\n+64F1B3 Extract OS            00 (0) 'MS-DOS'\n+64F1B4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64F1B6 Compression Method    0000 (0) 'Stored'\n+64F1B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64F1BC CRC                   11DB1110 (299569424)\n+64F1C0 Compressed Size       0000080F (2063)\n+64F1C4 Uncompressed Size     0000080F (2063)\n+64F1C8 Filename Length       007C (124)\n+64F1CA Extra Length          0009 (9)\n+64F1CC Comment Length        0000 (0)\n+64F1CE Disk Start            0000 (0)\n+64F1D0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64F1D2 Ext File Attributes   00000000 (0)\n+64F1D6 Local Header Offset   00024BED (150509)\n+64F1DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64F1DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64F256 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64F258   Length              0005 (5)\n+64F25A   Flags               01 (1) 'Modification'\n+64F25B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64F25F CENTRAL HEADER #40    02014B50 (33639248)\n+64F263 Created Zip Spec      14 (20) '2.0'\n+64F264 Created OS            00 (0) 'MS-DOS'\n+64F265 Extract Zip Spec      14 (20) '2.0'\n+64F266 Extract OS            00 (0) 'MS-DOS'\n+64F267 General Purpose Flag  0000 (0)\n+64F269 Compression Method    0000 (0) 'Stored'\n+64F26B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64F26F CRC                   00000000 (0)\n+64F273 Compressed Size       00000000 (0)\n+64F277 Uncompressed Size     00000000 (0)\n+64F27B Filename Length       0062 (98)\n+64F27D Extra Length          0009 (9)\n+64F27F Comment Length        0000 (0)\n+64F281 Disk Start            0000 (0)\n+64F283 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64F285 Ext File Attributes   00000000 (0)\n+64F289 Local Header Offset   000254AF (152751)\n+64F28D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64F28D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64F2EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64F2F1   Length              0005 (5)\n+64F2F3   Flags               01 (1) 'Modification'\n+64F2F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64F2F8 CENTRAL HEADER #41    02014B50 (33639248)\n+64F2FC Created Zip Spec      14 (20) '2.0'\n+64F2FD Created OS            00 (0) 'MS-DOS'\n+64F2FE Extract Zip Spec      14 (20) '2.0'\n+64F2FF Extract OS            00 (0) 'MS-DOS'\n+64F300 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64F302 Compression Method    0000 (0) 'Stored'\n+64F304 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64F308 CRC                   30A69673 (816223859)\n+64F30C Compressed Size       00000C1C (3100)\n+64F310 Uncompressed Size     00000C1C (3100)\n+64F314 Filename Length       0078 (120)\n+64F316 Extra Length          0009 (9)\n+64F318 Comment Length        0000 (0)\n+64F31A Disk Start            0000 (0)\n+64F31C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64F31E Ext File Attributes   00000000 (0)\n+64F322 Local Header Offset   00025538 (152888)\n+64F326 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64F326: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64F39E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64F3A0   Length              0005 (5)\n+64F3A2   Flags               01 (1) 'Modification'\n+64F3A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64F3A7 CENTRAL HEADER #42    02014B50 (33639248)\n+64F3AB Created Zip Spec      14 (20) '2.0'\n+64F3AC Created OS            00 (0) 'MS-DOS'\n+64F3AD Extract Zip Spec      14 (20) '2.0'\n+64F3AE Extract OS            00 (0) 'MS-DOS'\n+64F3AF General Purpose Flag  0000 (0)\n+64F3B1 Compression Method    0000 (0) 'Stored'\n+64F3B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64F3B7 CRC                   00000000 (0)\n+64F3BB Compressed Size       00000000 (0)\n+64F3BF Uncompressed Size     00000000 (0)\n+64F3C3 Filename Length       006C (108)\n+64F3C5 Extra Length          0009 (9)\n+64F3C7 Comment Length        0000 (0)\n+64F3C9 Disk Start            0000 (0)\n+64F3CB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64F3CD Ext File Attributes   00000000 (0)\n+64F3D1 Local Header Offset   00026203 (156163)\n+64F3D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64F3D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64F441 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64F443   Length              0005 (5)\n+64F445   Flags               01 (1) 'Modification'\n+64F446   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64F44A CENTRAL HEADER #43    02014B50 (33639248)\n+64F44E Created Zip Spec      14 (20) '2.0'\n+64F44F Created OS            00 (0) 'MS-DOS'\n+64F450 Extract Zip Spec      14 (20) '2.0'\n+64F451 Extract OS            00 (0) 'MS-DOS'\n+64F452 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64F454 Compression Method    0000 (0) 'Stored'\n+64F456 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64F45A CRC                   0C316B32 (204565298)\n+64F45E Compressed Size       000006D7 (1751)\n+64F462 Uncompressed Size     000006D7 (1751)\n+64F466 Filename Length       0082 (130)\n+64F468 Extra Length          0009 (9)\n+64F46A Comment Length        0000 (0)\n+64F46C Disk Start            0000 (0)\n+64F46E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64F470 Ext File Attributes   00000000 (0)\n+64F474 Local Header Offset   00026296 (156310)\n+64F478 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64F478: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64F4FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64F4FC   Length              0005 (5)\n+64F4FE   Flags               01 (1) 'Modification'\n+64F4FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64F503 CENTRAL HEADER #44    02014B50 (33639248)\n+64F507 Created Zip Spec      14 (20) '2.0'\n+64F508 Created OS            00 (0) 'MS-DOS'\n+64F509 Extract Zip Spec      14 (20) '2.0'\n+64F50A Extract OS            00 (0) 'MS-DOS'\n+64F50B General Purpose Flag  0000 (0)\n+64F50D Compression Method    0000 (0) 'Stored'\n+64F50F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64F513 CRC                   00000000 (0)\n+64F517 Compressed Size       00000000 (0)\n+64F51B Uncompressed Size     00000000 (0)\n+64F51F Filename Length       0068 (104)\n+64F521 Extra Length          0009 (9)\n+64F523 Comment Length        0000 (0)\n+64F525 Disk Start            0000 (0)\n+64F527 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64F529 Ext File Attributes   00000000 (0)\n+64F52D Local Header Offset   00026A26 (158246)\n+64F531 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64F531: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64F599 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64F59B   Length              0005 (5)\n+64F59D   Flags               01 (1) 'Modification'\n+64F59E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64F5A2 CENTRAL HEADER #45    02014B50 (33639248)\n+64F5A6 Created Zip Spec      14 (20) '2.0'\n+64F5A7 Created OS            00 (0) 'MS-DOS'\n+64F5A8 Extract Zip Spec      14 (20) '2.0'\n+64F5A9 Extract OS            00 (0) 'MS-DOS'\n+64F5AA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64F5AC Compression Method    0000 (0) 'Stored'\n+64F5AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64F5B2 CRC                   37BEEC96 (935259286)\n+64F5B6 Compressed Size       0000133B (4923)\n+64F5BA Uncompressed Size     0000133B (4923)\n+64F5BE Filename Length       007E (126)\n+64F5C0 Extra Length          0009 (9)\n+64F5C2 Comment Length        0000 (0)\n+64F5C4 Disk Start            0000 (0)\n+64F5C6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64F5C8 Ext File Attributes   00000000 (0)\n+64F5CC Local Header Offset   00026AB5 (158389)\n+64F5D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64F5D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64F64E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64F650   Length              0005 (5)\n+64F652   Flags               01 (1) 'Modification'\n+64F653   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64F657 CENTRAL HEADER #46    02014B50 (33639248)\n+64F65B Created Zip Spec      14 (20) '2.0'\n+64F65C Created OS            00 (0) 'MS-DOS'\n+64F65D Extract Zip Spec      14 (20) '2.0'\n+64F65E Extract OS            00 (0) 'MS-DOS'\n+64F65F General Purpose Flag  0000 (0)\n+64F661 Compression Method    0000 (0) 'Stored'\n+64F663 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64F667 CRC                   00000000 (0)\n+64F66B Compressed Size       00000000 (0)\n+64F66F Uncompressed Size     00000000 (0)\n+64F673 Filename Length       0070 (112)\n+64F675 Extra Length          0009 (9)\n+64F677 Comment Length        0000 (0)\n+64F679 Disk Start            0000 (0)\n+64F67B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64F67D Ext File Attributes   00000000 (0)\n+64F681 Local Header Offset   00027EA5 (163493)\n+64F685 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64F685: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64F6F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64F6F7   Length              0005 (5)\n+64F6F9   Flags               01 (1) 'Modification'\n+64F6FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64F6FE CENTRAL HEADER #47    02014B50 (33639248)\n+64F702 Created Zip Spec      14 (20) '2.0'\n+64F703 Created OS            00 (0) 'MS-DOS'\n+64F704 Extract Zip Spec      14 (20) '2.0'\n+64F705 Extract OS            00 (0) 'MS-DOS'\n+64F706 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64F708 Compression Method    0000 (0) 'Stored'\n+64F70A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64F70E CRC                   D0AE7BE4 (3501095908)\n+64F712 Compressed Size       0000074C (1868)\n+64F716 Uncompressed Size     0000074C (1868)\n+64F71A Filename Length       0086 (134)\n+64F71C Extra Length          0009 (9)\n+64F71E Comment Length        0000 (0)\n+64F720 Disk Start            0000 (0)\n+64F722 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64F724 Ext File Attributes   00000000 (0)\n+64F728 Local Header Offset   00027F3C (163644)\n+64F72C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x64BB07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x64F72C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64BB8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64BB8F   Length              0005 (5)\n-64BB91   Flags               01 (1) 'Modification'\n-64BB92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64BB96 CENTRAL HEADER #48    02014B50 (33639248)\n-64BB9A Created Zip Spec      14 (20) '2.0'\n-64BB9B Created OS            00 (0) 'MS-DOS'\n-64BB9C Extract Zip Spec      14 (20) '2.0'\n-64BB9D Extract OS            00 (0) 'MS-DOS'\n-64BB9E General Purpose Flag  0000 (0)\n-64BBA0 Compression Method    0000 (0) 'Stored'\n-64BBA2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64BBA6 CRC                   00000000 (0)\n-64BBAA Compressed Size       00000000 (0)\n-64BBAE Uncompressed Size     00000000 (0)\n-64BBB2 Filename Length       006C (108)\n-64BBB4 Extra Length          0009 (9)\n-64BBB6 Comment Length        0000 (0)\n-64BBB8 Disk Start            0000 (0)\n-64BBBA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64BBBC Ext File Attributes   00000000 (0)\n-64BBC0 Local Header Offset   00024D7D (150909)\n-64BBC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64BBC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64BC30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64BC32   Length              0005 (5)\n-64BC34   Flags               01 (1) 'Modification'\n-64BC35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64BC39 CENTRAL HEADER #49    02014B50 (33639248)\n-64BC3D Created Zip Spec      14 (20) '2.0'\n-64BC3E Created OS            00 (0) 'MS-DOS'\n-64BC3F Extract Zip Spec      14 (20) '2.0'\n-64BC40 Extract OS            00 (0) 'MS-DOS'\n-64BC41 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64BC43 Compression Method    0000 (0) 'Stored'\n-64BC45 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64BC49 CRC                   4C134CE6 (1276333286)\n-64BC4D Compressed Size       0000103C (4156)\n-64BC51 Uncompressed Size     0000103C (4156)\n-64BC55 Filename Length       0082 (130)\n-64BC57 Extra Length          0009 (9)\n-64BC59 Comment Length        0000 (0)\n-64BC5B Disk Start            0000 (0)\n-64BC5D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64BC5F Ext File Attributes   00000000 (0)\n-64BC63 Local Header Offset   00024E10 (151056)\n-64BC67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64BC67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64BCE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64BCEB   Length              0005 (5)\n-64BCED   Flags               01 (1) 'Modification'\n-64BCEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64BCF2 CENTRAL HEADER #50    02014B50 (33639248)\n-64BCF6 Created Zip Spec      14 (20) '2.0'\n-64BCF7 Created OS            00 (0) 'MS-DOS'\n-64BCF8 Extract Zip Spec      14 (20) '2.0'\n-64BCF9 Extract OS            00 (0) 'MS-DOS'\n-64BCFA General Purpose Flag  0000 (0)\n-64BCFC Compression Method    0000 (0) 'Stored'\n-64BCFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64BD02 CRC                   00000000 (0)\n-64BD06 Compressed Size       00000000 (0)\n-64BD0A Uncompressed Size     00000000 (0)\n-64BD0E Filename Length       006E (110)\n-64BD10 Extra Length          0009 (9)\n-64BD12 Comment Length        0000 (0)\n-64BD14 Disk Start            0000 (0)\n-64BD16 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64BD18 Ext File Attributes   00000000 (0)\n-64BD1C Local Header Offset   00025F05 (155397)\n-64BD20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64BD20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64BD8E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64BD90   Length              0005 (5)\n-64BD92   Flags               01 (1) 'Modification'\n-64BD93   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64BD97 CENTRAL HEADER #51    02014B50 (33639248)\n-64BD9B Created Zip Spec      14 (20) '2.0'\n-64BD9C Created OS            00 (0) 'MS-DOS'\n-64BD9D Extract Zip Spec      14 (20) '2.0'\n-64BD9E Extract OS            00 (0) 'MS-DOS'\n-64BD9F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64BDA1 Compression Method    0000 (0) 'Stored'\n-64BDA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64BDA7 CRC                   63086228 (1661493800)\n-64BDAB Compressed Size       00000838 (2104)\n-64BDAF Uncompressed Size     00000838 (2104)\n-64BDB3 Filename Length       0084 (132)\n-64BDB5 Extra Length          0009 (9)\n-64BDB7 Comment Length        0000 (0)\n-64BDB9 Disk Start            0000 (0)\n-64BDBB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64BDBD Ext File Attributes   00000000 (0)\n-64BDC1 Local Header Offset   00025F9A (155546)\n-64BDC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+64F7B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64F7B4   Length              0005 (5)\n+64F7B6   Flags               01 (1) 'Modification'\n+64F7B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64F7BB CENTRAL HEADER #48    02014B50 (33639248)\n+64F7BF Created Zip Spec      14 (20) '2.0'\n+64F7C0 Created OS            00 (0) 'MS-DOS'\n+64F7C1 Extract Zip Spec      14 (20) '2.0'\n+64F7C2 Extract OS            00 (0) 'MS-DOS'\n+64F7C3 General Purpose Flag  0000 (0)\n+64F7C5 Compression Method    0000 (0) 'Stored'\n+64F7C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64F7CB CRC                   00000000 (0)\n+64F7CF Compressed Size       00000000 (0)\n+64F7D3 Uncompressed Size     00000000 (0)\n+64F7D7 Filename Length       006C (108)\n+64F7D9 Extra Length          0009 (9)\n+64F7DB Comment Length        0000 (0)\n+64F7DD Disk Start            0000 (0)\n+64F7DF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64F7E1 Ext File Attributes   00000000 (0)\n+64F7E5 Local Header Offset   00028745 (165701)\n+64F7E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64F7E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64F855 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64F857   Length              0005 (5)\n+64F859   Flags               01 (1) 'Modification'\n+64F85A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64F85E CENTRAL HEADER #49    02014B50 (33639248)\n+64F862 Created Zip Spec      14 (20) '2.0'\n+64F863 Created OS            00 (0) 'MS-DOS'\n+64F864 Extract Zip Spec      14 (20) '2.0'\n+64F865 Extract OS            00 (0) 'MS-DOS'\n+64F866 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64F868 Compression Method    0000 (0) 'Stored'\n+64F86A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64F86E CRC                   4C134CE6 (1276333286)\n+64F872 Compressed Size       0000103C (4156)\n+64F876 Uncompressed Size     0000103C (4156)\n+64F87A Filename Length       0082 (130)\n+64F87C Extra Length          0009 (9)\n+64F87E Comment Length        0000 (0)\n+64F880 Disk Start            0000 (0)\n+64F882 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64F884 Ext File Attributes   00000000 (0)\n+64F888 Local Header Offset   000287D8 (165848)\n+64F88C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64F88C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64F90E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64F910   Length              0005 (5)\n+64F912   Flags               01 (1) 'Modification'\n+64F913   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64F917 CENTRAL HEADER #50    02014B50 (33639248)\n+64F91B Created Zip Spec      14 (20) '2.0'\n+64F91C Created OS            00 (0) 'MS-DOS'\n+64F91D Extract Zip Spec      14 (20) '2.0'\n+64F91E Extract OS            00 (0) 'MS-DOS'\n+64F91F General Purpose Flag  0000 (0)\n+64F921 Compression Method    0000 (0) 'Stored'\n+64F923 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64F927 CRC                   00000000 (0)\n+64F92B Compressed Size       00000000 (0)\n+64F92F Uncompressed Size     00000000 (0)\n+64F933 Filename Length       006E (110)\n+64F935 Extra Length          0009 (9)\n+64F937 Comment Length        0000 (0)\n+64F939 Disk Start            0000 (0)\n+64F93B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64F93D Ext File Attributes   00000000 (0)\n+64F941 Local Header Offset   000298CD (170189)\n+64F945 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64F945: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64F9B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64F9B5   Length              0005 (5)\n+64F9B7   Flags               01 (1) 'Modification'\n+64F9B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64F9BC CENTRAL HEADER #51    02014B50 (33639248)\n+64F9C0 Created Zip Spec      14 (20) '2.0'\n+64F9C1 Created OS            00 (0) 'MS-DOS'\n+64F9C2 Extract Zip Spec      14 (20) '2.0'\n+64F9C3 Extract OS            00 (0) 'MS-DOS'\n+64F9C4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64F9C6 Compression Method    0000 (0) 'Stored'\n+64F9C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64F9CC CRC                   63086228 (1661493800)\n+64F9D0 Compressed Size       00000838 (2104)\n+64F9D4 Uncompressed Size     00000838 (2104)\n+64F9D8 Filename Length       0084 (132)\n+64F9DA Extra Length          0009 (9)\n+64F9DC Comment Length        0000 (0)\n+64F9DE Disk Start            0000 (0)\n+64F9E0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64F9E2 Ext File Attributes   00000000 (0)\n+64F9E6 Local Header Offset   00029962 (170338)\n+64F9EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x64BDC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x64F9EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64BE49 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64BE4B   Length              0005 (5)\n-64BE4D   Flags               01 (1) 'Modification'\n-64BE4E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64BE52 CENTRAL HEADER #52    02014B50 (33639248)\n-64BE56 Created Zip Spec      14 (20) '2.0'\n-64BE57 Created OS            00 (0) 'MS-DOS'\n-64BE58 Extract Zip Spec      14 (20) '2.0'\n-64BE59 Extract OS            00 (0) 'MS-DOS'\n-64BE5A General Purpose Flag  0000 (0)\n-64BE5C Compression Method    0000 (0) 'Stored'\n-64BE5E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64BE62 CRC                   00000000 (0)\n-64BE66 Compressed Size       00000000 (0)\n-64BE6A Uncompressed Size     00000000 (0)\n-64BE6E Filename Length       006A (106)\n-64BE70 Extra Length          0009 (9)\n-64BE72 Comment Length        0000 (0)\n-64BE74 Disk Start            0000 (0)\n-64BE76 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64BE78 Ext File Attributes   00000000 (0)\n-64BE7C Local Header Offset   0002688D (157837)\n-64BE80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64BE80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64BEEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64BEEC   Length              0005 (5)\n-64BEEE   Flags               01 (1) 'Modification'\n-64BEEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64BEF3 CENTRAL HEADER #53    02014B50 (33639248)\n-64BEF7 Created Zip Spec      14 (20) '2.0'\n-64BEF8 Created OS            00 (0) 'MS-DOS'\n-64BEF9 Extract Zip Spec      14 (20) '2.0'\n-64BEFA Extract OS            00 (0) 'MS-DOS'\n-64BEFB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64BEFD Compression Method    0000 (0) 'Stored'\n-64BEFF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64BF03 CRC                   9EF621C1 (2666930625)\n-64BF07 Compressed Size       00000C90 (3216)\n-64BF0B Uncompressed Size     00000C90 (3216)\n-64BF0F Filename Length       0080 (128)\n-64BF11 Extra Length          0009 (9)\n-64BF13 Comment Length        0000 (0)\n-64BF15 Disk Start            0000 (0)\n-64BF17 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64BF19 Ext File Attributes   00000000 (0)\n-64BF1D Local Header Offset   0002691E (157982)\n-64BF21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64BF21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64BFA1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64BFA3   Length              0005 (5)\n-64BFA5   Flags               01 (1) 'Modification'\n-64BFA6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64BFAA CENTRAL HEADER #54    02014B50 (33639248)\n-64BFAE Created Zip Spec      14 (20) '2.0'\n-64BFAF Created OS            00 (0) 'MS-DOS'\n-64BFB0 Extract Zip Spec      14 (20) '2.0'\n-64BFB1 Extract OS            00 (0) 'MS-DOS'\n-64BFB2 General Purpose Flag  0000 (0)\n-64BFB4 Compression Method    0000 (0) 'Stored'\n-64BFB6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64BFBA CRC                   00000000 (0)\n-64BFBE Compressed Size       00000000 (0)\n-64BFC2 Uncompressed Size     00000000 (0)\n-64BFC6 Filename Length       0052 (82)\n-64BFC8 Extra Length          0009 (9)\n-64BFCA Comment Length        0000 (0)\n-64BFCC Disk Start            0000 (0)\n-64BFCE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64BFD0 Ext File Attributes   00000000 (0)\n-64BFD4 Local Header Offset   00027665 (161381)\n-64BFD8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64BFD8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C02A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C02C   Length              0005 (5)\n-64C02E   Flags               01 (1) 'Modification'\n-64C02F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C033 CENTRAL HEADER #55    02014B50 (33639248)\n-64C037 Created Zip Spec      14 (20) '2.0'\n-64C038 Created OS            00 (0) 'MS-DOS'\n-64C039 Extract Zip Spec      14 (20) '2.0'\n-64C03A Extract OS            00 (0) 'MS-DOS'\n-64C03B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64C03D Compression Method    0000 (0) 'Stored'\n-64C03F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C043 CRC                   6BE0FFE8 (1809907688)\n-64C047 Compressed Size       00000EF6 (3830)\n-64C04B Uncompressed Size     00000EF6 (3830)\n-64C04F Filename Length       0068 (104)\n-64C051 Extra Length          0009 (9)\n-64C053 Comment Length        0000 (0)\n-64C055 Disk Start            0000 (0)\n-64C057 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C059 Ext File Attributes   00000000 (0)\n-64C05D Local Header Offset   000276DE (161502)\n-64C061 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64C061: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C0C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C0CB   Length              0005 (5)\n-64C0CD   Flags               01 (1) 'Modification'\n-64C0CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C0D2 CENTRAL HEADER #56    02014B50 (33639248)\n-64C0D6 Created Zip Spec      14 (20) '2.0'\n-64C0D7 Created OS            00 (0) 'MS-DOS'\n-64C0D8 Extract Zip Spec      14 (20) '2.0'\n-64C0D9 Extract OS            00 (0) 'MS-DOS'\n-64C0DA General Purpose Flag  0000 (0)\n-64C0DC Compression Method    0000 (0) 'Stored'\n-64C0DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C0E2 CRC                   00000000 (0)\n-64C0E6 Compressed Size       00000000 (0)\n-64C0EA Uncompressed Size     00000000 (0)\n-64C0EE Filename Length       0057 (87)\n-64C0F0 Extra Length          0009 (9)\n-64C0F2 Comment Length        0000 (0)\n-64C0F4 Disk Start            0000 (0)\n-64C0F6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C0F8 Ext File Attributes   00000000 (0)\n-64C0FC Local Header Offset   00028673 (165491)\n-64C100 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64C100: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C157 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C159   Length              0005 (5)\n-64C15B   Flags               01 (1) 'Modification'\n-64C15C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C160 CENTRAL HEADER #57    02014B50 (33639248)\n-64C164 Created Zip Spec      14 (20) '2.0'\n-64C165 Created OS            00 (0) 'MS-DOS'\n-64C166 Extract Zip Spec      14 (20) '2.0'\n-64C167 Extract OS            00 (0) 'MS-DOS'\n-64C168 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64C16A Compression Method    0000 (0) 'Stored'\n-64C16C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C170 CRC                   988DC4AD (2559427757)\n-64C174 Compressed Size       0000071B (1819)\n-64C178 Uncompressed Size     0000071B (1819)\n-64C17C Filename Length       006D (109)\n-64C17E Extra Length          0009 (9)\n-64C180 Comment Length        0000 (0)\n-64C182 Disk Start            0000 (0)\n-64C184 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C186 Ext File Attributes   00000000 (0)\n-64C18A Local Header Offset   000286F1 (165617)\n-64C18E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64C18E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C1FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C1FD   Length              0005 (5)\n-64C1FF   Flags               01 (1) 'Modification'\n-64C200   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C204 CENTRAL HEADER #58    02014B50 (33639248)\n-64C208 Created Zip Spec      14 (20) '2.0'\n-64C209 Created OS            00 (0) 'MS-DOS'\n-64C20A Extract Zip Spec      14 (20) '2.0'\n-64C20B Extract OS            00 (0) 'MS-DOS'\n-64C20C General Purpose Flag  0000 (0)\n-64C20E Compression Method    0000 (0) 'Stored'\n-64C210 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C214 CRC                   00000000 (0)\n-64C218 Compressed Size       00000000 (0)\n-64C21C Uncompressed Size     00000000 (0)\n-64C220 Filename Length       0072 (114)\n-64C222 Extra Length          0009 (9)\n-64C224 Comment Length        0000 (0)\n-64C226 Disk Start            0000 (0)\n-64C228 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C22A Ext File Attributes   00000000 (0)\n-64C22E Local Header Offset   00028EB0 (167600)\n-64C232 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64C232: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C2A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C2A6   Length              0005 (5)\n-64C2A8   Flags               01 (1) 'Modification'\n-64C2A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C2AD CENTRAL HEADER #59    02014B50 (33639248)\n-64C2B1 Created Zip Spec      14 (20) '2.0'\n-64C2B2 Created OS            00 (0) 'MS-DOS'\n-64C2B3 Extract Zip Spec      14 (20) '2.0'\n-64C2B4 Extract OS            00 (0) 'MS-DOS'\n-64C2B5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64C2B7 Compression Method    0000 (0) 'Stored'\n-64C2B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C2BD CRC                   07A59EC9 (128294601)\n-64C2C1 Compressed Size       00000C29 (3113)\n-64C2C5 Uncompressed Size     00000C29 (3113)\n-64C2C9 Filename Length       0088 (136)\n-64C2CB Extra Length          0009 (9)\n-64C2CD Comment Length        0000 (0)\n-64C2CF Disk Start            0000 (0)\n-64C2D1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C2D3 Ext File Attributes   00000000 (0)\n-64C2D7 Local Header Offset   00028F49 (167753)\n-64C2DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+64FA6E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64FA70   Length              0005 (5)\n+64FA72   Flags               01 (1) 'Modification'\n+64FA73   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64FA77 CENTRAL HEADER #52    02014B50 (33639248)\n+64FA7B Created Zip Spec      14 (20) '2.0'\n+64FA7C Created OS            00 (0) 'MS-DOS'\n+64FA7D Extract Zip Spec      14 (20) '2.0'\n+64FA7E Extract OS            00 (0) 'MS-DOS'\n+64FA7F General Purpose Flag  0000 (0)\n+64FA81 Compression Method    0000 (0) 'Stored'\n+64FA83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64FA87 CRC                   00000000 (0)\n+64FA8B Compressed Size       00000000 (0)\n+64FA8F Uncompressed Size     00000000 (0)\n+64FA93 Filename Length       006A (106)\n+64FA95 Extra Length          0009 (9)\n+64FA97 Comment Length        0000 (0)\n+64FA99 Disk Start            0000 (0)\n+64FA9B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64FA9D Ext File Attributes   00000000 (0)\n+64FAA1 Local Header Offset   0002A255 (172629)\n+64FAA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64FAA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64FB0F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64FB11   Length              0005 (5)\n+64FB13   Flags               01 (1) 'Modification'\n+64FB14   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64FB18 CENTRAL HEADER #53    02014B50 (33639248)\n+64FB1C Created Zip Spec      14 (20) '2.0'\n+64FB1D Created OS            00 (0) 'MS-DOS'\n+64FB1E Extract Zip Spec      14 (20) '2.0'\n+64FB1F Extract OS            00 (0) 'MS-DOS'\n+64FB20 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64FB22 Compression Method    0000 (0) 'Stored'\n+64FB24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64FB28 CRC                   9EF621C1 (2666930625)\n+64FB2C Compressed Size       00000C90 (3216)\n+64FB30 Uncompressed Size     00000C90 (3216)\n+64FB34 Filename Length       0080 (128)\n+64FB36 Extra Length          0009 (9)\n+64FB38 Comment Length        0000 (0)\n+64FB3A Disk Start            0000 (0)\n+64FB3C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64FB3E Ext File Attributes   00000000 (0)\n+64FB42 Local Header Offset   0002A2E6 (172774)\n+64FB46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64FB46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64FBC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64FBC8   Length              0005 (5)\n+64FBCA   Flags               01 (1) 'Modification'\n+64FBCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64FBCF CENTRAL HEADER #54    02014B50 (33639248)\n+64FBD3 Created Zip Spec      14 (20) '2.0'\n+64FBD4 Created OS            00 (0) 'MS-DOS'\n+64FBD5 Extract Zip Spec      14 (20) '2.0'\n+64FBD6 Extract OS            00 (0) 'MS-DOS'\n+64FBD7 General Purpose Flag  0000 (0)\n+64FBD9 Compression Method    0000 (0) 'Stored'\n+64FBDB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64FBDF CRC                   00000000 (0)\n+64FBE3 Compressed Size       00000000 (0)\n+64FBE7 Uncompressed Size     00000000 (0)\n+64FBEB Filename Length       0052 (82)\n+64FBED Extra Length          0009 (9)\n+64FBEF Comment Length        0000 (0)\n+64FBF1 Disk Start            0000 (0)\n+64FBF3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64FBF5 Ext File Attributes   00000000 (0)\n+64FBF9 Local Header Offset   0002B02D (176173)\n+64FBFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64FBFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64FC4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64FC51   Length              0005 (5)\n+64FC53   Flags               01 (1) 'Modification'\n+64FC54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64FC58 CENTRAL HEADER #55    02014B50 (33639248)\n+64FC5C Created Zip Spec      14 (20) '2.0'\n+64FC5D Created OS            00 (0) 'MS-DOS'\n+64FC5E Extract Zip Spec      14 (20) '2.0'\n+64FC5F Extract OS            00 (0) 'MS-DOS'\n+64FC60 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64FC62 Compression Method    0000 (0) 'Stored'\n+64FC64 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64FC68 CRC                   6BE0FFE8 (1809907688)\n+64FC6C Compressed Size       00000EF6 (3830)\n+64FC70 Uncompressed Size     00000EF6 (3830)\n+64FC74 Filename Length       0068 (104)\n+64FC76 Extra Length          0009 (9)\n+64FC78 Comment Length        0000 (0)\n+64FC7A Disk Start            0000 (0)\n+64FC7C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64FC7E Ext File Attributes   00000000 (0)\n+64FC82 Local Header Offset   0002B0A6 (176294)\n+64FC86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64FC86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64FCEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64FCF0   Length              0005 (5)\n+64FCF2   Flags               01 (1) 'Modification'\n+64FCF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64FCF7 CENTRAL HEADER #56    02014B50 (33639248)\n+64FCFB Created Zip Spec      14 (20) '2.0'\n+64FCFC Created OS            00 (0) 'MS-DOS'\n+64FCFD Extract Zip Spec      14 (20) '2.0'\n+64FCFE Extract OS            00 (0) 'MS-DOS'\n+64FCFF General Purpose Flag  0000 (0)\n+64FD01 Compression Method    0000 (0) 'Stored'\n+64FD03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64FD07 CRC                   00000000 (0)\n+64FD0B Compressed Size       00000000 (0)\n+64FD0F Uncompressed Size     00000000 (0)\n+64FD13 Filename Length       0057 (87)\n+64FD15 Extra Length          0009 (9)\n+64FD17 Comment Length        0000 (0)\n+64FD19 Disk Start            0000 (0)\n+64FD1B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64FD1D Ext File Attributes   00000000 (0)\n+64FD21 Local Header Offset   0002C03B (180283)\n+64FD25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64FD25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64FD7C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64FD7E   Length              0005 (5)\n+64FD80   Flags               01 (1) 'Modification'\n+64FD81   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64FD85 CENTRAL HEADER #57    02014B50 (33639248)\n+64FD89 Created Zip Spec      14 (20) '2.0'\n+64FD8A Created OS            00 (0) 'MS-DOS'\n+64FD8B Extract Zip Spec      14 (20) '2.0'\n+64FD8C Extract OS            00 (0) 'MS-DOS'\n+64FD8D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64FD8F Compression Method    0000 (0) 'Stored'\n+64FD91 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64FD95 CRC                   988DC4AD (2559427757)\n+64FD99 Compressed Size       0000071B (1819)\n+64FD9D Uncompressed Size     0000071B (1819)\n+64FDA1 Filename Length       006D (109)\n+64FDA3 Extra Length          0009 (9)\n+64FDA5 Comment Length        0000 (0)\n+64FDA7 Disk Start            0000 (0)\n+64FDA9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64FDAB Ext File Attributes   00000000 (0)\n+64FDAF Local Header Offset   0002C0B9 (180409)\n+64FDB3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64FDB3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64FE20 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64FE22   Length              0005 (5)\n+64FE24   Flags               01 (1) 'Modification'\n+64FE25   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64FE29 CENTRAL HEADER #58    02014B50 (33639248)\n+64FE2D Created Zip Spec      14 (20) '2.0'\n+64FE2E Created OS            00 (0) 'MS-DOS'\n+64FE2F Extract Zip Spec      14 (20) '2.0'\n+64FE30 Extract OS            00 (0) 'MS-DOS'\n+64FE31 General Purpose Flag  0000 (0)\n+64FE33 Compression Method    0000 (0) 'Stored'\n+64FE35 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64FE39 CRC                   00000000 (0)\n+64FE3D Compressed Size       00000000 (0)\n+64FE41 Uncompressed Size     00000000 (0)\n+64FE45 Filename Length       0072 (114)\n+64FE47 Extra Length          0009 (9)\n+64FE49 Comment Length        0000 (0)\n+64FE4B Disk Start            0000 (0)\n+64FE4D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64FE4F Ext File Attributes   00000000 (0)\n+64FE53 Local Header Offset   0002C878 (182392)\n+64FE57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64FE57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64FEC9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64FECB   Length              0005 (5)\n+64FECD   Flags               01 (1) 'Modification'\n+64FECE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64FED2 CENTRAL HEADER #59    02014B50 (33639248)\n+64FED6 Created Zip Spec      14 (20) '2.0'\n+64FED7 Created OS            00 (0) 'MS-DOS'\n+64FED8 Extract Zip Spec      14 (20) '2.0'\n+64FED9 Extract OS            00 (0) 'MS-DOS'\n+64FEDA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+64FEDC Compression Method    0000 (0) 'Stored'\n+64FEDE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64FEE2 CRC                   07A59EC9 (128294601)\n+64FEE6 Compressed Size       00000C29 (3113)\n+64FEEA Uncompressed Size     00000C29 (3113)\n+64FEEE Filename Length       0088 (136)\n+64FEF0 Extra Length          0009 (9)\n+64FEF2 Comment Length        0000 (0)\n+64FEF4 Disk Start            0000 (0)\n+64FEF6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64FEF8 Ext File Attributes   00000000 (0)\n+64FEFC Local Header Offset   0002C911 (182545)\n+64FF00 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x64C2DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x64FF00: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64C363 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C365   Length              0005 (5)\n-64C367   Flags               01 (1) 'Modification'\n-64C368   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C36C CENTRAL HEADER #60    02014B50 (33639248)\n-64C370 Created Zip Spec      14 (20) '2.0'\n-64C371 Created OS            00 (0) 'MS-DOS'\n-64C372 Extract Zip Spec      14 (20) '2.0'\n-64C373 Extract OS            00 (0) 'MS-DOS'\n-64C374 General Purpose Flag  0000 (0)\n-64C376 Compression Method    0000 (0) 'Stored'\n-64C378 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C37C CRC                   00000000 (0)\n-64C380 Compressed Size       00000000 (0)\n-64C384 Uncompressed Size     00000000 (0)\n-64C388 Filename Length       0024 (36)\n-64C38A Extra Length          0009 (9)\n-64C38C Comment Length        0000 (0)\n-64C38E Disk Start            0000 (0)\n-64C390 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C392 Ext File Attributes   00000000 (0)\n-64C396 Local Header Offset   00029C31 (171057)\n-64C39A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64C39A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C3BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C3C0   Length              0005 (5)\n-64C3C2   Flags               01 (1) 'Modification'\n-64C3C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C3C7 CENTRAL HEADER #61    02014B50 (33639248)\n-64C3CB Created Zip Spec      14 (20) '2.0'\n-64C3CC Created OS            00 (0) 'MS-DOS'\n-64C3CD Extract Zip Spec      14 (20) '2.0'\n-64C3CE Extract OS            00 (0) 'MS-DOS'\n-64C3CF General Purpose Flag  0000 (0)\n-64C3D1 Compression Method    0000 (0) 'Stored'\n-64C3D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C3D7 CRC                   00000000 (0)\n-64C3DB Compressed Size       00000000 (0)\n-64C3DF Uncompressed Size     00000000 (0)\n-64C3E3 Filename Length       002B (43)\n-64C3E5 Extra Length          0009 (9)\n-64C3E7 Comment Length        0000 (0)\n-64C3E9 Disk Start            0000 (0)\n-64C3EB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C3ED Ext File Attributes   00000000 (0)\n-64C3F1 Local Header Offset   00029C7C (171132)\n-64C3F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64C3F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C420 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C422   Length              0005 (5)\n-64C424   Flags               01 (1) 'Modification'\n-64C425   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C429 CENTRAL HEADER #62    02014B50 (33639248)\n-64C42D Created Zip Spec      14 (20) '2.0'\n-64C42E Created OS            00 (0) 'MS-DOS'\n-64C42F Extract Zip Spec      14 (20) '2.0'\n-64C430 Extract OS            00 (0) 'MS-DOS'\n-64C431 General Purpose Flag  0000 (0)\n-64C433 Compression Method    0000 (0) 'Stored'\n-64C435 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C439 CRC                   00000000 (0)\n-64C43D Compressed Size       00000000 (0)\n-64C441 Uncompressed Size     00000000 (0)\n-64C445 Filename Length       006C (108)\n-64C447 Extra Length          0009 (9)\n-64C449 Comment Length        0000 (0)\n-64C44B Disk Start            0000 (0)\n-64C44D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C44F Ext File Attributes   00000000 (0)\n-64C453 Local Header Offset   00029CCE (171214)\n-64C457 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64C457: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C4C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C4C5   Length              0005 (5)\n-64C4C7   Flags               01 (1) 'Modification'\n-64C4C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C4CC CENTRAL HEADER #63    02014B50 (33639248)\n-64C4D0 Created Zip Spec      14 (20) '2.0'\n-64C4D1 Created OS            00 (0) 'MS-DOS'\n-64C4D2 Extract Zip Spec      14 (20) '2.0'\n-64C4D3 Extract OS            00 (0) 'MS-DOS'\n-64C4D4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64C4D6 Compression Method    0000 (0) 'Stored'\n-64C4D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C4DC CRC                   63D24DDE (1674726878)\n-64C4E0 Compressed Size       00000E46 (3654)\n-64C4E4 Uncompressed Size     00000E46 (3654)\n-64C4E8 Filename Length       0082 (130)\n-64C4EA Extra Length          0009 (9)\n-64C4EC Comment Length        0000 (0)\n-64C4EE Disk Start            0000 (0)\n-64C4F0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C4F2 Ext File Attributes   00000000 (0)\n-64C4F6 Local Header Offset   00029D61 (171361)\n-64C4FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64C4FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C57C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C57E   Length              0005 (5)\n-64C580   Flags               01 (1) 'Modification'\n-64C581   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C585 CENTRAL HEADER #64    02014B50 (33639248)\n-64C589 Created Zip Spec      14 (20) '2.0'\n-64C58A Created OS            00 (0) 'MS-DOS'\n-64C58B Extract Zip Spec      14 (20) '2.0'\n-64C58C Extract OS            00 (0) 'MS-DOS'\n-64C58D General Purpose Flag  0000 (0)\n-64C58F Compression Method    0000 (0) 'Stored'\n-64C591 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C595 CRC                   00000000 (0)\n-64C599 Compressed Size       00000000 (0)\n-64C59D Uncompressed Size     00000000 (0)\n-64C5A1 Filename Length       0073 (115)\n-64C5A3 Extra Length          0009 (9)\n-64C5A5 Comment Length        0000 (0)\n-64C5A7 Disk Start            0000 (0)\n-64C5A9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C5AB Ext File Attributes   00000000 (0)\n-64C5AF Local Header Offset   0002AC60 (175200)\n-64C5B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64C5B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C626 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C628   Length              0005 (5)\n-64C62A   Flags               01 (1) 'Modification'\n-64C62B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C62F CENTRAL HEADER #65    02014B50 (33639248)\n-64C633 Created Zip Spec      14 (20) '2.0'\n-64C634 Created OS            00 (0) 'MS-DOS'\n-64C635 Extract Zip Spec      14 (20) '2.0'\n-64C636 Extract OS            00 (0) 'MS-DOS'\n-64C637 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64C639 Compression Method    0000 (0) 'Stored'\n-64C63B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C63F CRC                   2E17013D (773259581)\n-64C643 Compressed Size       00000888 (2184)\n-64C647 Uncompressed Size     00000888 (2184)\n-64C64B Filename Length       0089 (137)\n-64C64D Extra Length          0009 (9)\n-64C64F Comment Length        0000 (0)\n-64C651 Disk Start            0000 (0)\n-64C653 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C655 Ext File Attributes   00000000 (0)\n-64C659 Local Header Offset   0002ACFA (175354)\n-64C65D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+64FF88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64FF8A   Length              0005 (5)\n+64FF8C   Flags               01 (1) 'Modification'\n+64FF8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64FF91 CENTRAL HEADER #60    02014B50 (33639248)\n+64FF95 Created Zip Spec      14 (20) '2.0'\n+64FF96 Created OS            00 (0) 'MS-DOS'\n+64FF97 Extract Zip Spec      14 (20) '2.0'\n+64FF98 Extract OS            00 (0) 'MS-DOS'\n+64FF99 General Purpose Flag  0000 (0)\n+64FF9B Compression Method    0000 (0) 'Stored'\n+64FF9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64FFA1 CRC                   00000000 (0)\n+64FFA5 Compressed Size       00000000 (0)\n+64FFA9 Uncompressed Size     00000000 (0)\n+64FFAD Filename Length       0024 (36)\n+64FFAF Extra Length          0009 (9)\n+64FFB1 Comment Length        0000 (0)\n+64FFB3 Disk Start            0000 (0)\n+64FFB5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+64FFB7 Ext File Attributes   00000000 (0)\n+64FFBB Local Header Offset   0002D5F9 (185849)\n+64FFBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64FFBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+64FFE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+64FFE5   Length              0005 (5)\n+64FFE7   Flags               01 (1) 'Modification'\n+64FFE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+64FFEC CENTRAL HEADER #61    02014B50 (33639248)\n+64FFF0 Created Zip Spec      14 (20) '2.0'\n+64FFF1 Created OS            00 (0) 'MS-DOS'\n+64FFF2 Extract Zip Spec      14 (20) '2.0'\n+64FFF3 Extract OS            00 (0) 'MS-DOS'\n+64FFF4 General Purpose Flag  0000 (0)\n+64FFF6 Compression Method    0000 (0) 'Stored'\n+64FFF8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+64FFFC CRC                   00000000 (0)\n+650000 Compressed Size       00000000 (0)\n+650004 Uncompressed Size     00000000 (0)\n+650008 Filename Length       002B (43)\n+65000A Extra Length          0009 (9)\n+65000C Comment Length        0000 (0)\n+65000E Disk Start            0000 (0)\n+650010 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650012 Ext File Attributes   00000000 (0)\n+650016 Local Header Offset   0002D644 (185924)\n+65001A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65001A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650045 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650047   Length              0005 (5)\n+650049   Flags               01 (1) 'Modification'\n+65004A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65004E CENTRAL HEADER #62    02014B50 (33639248)\n+650052 Created Zip Spec      14 (20) '2.0'\n+650053 Created OS            00 (0) 'MS-DOS'\n+650054 Extract Zip Spec      14 (20) '2.0'\n+650055 Extract OS            00 (0) 'MS-DOS'\n+650056 General Purpose Flag  0000 (0)\n+650058 Compression Method    0000 (0) 'Stored'\n+65005A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65005E CRC                   00000000 (0)\n+650062 Compressed Size       00000000 (0)\n+650066 Uncompressed Size     00000000 (0)\n+65006A Filename Length       006C (108)\n+65006C Extra Length          0009 (9)\n+65006E Comment Length        0000 (0)\n+650070 Disk Start            0000 (0)\n+650072 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650074 Ext File Attributes   00000000 (0)\n+650078 Local Header Offset   0002D696 (186006)\n+65007C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65007C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6500E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6500EA   Length              0005 (5)\n+6500EC   Flags               01 (1) 'Modification'\n+6500ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6500F1 CENTRAL HEADER #63    02014B50 (33639248)\n+6500F5 Created Zip Spec      14 (20) '2.0'\n+6500F6 Created OS            00 (0) 'MS-DOS'\n+6500F7 Extract Zip Spec      14 (20) '2.0'\n+6500F8 Extract OS            00 (0) 'MS-DOS'\n+6500F9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6500FB Compression Method    0000 (0) 'Stored'\n+6500FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650101 CRC                   63D24DDE (1674726878)\n+650105 Compressed Size       00000E46 (3654)\n+650109 Uncompressed Size     00000E46 (3654)\n+65010D Filename Length       0082 (130)\n+65010F Extra Length          0009 (9)\n+650111 Comment Length        0000 (0)\n+650113 Disk Start            0000 (0)\n+650115 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650117 Ext File Attributes   00000000 (0)\n+65011B Local Header Offset   0002D729 (186153)\n+65011F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65011F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6501A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6501A3   Length              0005 (5)\n+6501A5   Flags               01 (1) 'Modification'\n+6501A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6501AA CENTRAL HEADER #64    02014B50 (33639248)\n+6501AE Created Zip Spec      14 (20) '2.0'\n+6501AF Created OS            00 (0) 'MS-DOS'\n+6501B0 Extract Zip Spec      14 (20) '2.0'\n+6501B1 Extract OS            00 (0) 'MS-DOS'\n+6501B2 General Purpose Flag  0000 (0)\n+6501B4 Compression Method    0000 (0) 'Stored'\n+6501B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6501BA CRC                   00000000 (0)\n+6501BE Compressed Size       00000000 (0)\n+6501C2 Uncompressed Size     00000000 (0)\n+6501C6 Filename Length       0073 (115)\n+6501C8 Extra Length          0009 (9)\n+6501CA Comment Length        0000 (0)\n+6501CC Disk Start            0000 (0)\n+6501CE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6501D0 Ext File Attributes   00000000 (0)\n+6501D4 Local Header Offset   0002E628 (189992)\n+6501D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6501D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65024B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65024D   Length              0005 (5)\n+65024F   Flags               01 (1) 'Modification'\n+650250   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650254 CENTRAL HEADER #65    02014B50 (33639248)\n+650258 Created Zip Spec      14 (20) '2.0'\n+650259 Created OS            00 (0) 'MS-DOS'\n+65025A Extract Zip Spec      14 (20) '2.0'\n+65025B Extract OS            00 (0) 'MS-DOS'\n+65025C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65025E Compression Method    0000 (0) 'Stored'\n+650260 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650264 CRC                   2E17013D (773259581)\n+650268 Compressed Size       00000888 (2184)\n+65026C Uncompressed Size     00000888 (2184)\n+650270 Filename Length       0089 (137)\n+650272 Extra Length          0009 (9)\n+650274 Comment Length        0000 (0)\n+650276 Disk Start            0000 (0)\n+650278 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65027A Ext File Attributes   00000000 (0)\n+65027E Local Header Offset   0002E6C2 (190146)\n+650282 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXX'\n #\n-# WARNING: Offset 0x64C65D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x650282: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64C6E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C6E8   Length              0005 (5)\n-64C6EA   Flags               01 (1) 'Modification'\n-64C6EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C6EF CENTRAL HEADER #66    02014B50 (33639248)\n-64C6F3 Created Zip Spec      14 (20) '2.0'\n-64C6F4 Created OS            00 (0) 'MS-DOS'\n-64C6F5 Extract Zip Spec      14 (20) '2.0'\n-64C6F6 Extract OS            00 (0) 'MS-DOS'\n-64C6F7 General Purpose Flag  0000 (0)\n-64C6F9 Compression Method    0000 (0) 'Stored'\n-64C6FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C6FF CRC                   00000000 (0)\n-64C703 Compressed Size       00000000 (0)\n-64C707 Uncompressed Size     00000000 (0)\n-64C70B Filename Length       0022 (34)\n-64C70D Extra Length          0009 (9)\n-64C70F Comment Length        0000 (0)\n-64C711 Disk Start            0000 (0)\n-64C713 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C715 Ext File Attributes   00000000 (0)\n-64C719 Local Header Offset   0002B642 (177730)\n-64C71D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64C71D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C73F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C741   Length              0005 (5)\n-64C743   Flags               01 (1) 'Modification'\n-64C744   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C748 CENTRAL HEADER #67    02014B50 (33639248)\n-64C74C Created Zip Spec      14 (20) '2.0'\n-64C74D Created OS            00 (0) 'MS-DOS'\n-64C74E Extract Zip Spec      14 (20) '2.0'\n-64C74F Extract OS            00 (0) 'MS-DOS'\n-64C750 General Purpose Flag  0000 (0)\n-64C752 Compression Method    0000 (0) 'Stored'\n-64C754 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C758 CRC                   00000000 (0)\n-64C75C Compressed Size       00000000 (0)\n-64C760 Uncompressed Size     00000000 (0)\n-64C764 Filename Length       0029 (41)\n-64C766 Extra Length          0009 (9)\n-64C768 Comment Length        0000 (0)\n-64C76A Disk Start            0000 (0)\n-64C76C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C76E Ext File Attributes   00000000 (0)\n-64C772 Local Header Offset   0002B68B (177803)\n-64C776 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64C776: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C79F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C7A1   Length              0005 (5)\n-64C7A3   Flags               01 (1) 'Modification'\n-64C7A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C7A8 CENTRAL HEADER #68    02014B50 (33639248)\n-64C7AC Created Zip Spec      14 (20) '2.0'\n-64C7AD Created OS            00 (0) 'MS-DOS'\n-64C7AE Extract Zip Spec      14 (20) '2.0'\n-64C7AF Extract OS            00 (0) 'MS-DOS'\n-64C7B0 General Purpose Flag  0000 (0)\n-64C7B2 Compression Method    0000 (0) 'Stored'\n-64C7B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C7B8 CRC                   00000000 (0)\n-64C7BC Compressed Size       00000000 (0)\n-64C7C0 Uncompressed Size     00000000 (0)\n-64C7C4 Filename Length       0055 (85)\n-64C7C6 Extra Length          0009 (9)\n-64C7C8 Comment Length        0000 (0)\n-64C7CA Disk Start            0000 (0)\n-64C7CC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C7CE Ext File Attributes   00000000 (0)\n-64C7D2 Local Header Offset   0002B6DB (177883)\n-64C7D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64C7D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C82B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C82D   Length              0005 (5)\n-64C82F   Flags               01 (1) 'Modification'\n-64C830   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C834 CENTRAL HEADER #69    02014B50 (33639248)\n-64C838 Created Zip Spec      14 (20) '2.0'\n-64C839 Created OS            00 (0) 'MS-DOS'\n-64C83A Extract Zip Spec      14 (20) '2.0'\n-64C83B Extract OS            00 (0) 'MS-DOS'\n-64C83C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64C83E Compression Method    0000 (0) 'Stored'\n-64C840 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C844 CRC                   C1E5A225 (3253051941)\n-64C848 Compressed Size       0000070B (1803)\n-64C84C Uncompressed Size     0000070B (1803)\n-64C850 Filename Length       006B (107)\n-64C852 Extra Length          0009 (9)\n-64C854 Comment Length        0000 (0)\n-64C856 Disk Start            0000 (0)\n-64C858 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C85A Ext File Attributes   00000000 (0)\n-64C85E Local Header Offset   0002B757 (178007)\n-64C862 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64C862: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C8CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C8CF   Length              0005 (5)\n-64C8D1   Flags               01 (1) 'Modification'\n-64C8D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C8D6 CENTRAL HEADER #70    02014B50 (33639248)\n-64C8DA Created Zip Spec      14 (20) '2.0'\n-64C8DB Created OS            00 (0) 'MS-DOS'\n-64C8DC Extract Zip Spec      14 (20) '2.0'\n-64C8DD Extract OS            00 (0) 'MS-DOS'\n-64C8DE General Purpose Flag  0000 (0)\n-64C8E0 Compression Method    0000 (0) 'Stored'\n-64C8E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C8E6 CRC                   00000000 (0)\n-64C8EA Compressed Size       00000000 (0)\n-64C8EE Uncompressed Size     00000000 (0)\n-64C8F2 Filename Length       0054 (84)\n-64C8F4 Extra Length          0009 (9)\n-64C8F6 Comment Length        0000 (0)\n-64C8F8 Disk Start            0000 (0)\n-64C8FA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C8FC Ext File Attributes   00000000 (0)\n-64C900 Local Header Offset   0002BF04 (179972)\n-64C904 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64C904: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C958 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C95A   Length              0005 (5)\n-64C95C   Flags               01 (1) 'Modification'\n-64C95D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64C961 CENTRAL HEADER #71    02014B50 (33639248)\n-64C965 Created Zip Spec      14 (20) '2.0'\n-64C966 Created OS            00 (0) 'MS-DOS'\n-64C967 Extract Zip Spec      14 (20) '2.0'\n-64C968 Extract OS            00 (0) 'MS-DOS'\n-64C969 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64C96B Compression Method    0000 (0) 'Stored'\n-64C96D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64C971 CRC                   8950733E (2303750974)\n-64C975 Compressed Size       0000064D (1613)\n-64C979 Uncompressed Size     0000064D (1613)\n-64C97D Filename Length       006A (106)\n-64C97F Extra Length          0009 (9)\n-64C981 Comment Length        0000 (0)\n-64C983 Disk Start            0000 (0)\n-64C985 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64C987 Ext File Attributes   00000000 (0)\n-64C98B Local Header Offset   0002BF7F (180095)\n-64C98F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64C98F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64C9F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64C9FB   Length              0005 (5)\n-64C9FD   Flags               01 (1) 'Modification'\n-64C9FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64CA02 CENTRAL HEADER #72    02014B50 (33639248)\n-64CA06 Created Zip Spec      14 (20) '2.0'\n-64CA07 Created OS            00 (0) 'MS-DOS'\n-64CA08 Extract Zip Spec      14 (20) '2.0'\n-64CA09 Extract OS            00 (0) 'MS-DOS'\n-64CA0A General Purpose Flag  0000 (0)\n-64CA0C Compression Method    0000 (0) 'Stored'\n-64CA0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64CA12 CRC                   00000000 (0)\n-64CA16 Compressed Size       00000000 (0)\n-64CA1A Uncompressed Size     00000000 (0)\n-64CA1E Filename Length       0053 (83)\n-64CA20 Extra Length          0009 (9)\n-64CA22 Comment Length        0000 (0)\n-64CA24 Disk Start            0000 (0)\n-64CA26 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64CA28 Ext File Attributes   00000000 (0)\n-64CA2C Local Header Offset   0002C66D (181869)\n-64CA30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64CA30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64CA83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64CA85   Length              0005 (5)\n-64CA87   Flags               01 (1) 'Modification'\n-64CA88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64CA8C CENTRAL HEADER #73    02014B50 (33639248)\n-64CA90 Created Zip Spec      14 (20) '2.0'\n-64CA91 Created OS            00 (0) 'MS-DOS'\n-64CA92 Extract Zip Spec      14 (20) '2.0'\n-64CA93 Extract OS            00 (0) 'MS-DOS'\n-64CA94 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64CA96 Compression Method    0000 (0) 'Stored'\n-64CA98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64CA9C CRC                   A0157ABE (2685762238)\n-64CAA0 Compressed Size       00000643 (1603)\n-64CAA4 Uncompressed Size     00000643 (1603)\n-64CAA8 Filename Length       0069 (105)\n-64CAAA Extra Length          0009 (9)\n-64CAAC Comment Length        0000 (0)\n-64CAAE Disk Start            0000 (0)\n-64CAB0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64CAB2 Ext File Attributes   00000000 (0)\n-64CAB6 Local Header Offset   0002C6E7 (181991)\n-64CABA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64CABA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64CB23 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64CB25   Length              0005 (5)\n-64CB27   Flags               01 (1) 'Modification'\n-64CB28   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64CB2C CENTRAL HEADER #74    02014B50 (33639248)\n-64CB30 Created Zip Spec      14 (20) '2.0'\n-64CB31 Created OS            00 (0) 'MS-DOS'\n-64CB32 Extract Zip Spec      14 (20) '2.0'\n-64CB33 Extract OS            00 (0) 'MS-DOS'\n-64CB34 General Purpose Flag  0000 (0)\n-64CB36 Compression Method    0000 (0) 'Stored'\n-64CB38 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64CB3C CRC                   00000000 (0)\n-64CB40 Compressed Size       00000000 (0)\n-64CB44 Uncompressed Size     00000000 (0)\n-64CB48 Filename Length       002B (43)\n-64CB4A Extra Length          0009 (9)\n-64CB4C Comment Length        0000 (0)\n-64CB4E Disk Start            0000 (0)\n-64CB50 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64CB52 Ext File Attributes   00000000 (0)\n-64CB56 Local Header Offset   0002CDCA (183754)\n-64CB5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64CB5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64CB85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64CB87   Length              0005 (5)\n-64CB89   Flags               01 (1) 'Modification'\n-64CB8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64CB8E CENTRAL HEADER #75    02014B50 (33639248)\n-64CB92 Created Zip Spec      14 (20) '2.0'\n-64CB93 Created OS            00 (0) 'MS-DOS'\n-64CB94 Extract Zip Spec      14 (20) '2.0'\n-64CB95 Extract OS            00 (0) 'MS-DOS'\n-64CB96 General Purpose Flag  0000 (0)\n-64CB98 Compression Method    0000 (0) 'Stored'\n-64CB9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64CB9E CRC                   00000000 (0)\n-64CBA2 Compressed Size       00000000 (0)\n-64CBA6 Uncompressed Size     00000000 (0)\n-64CBAA Filename Length       0032 (50)\n-64CBAC Extra Length          0009 (9)\n-64CBAE Comment Length        0000 (0)\n-64CBB0 Disk Start            0000 (0)\n-64CBB2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64CBB4 Ext File Attributes   00000000 (0)\n-64CBB8 Local Header Offset   0002CE1C (183836)\n-64CBBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64CBBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64CBEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64CBF0   Length              0005 (5)\n-64CBF2   Flags               01 (1) 'Modification'\n-64CBF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64CBF7 CENTRAL HEADER #76    02014B50 (33639248)\n-64CBFB Created Zip Spec      14 (20) '2.0'\n-64CBFC Created OS            00 (0) 'MS-DOS'\n-64CBFD Extract Zip Spec      14 (20) '2.0'\n-64CBFE Extract OS            00 (0) 'MS-DOS'\n-64CBFF General Purpose Flag  0000 (0)\n-64CC01 Compression Method    0000 (0) 'Stored'\n-64CC03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64CC07 CRC                   00000000 (0)\n-64CC0B Compressed Size       00000000 (0)\n-64CC0F Uncompressed Size     00000000 (0)\n-64CC13 Filename Length       0079 (121)\n-64CC15 Extra Length          0009 (9)\n-64CC17 Comment Length        0000 (0)\n-64CC19 Disk Start            0000 (0)\n-64CC1B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64CC1D Ext File Attributes   00000000 (0)\n-64CC21 Local Header Offset   0002CE75 (183925)\n-64CC25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64CC25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64CC9E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64CCA0   Length              0005 (5)\n-64CCA2   Flags               01 (1) 'Modification'\n-64CCA3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64CCA7 CENTRAL HEADER #77    02014B50 (33639248)\n-64CCAB Created Zip Spec      14 (20) '2.0'\n-64CCAC Created OS            00 (0) 'MS-DOS'\n-64CCAD Extract Zip Spec      14 (20) '2.0'\n-64CCAE Extract OS            00 (0) 'MS-DOS'\n-64CCAF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64CCB1 Compression Method    0000 (0) 'Stored'\n-64CCB3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64CCB7 CRC                   164EC61D (374261277)\n-64CCBB Compressed Size       00000B15 (2837)\n-64CCBF Uncompressed Size     00000B15 (2837)\n-64CCC3 Filename Length       008F (143)\n-64CCC5 Extra Length          0009 (9)\n-64CCC7 Comment Length        0000 (0)\n-64CCC9 Disk Start            0000 (0)\n-64CCCB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64CCCD Ext File Attributes   00000000 (0)\n-64CCD1 Local Header Offset   0002CF15 (184085)\n-64CCD5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+65030B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65030D   Length              0005 (5)\n+65030F   Flags               01 (1) 'Modification'\n+650310   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650314 CENTRAL HEADER #66    02014B50 (33639248)\n+650318 Created Zip Spec      14 (20) '2.0'\n+650319 Created OS            00 (0) 'MS-DOS'\n+65031A Extract Zip Spec      14 (20) '2.0'\n+65031B Extract OS            00 (0) 'MS-DOS'\n+65031C General Purpose Flag  0000 (0)\n+65031E Compression Method    0000 (0) 'Stored'\n+650320 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650324 CRC                   00000000 (0)\n+650328 Compressed Size       00000000 (0)\n+65032C Uncompressed Size     00000000 (0)\n+650330 Filename Length       0022 (34)\n+650332 Extra Length          0009 (9)\n+650334 Comment Length        0000 (0)\n+650336 Disk Start            0000 (0)\n+650338 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65033A Ext File Attributes   00000000 (0)\n+65033E Local Header Offset   0002F00A (192522)\n+650342 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650342: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650364 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650366   Length              0005 (5)\n+650368   Flags               01 (1) 'Modification'\n+650369   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65036D CENTRAL HEADER #67    02014B50 (33639248)\n+650371 Created Zip Spec      14 (20) '2.0'\n+650372 Created OS            00 (0) 'MS-DOS'\n+650373 Extract Zip Spec      14 (20) '2.0'\n+650374 Extract OS            00 (0) 'MS-DOS'\n+650375 General Purpose Flag  0000 (0)\n+650377 Compression Method    0000 (0) 'Stored'\n+650379 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65037D CRC                   00000000 (0)\n+650381 Compressed Size       00000000 (0)\n+650385 Uncompressed Size     00000000 (0)\n+650389 Filename Length       0029 (41)\n+65038B Extra Length          0009 (9)\n+65038D Comment Length        0000 (0)\n+65038F Disk Start            0000 (0)\n+650391 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650393 Ext File Attributes   00000000 (0)\n+650397 Local Header Offset   0002F053 (192595)\n+65039B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65039B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6503C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6503C6   Length              0005 (5)\n+6503C8   Flags               01 (1) 'Modification'\n+6503C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6503CD CENTRAL HEADER #68    02014B50 (33639248)\n+6503D1 Created Zip Spec      14 (20) '2.0'\n+6503D2 Created OS            00 (0) 'MS-DOS'\n+6503D3 Extract Zip Spec      14 (20) '2.0'\n+6503D4 Extract OS            00 (0) 'MS-DOS'\n+6503D5 General Purpose Flag  0000 (0)\n+6503D7 Compression Method    0000 (0) 'Stored'\n+6503D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6503DD CRC                   00000000 (0)\n+6503E1 Compressed Size       00000000 (0)\n+6503E5 Uncompressed Size     00000000 (0)\n+6503E9 Filename Length       0055 (85)\n+6503EB Extra Length          0009 (9)\n+6503ED Comment Length        0000 (0)\n+6503EF Disk Start            0000 (0)\n+6503F1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6503F3 Ext File Attributes   00000000 (0)\n+6503F7 Local Header Offset   0002F0A3 (192675)\n+6503FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6503FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650450 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650452   Length              0005 (5)\n+650454   Flags               01 (1) 'Modification'\n+650455   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650459 CENTRAL HEADER #69    02014B50 (33639248)\n+65045D Created Zip Spec      14 (20) '2.0'\n+65045E Created OS            00 (0) 'MS-DOS'\n+65045F Extract Zip Spec      14 (20) '2.0'\n+650460 Extract OS            00 (0) 'MS-DOS'\n+650461 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+650463 Compression Method    0000 (0) 'Stored'\n+650465 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650469 CRC                   C1E5A225 (3253051941)\n+65046D Compressed Size       0000070B (1803)\n+650471 Uncompressed Size     0000070B (1803)\n+650475 Filename Length       006B (107)\n+650477 Extra Length          0009 (9)\n+650479 Comment Length        0000 (0)\n+65047B Disk Start            0000 (0)\n+65047D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65047F Ext File Attributes   00000000 (0)\n+650483 Local Header Offset   0002F11F (192799)\n+650487 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650487: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6504F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6504F4   Length              0005 (5)\n+6504F6   Flags               01 (1) 'Modification'\n+6504F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6504FB CENTRAL HEADER #70    02014B50 (33639248)\n+6504FF Created Zip Spec      14 (20) '2.0'\n+650500 Created OS            00 (0) 'MS-DOS'\n+650501 Extract Zip Spec      14 (20) '2.0'\n+650502 Extract OS            00 (0) 'MS-DOS'\n+650503 General Purpose Flag  0000 (0)\n+650505 Compression Method    0000 (0) 'Stored'\n+650507 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65050B CRC                   00000000 (0)\n+65050F Compressed Size       00000000 (0)\n+650513 Uncompressed Size     00000000 (0)\n+650517 Filename Length       0054 (84)\n+650519 Extra Length          0009 (9)\n+65051B Comment Length        0000 (0)\n+65051D Disk Start            0000 (0)\n+65051F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650521 Ext File Attributes   00000000 (0)\n+650525 Local Header Offset   0002F8CC (194764)\n+650529 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650529: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65057D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65057F   Length              0005 (5)\n+650581   Flags               01 (1) 'Modification'\n+650582   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650586 CENTRAL HEADER #71    02014B50 (33639248)\n+65058A Created Zip Spec      14 (20) '2.0'\n+65058B Created OS            00 (0) 'MS-DOS'\n+65058C Extract Zip Spec      14 (20) '2.0'\n+65058D Extract OS            00 (0) 'MS-DOS'\n+65058E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+650590 Compression Method    0000 (0) 'Stored'\n+650592 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650596 CRC                   8950733E (2303750974)\n+65059A Compressed Size       0000064D (1613)\n+65059E Uncompressed Size     0000064D (1613)\n+6505A2 Filename Length       006A (106)\n+6505A4 Extra Length          0009 (9)\n+6505A6 Comment Length        0000 (0)\n+6505A8 Disk Start            0000 (0)\n+6505AA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6505AC Ext File Attributes   00000000 (0)\n+6505B0 Local Header Offset   0002F947 (194887)\n+6505B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6505B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65061E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650620   Length              0005 (5)\n+650622   Flags               01 (1) 'Modification'\n+650623   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650627 CENTRAL HEADER #72    02014B50 (33639248)\n+65062B Created Zip Spec      14 (20) '2.0'\n+65062C Created OS            00 (0) 'MS-DOS'\n+65062D Extract Zip Spec      14 (20) '2.0'\n+65062E Extract OS            00 (0) 'MS-DOS'\n+65062F General Purpose Flag  0000 (0)\n+650631 Compression Method    0000 (0) 'Stored'\n+650633 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650637 CRC                   00000000 (0)\n+65063B Compressed Size       00000000 (0)\n+65063F Uncompressed Size     00000000 (0)\n+650643 Filename Length       0053 (83)\n+650645 Extra Length          0009 (9)\n+650647 Comment Length        0000 (0)\n+650649 Disk Start            0000 (0)\n+65064B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65064D Ext File Attributes   00000000 (0)\n+650651 Local Header Offset   00030035 (196661)\n+650655 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650655: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6506A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6506AA   Length              0005 (5)\n+6506AC   Flags               01 (1) 'Modification'\n+6506AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6506B1 CENTRAL HEADER #73    02014B50 (33639248)\n+6506B5 Created Zip Spec      14 (20) '2.0'\n+6506B6 Created OS            00 (0) 'MS-DOS'\n+6506B7 Extract Zip Spec      14 (20) '2.0'\n+6506B8 Extract OS            00 (0) 'MS-DOS'\n+6506B9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6506BB Compression Method    0000 (0) 'Stored'\n+6506BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6506C1 CRC                   A0157ABE (2685762238)\n+6506C5 Compressed Size       00000643 (1603)\n+6506C9 Uncompressed Size     00000643 (1603)\n+6506CD Filename Length       0069 (105)\n+6506CF Extra Length          0009 (9)\n+6506D1 Comment Length        0000 (0)\n+6506D3 Disk Start            0000 (0)\n+6506D5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6506D7 Ext File Attributes   00000000 (0)\n+6506DB Local Header Offset   000300AF (196783)\n+6506DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6506DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650748 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65074A   Length              0005 (5)\n+65074C   Flags               01 (1) 'Modification'\n+65074D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650751 CENTRAL HEADER #74    02014B50 (33639248)\n+650755 Created Zip Spec      14 (20) '2.0'\n+650756 Created OS            00 (0) 'MS-DOS'\n+650757 Extract Zip Spec      14 (20) '2.0'\n+650758 Extract OS            00 (0) 'MS-DOS'\n+650759 General Purpose Flag  0000 (0)\n+65075B Compression Method    0000 (0) 'Stored'\n+65075D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650761 CRC                   00000000 (0)\n+650765 Compressed Size       00000000 (0)\n+650769 Uncompressed Size     00000000 (0)\n+65076D Filename Length       002B (43)\n+65076F Extra Length          0009 (9)\n+650771 Comment Length        0000 (0)\n+650773 Disk Start            0000 (0)\n+650775 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650777 Ext File Attributes   00000000 (0)\n+65077B Local Header Offset   00030792 (198546)\n+65077F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65077F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6507AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6507AC   Length              0005 (5)\n+6507AE   Flags               01 (1) 'Modification'\n+6507AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6507B3 CENTRAL HEADER #75    02014B50 (33639248)\n+6507B7 Created Zip Spec      14 (20) '2.0'\n+6507B8 Created OS            00 (0) 'MS-DOS'\n+6507B9 Extract Zip Spec      14 (20) '2.0'\n+6507BA Extract OS            00 (0) 'MS-DOS'\n+6507BB General Purpose Flag  0000 (0)\n+6507BD Compression Method    0000 (0) 'Stored'\n+6507BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6507C3 CRC                   00000000 (0)\n+6507C7 Compressed Size       00000000 (0)\n+6507CB Uncompressed Size     00000000 (0)\n+6507CF Filename Length       0032 (50)\n+6507D1 Extra Length          0009 (9)\n+6507D3 Comment Length        0000 (0)\n+6507D5 Disk Start            0000 (0)\n+6507D7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6507D9 Ext File Attributes   00000000 (0)\n+6507DD Local Header Offset   000307E4 (198628)\n+6507E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6507E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650813 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650815   Length              0005 (5)\n+650817   Flags               01 (1) 'Modification'\n+650818   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65081C CENTRAL HEADER #76    02014B50 (33639248)\n+650820 Created Zip Spec      14 (20) '2.0'\n+650821 Created OS            00 (0) 'MS-DOS'\n+650822 Extract Zip Spec      14 (20) '2.0'\n+650823 Extract OS            00 (0) 'MS-DOS'\n+650824 General Purpose Flag  0000 (0)\n+650826 Compression Method    0000 (0) 'Stored'\n+650828 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65082C CRC                   00000000 (0)\n+650830 Compressed Size       00000000 (0)\n+650834 Uncompressed Size     00000000 (0)\n+650838 Filename Length       0079 (121)\n+65083A Extra Length          0009 (9)\n+65083C Comment Length        0000 (0)\n+65083E Disk Start            0000 (0)\n+650840 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650842 Ext File Attributes   00000000 (0)\n+650846 Local Header Offset   0003083D (198717)\n+65084A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65084A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6508C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6508C5   Length              0005 (5)\n+6508C7   Flags               01 (1) 'Modification'\n+6508C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6508CC CENTRAL HEADER #77    02014B50 (33639248)\n+6508D0 Created Zip Spec      14 (20) '2.0'\n+6508D1 Created OS            00 (0) 'MS-DOS'\n+6508D2 Extract Zip Spec      14 (20) '2.0'\n+6508D3 Extract OS            00 (0) 'MS-DOS'\n+6508D4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6508D6 Compression Method    0000 (0) 'Stored'\n+6508D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6508DC CRC                   164EC61D (374261277)\n+6508E0 Compressed Size       00000B15 (2837)\n+6508E4 Uncompressed Size     00000B15 (2837)\n+6508E8 Filename Length       008F (143)\n+6508EA Extra Length          0009 (9)\n+6508EC Comment Length        0000 (0)\n+6508EE Disk Start            0000 (0)\n+6508F0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6508F2 Ext File Attributes   00000000 (0)\n+6508F6 Local Header Offset   000308DD (198877)\n+6508FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x64CCD5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6508FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64CD64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64CD66   Length              0005 (5)\n-64CD68   Flags               01 (1) 'Modification'\n-64CD69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64CD6D CENTRAL HEADER #78    02014B50 (33639248)\n-64CD71 Created Zip Spec      14 (20) '2.0'\n-64CD72 Created OS            00 (0) 'MS-DOS'\n-64CD73 Extract Zip Spec      14 (20) '2.0'\n-64CD74 Extract OS            00 (0) 'MS-DOS'\n-64CD75 General Purpose Flag  0000 (0)\n-64CD77 Compression Method    0000 (0) 'Stored'\n-64CD79 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64CD7D CRC                   00000000 (0)\n-64CD81 Compressed Size       00000000 (0)\n-64CD85 Uncompressed Size     00000000 (0)\n-64CD89 Filename Length       0023 (35)\n-64CD8B Extra Length          0009 (9)\n-64CD8D Comment Length        0000 (0)\n-64CD8F Disk Start            0000 (0)\n-64CD91 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64CD93 Ext File Attributes   00000000 (0)\n-64CD97 Local Header Offset   0002DAF0 (187120)\n-64CD9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64CD9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64CDBE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64CDC0   Length              0005 (5)\n-64CDC2   Flags               01 (1) 'Modification'\n-64CDC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64CDC7 CENTRAL HEADER #79    02014B50 (33639248)\n-64CDCB Created Zip Spec      14 (20) '2.0'\n-64CDCC Created OS            00 (0) 'MS-DOS'\n-64CDCD Extract Zip Spec      14 (20) '2.0'\n-64CDCE Extract OS            00 (0) 'MS-DOS'\n-64CDCF General Purpose Flag  0000 (0)\n-64CDD1 Compression Method    0000 (0) 'Stored'\n-64CDD3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64CDD7 CRC                   00000000 (0)\n-64CDDB Compressed Size       00000000 (0)\n-64CDDF Uncompressed Size     00000000 (0)\n-64CDE3 Filename Length       002A (42)\n-64CDE5 Extra Length          0009 (9)\n-64CDE7 Comment Length        0000 (0)\n-64CDE9 Disk Start            0000 (0)\n-64CDEB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64CDED Ext File Attributes   00000000 (0)\n-64CDF1 Local Header Offset   0002DB3A (187194)\n-64CDF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64CDF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64CE1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64CE21   Length              0005 (5)\n-64CE23   Flags               01 (1) 'Modification'\n-64CE24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64CE28 CENTRAL HEADER #80    02014B50 (33639248)\n-64CE2C Created Zip Spec      14 (20) '2.0'\n-64CE2D Created OS            00 (0) 'MS-DOS'\n-64CE2E Extract Zip Spec      14 (20) '2.0'\n-64CE2F Extract OS            00 (0) 'MS-DOS'\n-64CE30 General Purpose Flag  0000 (0)\n-64CE32 Compression Method    0000 (0) 'Stored'\n-64CE34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64CE38 CRC                   00000000 (0)\n-64CE3C Compressed Size       00000000 (0)\n-64CE40 Uncompressed Size     00000000 (0)\n-64CE44 Filename Length       0060 (96)\n-64CE46 Extra Length          0009 (9)\n-64CE48 Comment Length        0000 (0)\n-64CE4A Disk Start            0000 (0)\n-64CE4C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64CE4E Ext File Attributes   00000000 (0)\n-64CE52 Local Header Offset   0002DB8B (187275)\n-64CE56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64CE56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64CEB6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64CEB8   Length              0005 (5)\n-64CEBA   Flags               01 (1) 'Modification'\n-64CEBB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64CEBF CENTRAL HEADER #81    02014B50 (33639248)\n-64CEC3 Created Zip Spec      14 (20) '2.0'\n-64CEC4 Created OS            00 (0) 'MS-DOS'\n-64CEC5 Extract Zip Spec      14 (20) '2.0'\n-64CEC6 Extract OS            00 (0) 'MS-DOS'\n-64CEC7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64CEC9 Compression Method    0000 (0) 'Stored'\n-64CECB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64CECF CRC                   A42AA4FE (2754258174)\n-64CED3 Compressed Size       00000C7F (3199)\n-64CED7 Uncompressed Size     00000C7F (3199)\n-64CEDB Filename Length       0076 (118)\n-64CEDD Extra Length          0009 (9)\n-64CEDF Comment Length        0000 (0)\n-64CEE1 Disk Start            0000 (0)\n-64CEE3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64CEE5 Ext File Attributes   00000000 (0)\n-64CEE9 Local Header Offset   0002DC12 (187410)\n-64CEED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64CEED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64CF63 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64CF65   Length              0005 (5)\n-64CF67   Flags               01 (1) 'Modification'\n-64CF68   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64CF6C CENTRAL HEADER #82    02014B50 (33639248)\n-64CF70 Created Zip Spec      14 (20) '2.0'\n-64CF71 Created OS            00 (0) 'MS-DOS'\n-64CF72 Extract Zip Spec      14 (20) '2.0'\n-64CF73 Extract OS            00 (0) 'MS-DOS'\n-64CF74 General Purpose Flag  0000 (0)\n-64CF76 Compression Method    0000 (0) 'Stored'\n-64CF78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64CF7C CRC                   00000000 (0)\n-64CF80 Compressed Size       00000000 (0)\n-64CF84 Uncompressed Size     00000000 (0)\n-64CF88 Filename Length       0025 (37)\n-64CF8A Extra Length          0009 (9)\n-64CF8C Comment Length        0000 (0)\n-64CF8E Disk Start            0000 (0)\n-64CF90 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64CF92 Ext File Attributes   00000000 (0)\n-64CF96 Local Header Offset   0002E93E (190782)\n-64CF9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64CF9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64CFBF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64CFC1   Length              0005 (5)\n-64CFC3   Flags               01 (1) 'Modification'\n-64CFC4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64CFC8 CENTRAL HEADER #83    02014B50 (33639248)\n-64CFCC Created Zip Spec      14 (20) '2.0'\n-64CFCD Created OS            00 (0) 'MS-DOS'\n-64CFCE Extract Zip Spec      14 (20) '2.0'\n-64CFCF Extract OS            00 (0) 'MS-DOS'\n-64CFD0 General Purpose Flag  0000 (0)\n-64CFD2 Compression Method    0000 (0) 'Stored'\n-64CFD4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64CFD8 CRC                   00000000 (0)\n-64CFDC Compressed Size       00000000 (0)\n-64CFE0 Uncompressed Size     00000000 (0)\n-64CFE4 Filename Length       002C (44)\n-64CFE6 Extra Length          0009 (9)\n-64CFE8 Comment Length        0000 (0)\n-64CFEA Disk Start            0000 (0)\n-64CFEC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64CFEE Ext File Attributes   00000000 (0)\n-64CFF2 Local Header Offset   0002E98A (190858)\n-64CFF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64CFF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D022 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D024   Length              0005 (5)\n-64D026   Flags               01 (1) 'Modification'\n-64D027   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D02B CENTRAL HEADER #84    02014B50 (33639248)\n-64D02F Created Zip Spec      14 (20) '2.0'\n-64D030 Created OS            00 (0) 'MS-DOS'\n-64D031 Extract Zip Spec      14 (20) '2.0'\n-64D032 Extract OS            00 (0) 'MS-DOS'\n-64D033 General Purpose Flag  0000 (0)\n-64D035 Compression Method    0000 (0) 'Stored'\n-64D037 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D03B CRC                   00000000 (0)\n-64D03F Compressed Size       00000000 (0)\n-64D043 Uncompressed Size     00000000 (0)\n-64D047 Filename Length       005D (93)\n-64D049 Extra Length          0009 (9)\n-64D04B Comment Length        0000 (0)\n-64D04D Disk Start            0000 (0)\n-64D04F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D051 Ext File Attributes   00000000 (0)\n-64D055 Local Header Offset   0002E9DD (190941)\n-64D059 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D059: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D0B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D0B8   Length              0005 (5)\n-64D0BA   Flags               01 (1) 'Modification'\n-64D0BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D0BF CENTRAL HEADER #85    02014B50 (33639248)\n-64D0C3 Created Zip Spec      14 (20) '2.0'\n-64D0C4 Created OS            00 (0) 'MS-DOS'\n-64D0C5 Extract Zip Spec      14 (20) '2.0'\n-64D0C6 Extract OS            00 (0) 'MS-DOS'\n-64D0C7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64D0C9 Compression Method    0000 (0) 'Stored'\n-64D0CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D0CF CRC                   4F9A1C4F (1335499855)\n-64D0D3 Compressed Size       000009AF (2479)\n-64D0D7 Uncompressed Size     000009AF (2479)\n-64D0DB Filename Length       0073 (115)\n-64D0DD Extra Length          0009 (9)\n-64D0DF Comment Length        0000 (0)\n-64D0E1 Disk Start            0000 (0)\n-64D0E3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D0E5 Ext File Attributes   00000000 (0)\n-64D0E9 Local Header Offset   0002EA61 (191073)\n-64D0ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D0ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D160 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D162   Length              0005 (5)\n-64D164   Flags               01 (1) 'Modification'\n-64D165   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D169 CENTRAL HEADER #86    02014B50 (33639248)\n-64D16D Created Zip Spec      14 (20) '2.0'\n-64D16E Created OS            00 (0) 'MS-DOS'\n-64D16F Extract Zip Spec      14 (20) '2.0'\n-64D170 Extract OS            00 (0) 'MS-DOS'\n-64D171 General Purpose Flag  0000 (0)\n-64D173 Compression Method    0000 (0) 'Stored'\n-64D175 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D179 CRC                   00000000 (0)\n-64D17D Compressed Size       00000000 (0)\n-64D181 Uncompressed Size     00000000 (0)\n-64D185 Filename Length       006A (106)\n-64D187 Extra Length          0009 (9)\n-64D189 Comment Length        0000 (0)\n-64D18B Disk Start            0000 (0)\n-64D18D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D18F Ext File Attributes   00000000 (0)\n-64D193 Local Header Offset   0002F4BA (193722)\n-64D197 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D197: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D201 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D203   Length              0005 (5)\n-64D205   Flags               01 (1) 'Modification'\n-64D206   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D20A CENTRAL HEADER #87    02014B50 (33639248)\n-64D20E Created Zip Spec      14 (20) '2.0'\n-64D20F Created OS            00 (0) 'MS-DOS'\n-64D210 Extract Zip Spec      14 (20) '2.0'\n-64D211 Extract OS            00 (0) 'MS-DOS'\n-64D212 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64D214 Compression Method    0000 (0) 'Stored'\n-64D216 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D21A CRC                   754F4527 (1968129319)\n-64D21E Compressed Size       00001265 (4709)\n-64D222 Uncompressed Size     00001265 (4709)\n-64D226 Filename Length       0080 (128)\n-64D228 Extra Length          0009 (9)\n-64D22A Comment Length        0000 (0)\n-64D22C Disk Start            0000 (0)\n-64D22E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D230 Ext File Attributes   00000000 (0)\n-64D234 Local Header Offset   0002F54B (193867)\n-64D238 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D238: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D2B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D2BA   Length              0005 (5)\n-64D2BC   Flags               01 (1) 'Modification'\n-64D2BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D2C1 CENTRAL HEADER #88    02014B50 (33639248)\n-64D2C5 Created Zip Spec      14 (20) '2.0'\n-64D2C6 Created OS            00 (0) 'MS-DOS'\n-64D2C7 Extract Zip Spec      14 (20) '2.0'\n-64D2C8 Extract OS            00 (0) 'MS-DOS'\n-64D2C9 General Purpose Flag  0000 (0)\n-64D2CB Compression Method    0000 (0) 'Stored'\n-64D2CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D2D1 CRC                   00000000 (0)\n-64D2D5 Compressed Size       00000000 (0)\n-64D2D9 Uncompressed Size     00000000 (0)\n-64D2DD Filename Length       0028 (40)\n-64D2DF Extra Length          0009 (9)\n-64D2E1 Comment Length        0000 (0)\n-64D2E3 Disk Start            0000 (0)\n-64D2E5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D2E7 Ext File Attributes   00000000 (0)\n-64D2EB Local Header Offset   00030867 (198759)\n-64D2EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D2EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D317 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D319   Length              0005 (5)\n-64D31B   Flags               01 (1) 'Modification'\n-64D31C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D320 CENTRAL HEADER #89    02014B50 (33639248)\n-64D324 Created Zip Spec      14 (20) '2.0'\n-64D325 Created OS            00 (0) 'MS-DOS'\n-64D326 Extract Zip Spec      14 (20) '2.0'\n-64D327 Extract OS            00 (0) 'MS-DOS'\n-64D328 General Purpose Flag  0000 (0)\n-64D32A Compression Method    0000 (0) 'Stored'\n-64D32C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D330 CRC                   00000000 (0)\n-64D334 Compressed Size       00000000 (0)\n-64D338 Uncompressed Size     00000000 (0)\n-64D33C Filename Length       002F (47)\n-64D33E Extra Length          0009 (9)\n-64D340 Comment Length        0000 (0)\n-64D342 Disk Start            0000 (0)\n-64D344 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D346 Ext File Attributes   00000000 (0)\n-64D34A Local Header Offset   000308B6 (198838)\n-64D34E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D34E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D37D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D37F   Length              0005 (5)\n-64D381   Flags               01 (1) 'Modification'\n-64D382   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D386 CENTRAL HEADER #90    02014B50 (33639248)\n-64D38A Created Zip Spec      14 (20) '2.0'\n-64D38B Created OS            00 (0) 'MS-DOS'\n-64D38C Extract Zip Spec      14 (20) '2.0'\n-64D38D Extract OS            00 (0) 'MS-DOS'\n-64D38E General Purpose Flag  0000 (0)\n-64D390 Compression Method    0000 (0) 'Stored'\n-64D392 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D396 CRC                   00000000 (0)\n-64D39A Compressed Size       00000000 (0)\n-64D39E Uncompressed Size     00000000 (0)\n-64D3A2 Filename Length       0061 (97)\n-64D3A4 Extra Length          0009 (9)\n-64D3A6 Comment Length        0000 (0)\n-64D3A8 Disk Start            0000 (0)\n-64D3AA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D3AC Ext File Attributes   00000000 (0)\n-64D3B0 Local Header Offset   0003090C (198924)\n-64D3B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D3B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D415 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D417   Length              0005 (5)\n-64D419   Flags               01 (1) 'Modification'\n-64D41A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D41E CENTRAL HEADER #91    02014B50 (33639248)\n-64D422 Created Zip Spec      14 (20) '2.0'\n-64D423 Created OS            00 (0) 'MS-DOS'\n-64D424 Extract Zip Spec      14 (20) '2.0'\n-64D425 Extract OS            00 (0) 'MS-DOS'\n-64D426 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64D428 Compression Method    0000 (0) 'Stored'\n-64D42A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D42E CRC                   FAE26E3E (4209143358)\n-64D432 Compressed Size       00000715 (1813)\n-64D436 Uncompressed Size     00000715 (1813)\n-64D43A Filename Length       0077 (119)\n-64D43C Extra Length          0009 (9)\n-64D43E Comment Length        0000 (0)\n-64D440 Disk Start            0000 (0)\n-64D442 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D444 Ext File Attributes   00000000 (0)\n-64D448 Local Header Offset   00030994 (199060)\n-64D44C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D44C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D4C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D4C5   Length              0005 (5)\n-64D4C7   Flags               01 (1) 'Modification'\n-64D4C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D4CC CENTRAL HEADER #92    02014B50 (33639248)\n-64D4D0 Created Zip Spec      14 (20) '2.0'\n-64D4D1 Created OS            00 (0) 'MS-DOS'\n-64D4D2 Extract Zip Spec      14 (20) '2.0'\n-64D4D3 Extract OS            00 (0) 'MS-DOS'\n-64D4D4 General Purpose Flag  0000 (0)\n-64D4D6 Compression Method    0000 (0) 'Stored'\n-64D4D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D4DC CRC                   00000000 (0)\n-64D4E0 Compressed Size       00000000 (0)\n-64D4E4 Uncompressed Size     00000000 (0)\n-64D4E8 Filename Length       0026 (38)\n-64D4EA Extra Length          0009 (9)\n-64D4EC Comment Length        0000 (0)\n-64D4EE Disk Start            0000 (0)\n-64D4F0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D4F2 Ext File Attributes   00000000 (0)\n-64D4F6 Local Header Offset   00031157 (201047)\n-64D4FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D4FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D520 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D522   Length              0005 (5)\n-64D524   Flags               01 (1) 'Modification'\n-64D525   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D529 CENTRAL HEADER #93    02014B50 (33639248)\n-64D52D Created Zip Spec      14 (20) '2.0'\n-64D52E Created OS            00 (0) 'MS-DOS'\n-64D52F Extract Zip Spec      14 (20) '2.0'\n-64D530 Extract OS            00 (0) 'MS-DOS'\n-64D531 General Purpose Flag  0000 (0)\n-64D533 Compression Method    0000 (0) 'Stored'\n-64D535 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D539 CRC                   00000000 (0)\n-64D53D Compressed Size       00000000 (0)\n-64D541 Uncompressed Size     00000000 (0)\n-64D545 Filename Length       002D (45)\n-64D547 Extra Length          0009 (9)\n-64D549 Comment Length        0000 (0)\n-64D54B Disk Start            0000 (0)\n-64D54D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D54F Ext File Attributes   00000000 (0)\n-64D553 Local Header Offset   000311A4 (201124)\n-64D557 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D557: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D584 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D586   Length              0005 (5)\n-64D588   Flags               01 (1) 'Modification'\n-64D589   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D58D CENTRAL HEADER #94    02014B50 (33639248)\n-64D591 Created Zip Spec      14 (20) '2.0'\n-64D592 Created OS            00 (0) 'MS-DOS'\n-64D593 Extract Zip Spec      14 (20) '2.0'\n-64D594 Extract OS            00 (0) 'MS-DOS'\n-64D595 General Purpose Flag  0000 (0)\n-64D597 Compression Method    0000 (0) 'Stored'\n-64D599 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D59D CRC                   00000000 (0)\n-64D5A1 Compressed Size       00000000 (0)\n-64D5A5 Uncompressed Size     00000000 (0)\n-64D5A9 Filename Length       0064 (100)\n-64D5AB Extra Length          0009 (9)\n-64D5AD Comment Length        0000 (0)\n-64D5AF Disk Start            0000 (0)\n-64D5B1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D5B3 Ext File Attributes   00000000 (0)\n-64D5B7 Local Header Offset   000311F8 (201208)\n-64D5BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D5BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D61F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D621   Length              0005 (5)\n-64D623   Flags               01 (1) 'Modification'\n-64D624   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D628 CENTRAL HEADER #95    02014B50 (33639248)\n-64D62C Created Zip Spec      14 (20) '2.0'\n-64D62D Created OS            00 (0) 'MS-DOS'\n-64D62E Extract Zip Spec      14 (20) '2.0'\n-64D62F Extract OS            00 (0) 'MS-DOS'\n-64D630 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64D632 Compression Method    0000 (0) 'Stored'\n-64D634 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D638 CRC                   FFF8AD9F (4294487455)\n-64D63C Compressed Size       00000868 (2152)\n-64D640 Uncompressed Size     00000868 (2152)\n-64D644 Filename Length       007A (122)\n-64D646 Extra Length          0009 (9)\n-64D648 Comment Length        0000 (0)\n-64D64A Disk Start            0000 (0)\n-64D64C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D64E Ext File Attributes   00000000 (0)\n-64D652 Local Header Offset   00031283 (201347)\n-64D656 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D656: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D6D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D6D2   Length              0005 (5)\n-64D6D4   Flags               01 (1) 'Modification'\n-64D6D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D6D9 CENTRAL HEADER #96    02014B50 (33639248)\n-64D6DD Created Zip Spec      14 (20) '2.0'\n-64D6DE Created OS            00 (0) 'MS-DOS'\n-64D6DF Extract Zip Spec      14 (20) '2.0'\n-64D6E0 Extract OS            00 (0) 'MS-DOS'\n-64D6E1 General Purpose Flag  0000 (0)\n-64D6E3 Compression Method    0000 (0) 'Stored'\n-64D6E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D6E9 CRC                   00000000 (0)\n-64D6ED Compressed Size       00000000 (0)\n-64D6F1 Uncompressed Size     00000000 (0)\n-64D6F5 Filename Length       002F (47)\n-64D6F7 Extra Length          0009 (9)\n-64D6F9 Comment Length        0000 (0)\n-64D6FB Disk Start            0000 (0)\n-64D6FD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D6FF Ext File Attributes   00000000 (0)\n-64D703 Local Header Offset   00031B9C (203676)\n-64D707 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D707: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D736 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D738   Length              0005 (5)\n-64D73A   Flags               01 (1) 'Modification'\n-64D73B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D73F CENTRAL HEADER #97    02014B50 (33639248)\n-64D743 Created Zip Spec      14 (20) '2.0'\n-64D744 Created OS            00 (0) 'MS-DOS'\n-64D745 Extract Zip Spec      14 (20) '2.0'\n-64D746 Extract OS            00 (0) 'MS-DOS'\n-64D747 General Purpose Flag  0000 (0)\n-64D749 Compression Method    0000 (0) 'Stored'\n-64D74B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D74F CRC                   00000000 (0)\n-64D753 Compressed Size       00000000 (0)\n-64D757 Uncompressed Size     00000000 (0)\n-64D75B Filename Length       0036 (54)\n-64D75D Extra Length          0009 (9)\n-64D75F Comment Length        0000 (0)\n-64D761 Disk Start            0000 (0)\n-64D763 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D765 Ext File Attributes   00000000 (0)\n-64D769 Local Header Offset   00031BF2 (203762)\n-64D76D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D76D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D7A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D7A5   Length              0005 (5)\n-64D7A7   Flags               01 (1) 'Modification'\n-64D7A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D7AC CENTRAL HEADER #98    02014B50 (33639248)\n-64D7B0 Created Zip Spec      14 (20) '2.0'\n-64D7B1 Created OS            00 (0) 'MS-DOS'\n-64D7B2 Extract Zip Spec      14 (20) '2.0'\n-64D7B3 Extract OS            00 (0) 'MS-DOS'\n-64D7B4 General Purpose Flag  0000 (0)\n-64D7B6 Compression Method    0000 (0) 'Stored'\n-64D7B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D7BC CRC                   00000000 (0)\n-64D7C0 Compressed Size       00000000 (0)\n-64D7C4 Uncompressed Size     00000000 (0)\n-64D7C8 Filename Length       0078 (120)\n-64D7CA Extra Length          0009 (9)\n-64D7CC Comment Length        0000 (0)\n-64D7CE Disk Start            0000 (0)\n-64D7D0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D7D2 Ext File Attributes   00000000 (0)\n-64D7D6 Local Header Offset   00031C4F (203855)\n-64D7DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D7DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D852 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D854   Length              0005 (5)\n-64D856   Flags               01 (1) 'Modification'\n-64D857   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D85B CENTRAL HEADER #99    02014B50 (33639248)\n-64D85F Created Zip Spec      14 (20) '2.0'\n-64D860 Created OS            00 (0) 'MS-DOS'\n-64D861 Extract Zip Spec      14 (20) '2.0'\n-64D862 Extract OS            00 (0) 'MS-DOS'\n-64D863 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64D865 Compression Method    0000 (0) 'Stored'\n-64D867 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D86B CRC                   896578EC (2305128684)\n-64D86F Compressed Size       00001327 (4903)\n-64D873 Uncompressed Size     00001327 (4903)\n-64D877 Filename Length       008E (142)\n-64D879 Extra Length          0009 (9)\n-64D87B Comment Length        0000 (0)\n-64D87D Disk Start            0000 (0)\n-64D87F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D881 Ext File Attributes   00000000 (0)\n-64D885 Local Header Offset   00031CEE (204014)\n-64D889 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+650989 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65098B   Length              0005 (5)\n+65098D   Flags               01 (1) 'Modification'\n+65098E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650992 CENTRAL HEADER #78    02014B50 (33639248)\n+650996 Created Zip Spec      14 (20) '2.0'\n+650997 Created OS            00 (0) 'MS-DOS'\n+650998 Extract Zip Spec      14 (20) '2.0'\n+650999 Extract OS            00 (0) 'MS-DOS'\n+65099A General Purpose Flag  0000 (0)\n+65099C Compression Method    0000 (0) 'Stored'\n+65099E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6509A2 CRC                   00000000 (0)\n+6509A6 Compressed Size       00000000 (0)\n+6509AA Uncompressed Size     00000000 (0)\n+6509AE Filename Length       0023 (35)\n+6509B0 Extra Length          0009 (9)\n+6509B2 Comment Length        0000 (0)\n+6509B4 Disk Start            0000 (0)\n+6509B6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6509B8 Ext File Attributes   00000000 (0)\n+6509BC Local Header Offset   000314B8 (201912)\n+6509C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6509C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6509E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6509E5   Length              0005 (5)\n+6509E7   Flags               01 (1) 'Modification'\n+6509E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6509EC CENTRAL HEADER #79    02014B50 (33639248)\n+6509F0 Created Zip Spec      14 (20) '2.0'\n+6509F1 Created OS            00 (0) 'MS-DOS'\n+6509F2 Extract Zip Spec      14 (20) '2.0'\n+6509F3 Extract OS            00 (0) 'MS-DOS'\n+6509F4 General Purpose Flag  0000 (0)\n+6509F6 Compression Method    0000 (0) 'Stored'\n+6509F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6509FC CRC                   00000000 (0)\n+650A00 Compressed Size       00000000 (0)\n+650A04 Uncompressed Size     00000000 (0)\n+650A08 Filename Length       002A (42)\n+650A0A Extra Length          0009 (9)\n+650A0C Comment Length        0000 (0)\n+650A0E Disk Start            0000 (0)\n+650A10 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650A12 Ext File Attributes   00000000 (0)\n+650A16 Local Header Offset   00031502 (201986)\n+650A1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650A1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650A44 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650A46   Length              0005 (5)\n+650A48   Flags               01 (1) 'Modification'\n+650A49   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650A4D CENTRAL HEADER #80    02014B50 (33639248)\n+650A51 Created Zip Spec      14 (20) '2.0'\n+650A52 Created OS            00 (0) 'MS-DOS'\n+650A53 Extract Zip Spec      14 (20) '2.0'\n+650A54 Extract OS            00 (0) 'MS-DOS'\n+650A55 General Purpose Flag  0000 (0)\n+650A57 Compression Method    0000 (0) 'Stored'\n+650A59 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650A5D CRC                   00000000 (0)\n+650A61 Compressed Size       00000000 (0)\n+650A65 Uncompressed Size     00000000 (0)\n+650A69 Filename Length       0060 (96)\n+650A6B Extra Length          0009 (9)\n+650A6D Comment Length        0000 (0)\n+650A6F Disk Start            0000 (0)\n+650A71 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650A73 Ext File Attributes   00000000 (0)\n+650A77 Local Header Offset   00031553 (202067)\n+650A7B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650A7B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650ADB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650ADD   Length              0005 (5)\n+650ADF   Flags               01 (1) 'Modification'\n+650AE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650AE4 CENTRAL HEADER #81    02014B50 (33639248)\n+650AE8 Created Zip Spec      14 (20) '2.0'\n+650AE9 Created OS            00 (0) 'MS-DOS'\n+650AEA Extract Zip Spec      14 (20) '2.0'\n+650AEB Extract OS            00 (0) 'MS-DOS'\n+650AEC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+650AEE Compression Method    0000 (0) 'Stored'\n+650AF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650AF4 CRC                   A42AA4FE (2754258174)\n+650AF8 Compressed Size       00000C7F (3199)\n+650AFC Uncompressed Size     00000C7F (3199)\n+650B00 Filename Length       0076 (118)\n+650B02 Extra Length          0009 (9)\n+650B04 Comment Length        0000 (0)\n+650B06 Disk Start            0000 (0)\n+650B08 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650B0A Ext File Attributes   00000000 (0)\n+650B0E Local Header Offset   000315DA (202202)\n+650B12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650B12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650B88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650B8A   Length              0005 (5)\n+650B8C   Flags               01 (1) 'Modification'\n+650B8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650B91 CENTRAL HEADER #82    02014B50 (33639248)\n+650B95 Created Zip Spec      14 (20) '2.0'\n+650B96 Created OS            00 (0) 'MS-DOS'\n+650B97 Extract Zip Spec      14 (20) '2.0'\n+650B98 Extract OS            00 (0) 'MS-DOS'\n+650B99 General Purpose Flag  0000 (0)\n+650B9B Compression Method    0000 (0) 'Stored'\n+650B9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650BA1 CRC                   00000000 (0)\n+650BA5 Compressed Size       00000000 (0)\n+650BA9 Uncompressed Size     00000000 (0)\n+650BAD Filename Length       0025 (37)\n+650BAF Extra Length          0009 (9)\n+650BB1 Comment Length        0000 (0)\n+650BB3 Disk Start            0000 (0)\n+650BB5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650BB7 Ext File Attributes   00000000 (0)\n+650BBB Local Header Offset   00032306 (205574)\n+650BBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650BBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650BE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650BE6   Length              0005 (5)\n+650BE8   Flags               01 (1) 'Modification'\n+650BE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650BED CENTRAL HEADER #83    02014B50 (33639248)\n+650BF1 Created Zip Spec      14 (20) '2.0'\n+650BF2 Created OS            00 (0) 'MS-DOS'\n+650BF3 Extract Zip Spec      14 (20) '2.0'\n+650BF4 Extract OS            00 (0) 'MS-DOS'\n+650BF5 General Purpose Flag  0000 (0)\n+650BF7 Compression Method    0000 (0) 'Stored'\n+650BF9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650BFD CRC                   00000000 (0)\n+650C01 Compressed Size       00000000 (0)\n+650C05 Uncompressed Size     00000000 (0)\n+650C09 Filename Length       002C (44)\n+650C0B Extra Length          0009 (9)\n+650C0D Comment Length        0000 (0)\n+650C0F Disk Start            0000 (0)\n+650C11 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650C13 Ext File Attributes   00000000 (0)\n+650C17 Local Header Offset   00032352 (205650)\n+650C1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650C1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650C47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650C49   Length              0005 (5)\n+650C4B   Flags               01 (1) 'Modification'\n+650C4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650C50 CENTRAL HEADER #84    02014B50 (33639248)\n+650C54 Created Zip Spec      14 (20) '2.0'\n+650C55 Created OS            00 (0) 'MS-DOS'\n+650C56 Extract Zip Spec      14 (20) '2.0'\n+650C57 Extract OS            00 (0) 'MS-DOS'\n+650C58 General Purpose Flag  0000 (0)\n+650C5A Compression Method    0000 (0) 'Stored'\n+650C5C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650C60 CRC                   00000000 (0)\n+650C64 Compressed Size       00000000 (0)\n+650C68 Uncompressed Size     00000000 (0)\n+650C6C Filename Length       005D (93)\n+650C6E Extra Length          0009 (9)\n+650C70 Comment Length        0000 (0)\n+650C72 Disk Start            0000 (0)\n+650C74 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650C76 Ext File Attributes   00000000 (0)\n+650C7A Local Header Offset   000323A5 (205733)\n+650C7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650C7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650CDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650CDD   Length              0005 (5)\n+650CDF   Flags               01 (1) 'Modification'\n+650CE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650CE4 CENTRAL HEADER #85    02014B50 (33639248)\n+650CE8 Created Zip Spec      14 (20) '2.0'\n+650CE9 Created OS            00 (0) 'MS-DOS'\n+650CEA Extract Zip Spec      14 (20) '2.0'\n+650CEB Extract OS            00 (0) 'MS-DOS'\n+650CEC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+650CEE Compression Method    0000 (0) 'Stored'\n+650CF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650CF4 CRC                   4F9A1C4F (1335499855)\n+650CF8 Compressed Size       000009AF (2479)\n+650CFC Uncompressed Size     000009AF (2479)\n+650D00 Filename Length       0073 (115)\n+650D02 Extra Length          0009 (9)\n+650D04 Comment Length        0000 (0)\n+650D06 Disk Start            0000 (0)\n+650D08 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650D0A Ext File Attributes   00000000 (0)\n+650D0E Local Header Offset   00032429 (205865)\n+650D12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650D12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650D85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650D87   Length              0005 (5)\n+650D89   Flags               01 (1) 'Modification'\n+650D8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650D8E CENTRAL HEADER #86    02014B50 (33639248)\n+650D92 Created Zip Spec      14 (20) '2.0'\n+650D93 Created OS            00 (0) 'MS-DOS'\n+650D94 Extract Zip Spec      14 (20) '2.0'\n+650D95 Extract OS            00 (0) 'MS-DOS'\n+650D96 General Purpose Flag  0000 (0)\n+650D98 Compression Method    0000 (0) 'Stored'\n+650D9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650D9E CRC                   00000000 (0)\n+650DA2 Compressed Size       00000000 (0)\n+650DA6 Uncompressed Size     00000000 (0)\n+650DAA Filename Length       006A (106)\n+650DAC Extra Length          0009 (9)\n+650DAE Comment Length        0000 (0)\n+650DB0 Disk Start            0000 (0)\n+650DB2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650DB4 Ext File Attributes   00000000 (0)\n+650DB8 Local Header Offset   00032E82 (208514)\n+650DBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650DBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650E26 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650E28   Length              0005 (5)\n+650E2A   Flags               01 (1) 'Modification'\n+650E2B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650E2F CENTRAL HEADER #87    02014B50 (33639248)\n+650E33 Created Zip Spec      14 (20) '2.0'\n+650E34 Created OS            00 (0) 'MS-DOS'\n+650E35 Extract Zip Spec      14 (20) '2.0'\n+650E36 Extract OS            00 (0) 'MS-DOS'\n+650E37 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+650E39 Compression Method    0000 (0) 'Stored'\n+650E3B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650E3F CRC                   754F4527 (1968129319)\n+650E43 Compressed Size       00001265 (4709)\n+650E47 Uncompressed Size     00001265 (4709)\n+650E4B Filename Length       0080 (128)\n+650E4D Extra Length          0009 (9)\n+650E4F Comment Length        0000 (0)\n+650E51 Disk Start            0000 (0)\n+650E53 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650E55 Ext File Attributes   00000000 (0)\n+650E59 Local Header Offset   00032F13 (208659)\n+650E5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650E5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650EDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650EDF   Length              0005 (5)\n+650EE1   Flags               01 (1) 'Modification'\n+650EE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650EE6 CENTRAL HEADER #88    02014B50 (33639248)\n+650EEA Created Zip Spec      14 (20) '2.0'\n+650EEB Created OS            00 (0) 'MS-DOS'\n+650EEC Extract Zip Spec      14 (20) '2.0'\n+650EED Extract OS            00 (0) 'MS-DOS'\n+650EEE General Purpose Flag  0000 (0)\n+650EF0 Compression Method    0000 (0) 'Stored'\n+650EF2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650EF6 CRC                   00000000 (0)\n+650EFA Compressed Size       00000000 (0)\n+650EFE Uncompressed Size     00000000 (0)\n+650F02 Filename Length       0028 (40)\n+650F04 Extra Length          0009 (9)\n+650F06 Comment Length        0000 (0)\n+650F08 Disk Start            0000 (0)\n+650F0A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650F0C Ext File Attributes   00000000 (0)\n+650F10 Local Header Offset   0003422F (213551)\n+650F14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650F14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650F3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650F3E   Length              0005 (5)\n+650F40   Flags               01 (1) 'Modification'\n+650F41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650F45 CENTRAL HEADER #89    02014B50 (33639248)\n+650F49 Created Zip Spec      14 (20) '2.0'\n+650F4A Created OS            00 (0) 'MS-DOS'\n+650F4B Extract Zip Spec      14 (20) '2.0'\n+650F4C Extract OS            00 (0) 'MS-DOS'\n+650F4D General Purpose Flag  0000 (0)\n+650F4F Compression Method    0000 (0) 'Stored'\n+650F51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650F55 CRC                   00000000 (0)\n+650F59 Compressed Size       00000000 (0)\n+650F5D Uncompressed Size     00000000 (0)\n+650F61 Filename Length       002F (47)\n+650F63 Extra Length          0009 (9)\n+650F65 Comment Length        0000 (0)\n+650F67 Disk Start            0000 (0)\n+650F69 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650F6B Ext File Attributes   00000000 (0)\n+650F6F Local Header Offset   0003427E (213630)\n+650F73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650F73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+650FA2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+650FA4   Length              0005 (5)\n+650FA6   Flags               01 (1) 'Modification'\n+650FA7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+650FAB CENTRAL HEADER #90    02014B50 (33639248)\n+650FAF Created Zip Spec      14 (20) '2.0'\n+650FB0 Created OS            00 (0) 'MS-DOS'\n+650FB1 Extract Zip Spec      14 (20) '2.0'\n+650FB2 Extract OS            00 (0) 'MS-DOS'\n+650FB3 General Purpose Flag  0000 (0)\n+650FB5 Compression Method    0000 (0) 'Stored'\n+650FB7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+650FBB CRC                   00000000 (0)\n+650FBF Compressed Size       00000000 (0)\n+650FC3 Uncompressed Size     00000000 (0)\n+650FC7 Filename Length       0061 (97)\n+650FC9 Extra Length          0009 (9)\n+650FCB Comment Length        0000 (0)\n+650FCD Disk Start            0000 (0)\n+650FCF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+650FD1 Ext File Attributes   00000000 (0)\n+650FD5 Local Header Offset   000342D4 (213716)\n+650FD9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x650FD9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65103A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65103C   Length              0005 (5)\n+65103E   Flags               01 (1) 'Modification'\n+65103F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+651043 CENTRAL HEADER #91    02014B50 (33639248)\n+651047 Created Zip Spec      14 (20) '2.0'\n+651048 Created OS            00 (0) 'MS-DOS'\n+651049 Extract Zip Spec      14 (20) '2.0'\n+65104A Extract OS            00 (0) 'MS-DOS'\n+65104B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65104D Compression Method    0000 (0) 'Stored'\n+65104F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+651053 CRC                   FAE26E3E (4209143358)\n+651057 Compressed Size       00000715 (1813)\n+65105B Uncompressed Size     00000715 (1813)\n+65105F Filename Length       0077 (119)\n+651061 Extra Length          0009 (9)\n+651063 Comment Length        0000 (0)\n+651065 Disk Start            0000 (0)\n+651067 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+651069 Ext File Attributes   00000000 (0)\n+65106D Local Header Offset   0003435C (213852)\n+651071 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x651071: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6510E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6510EA   Length              0005 (5)\n+6510EC   Flags               01 (1) 'Modification'\n+6510ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6510F1 CENTRAL HEADER #92    02014B50 (33639248)\n+6510F5 Created Zip Spec      14 (20) '2.0'\n+6510F6 Created OS            00 (0) 'MS-DOS'\n+6510F7 Extract Zip Spec      14 (20) '2.0'\n+6510F8 Extract OS            00 (0) 'MS-DOS'\n+6510F9 General Purpose Flag  0000 (0)\n+6510FB Compression Method    0000 (0) 'Stored'\n+6510FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+651101 CRC                   00000000 (0)\n+651105 Compressed Size       00000000 (0)\n+651109 Uncompressed Size     00000000 (0)\n+65110D Filename Length       0026 (38)\n+65110F Extra Length          0009 (9)\n+651111 Comment Length        0000 (0)\n+651113 Disk Start            0000 (0)\n+651115 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+651117 Ext File Attributes   00000000 (0)\n+65111B Local Header Offset   00034B1F (215839)\n+65111F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65111F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+651145 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+651147   Length              0005 (5)\n+651149   Flags               01 (1) 'Modification'\n+65114A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65114E CENTRAL HEADER #93    02014B50 (33639248)\n+651152 Created Zip Spec      14 (20) '2.0'\n+651153 Created OS            00 (0) 'MS-DOS'\n+651154 Extract Zip Spec      14 (20) '2.0'\n+651155 Extract OS            00 (0) 'MS-DOS'\n+651156 General Purpose Flag  0000 (0)\n+651158 Compression Method    0000 (0) 'Stored'\n+65115A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65115E CRC                   00000000 (0)\n+651162 Compressed Size       00000000 (0)\n+651166 Uncompressed Size     00000000 (0)\n+65116A Filename Length       002D (45)\n+65116C Extra Length          0009 (9)\n+65116E Comment Length        0000 (0)\n+651170 Disk Start            0000 (0)\n+651172 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+651174 Ext File Attributes   00000000 (0)\n+651178 Local Header Offset   00034B6C (215916)\n+65117C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65117C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6511A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6511AB   Length              0005 (5)\n+6511AD   Flags               01 (1) 'Modification'\n+6511AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6511B2 CENTRAL HEADER #94    02014B50 (33639248)\n+6511B6 Created Zip Spec      14 (20) '2.0'\n+6511B7 Created OS            00 (0) 'MS-DOS'\n+6511B8 Extract Zip Spec      14 (20) '2.0'\n+6511B9 Extract OS            00 (0) 'MS-DOS'\n+6511BA General Purpose Flag  0000 (0)\n+6511BC Compression Method    0000 (0) 'Stored'\n+6511BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6511C2 CRC                   00000000 (0)\n+6511C6 Compressed Size       00000000 (0)\n+6511CA Uncompressed Size     00000000 (0)\n+6511CE Filename Length       0064 (100)\n+6511D0 Extra Length          0009 (9)\n+6511D2 Comment Length        0000 (0)\n+6511D4 Disk Start            0000 (0)\n+6511D6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6511D8 Ext File Attributes   00000000 (0)\n+6511DC Local Header Offset   00034BC0 (216000)\n+6511E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6511E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+651244 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+651246   Length              0005 (5)\n+651248   Flags               01 (1) 'Modification'\n+651249   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65124D CENTRAL HEADER #95    02014B50 (33639248)\n+651251 Created Zip Spec      14 (20) '2.0'\n+651252 Created OS            00 (0) 'MS-DOS'\n+651253 Extract Zip Spec      14 (20) '2.0'\n+651254 Extract OS            00 (0) 'MS-DOS'\n+651255 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+651257 Compression Method    0000 (0) 'Stored'\n+651259 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65125D CRC                   FFF8AD9F (4294487455)\n+651261 Compressed Size       00000868 (2152)\n+651265 Uncompressed Size     00000868 (2152)\n+651269 Filename Length       007A (122)\n+65126B Extra Length          0009 (9)\n+65126D Comment Length        0000 (0)\n+65126F Disk Start            0000 (0)\n+651271 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+651273 Ext File Attributes   00000000 (0)\n+651277 Local Header Offset   00034C4B (216139)\n+65127B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65127B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6512F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6512F7   Length              0005 (5)\n+6512F9   Flags               01 (1) 'Modification'\n+6512FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6512FE CENTRAL HEADER #96    02014B50 (33639248)\n+651302 Created Zip Spec      14 (20) '2.0'\n+651303 Created OS            00 (0) 'MS-DOS'\n+651304 Extract Zip Spec      14 (20) '2.0'\n+651305 Extract OS            00 (0) 'MS-DOS'\n+651306 General Purpose Flag  0000 (0)\n+651308 Compression Method    0000 (0) 'Stored'\n+65130A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65130E CRC                   00000000 (0)\n+651312 Compressed Size       00000000 (0)\n+651316 Uncompressed Size     00000000 (0)\n+65131A Filename Length       002F (47)\n+65131C Extra Length          0009 (9)\n+65131E Comment Length        0000 (0)\n+651320 Disk Start            0000 (0)\n+651322 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+651324 Ext File Attributes   00000000 (0)\n+651328 Local Header Offset   00035564 (218468)\n+65132C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65132C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65135B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65135D   Length              0005 (5)\n+65135F   Flags               01 (1) 'Modification'\n+651360   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+651364 CENTRAL HEADER #97    02014B50 (33639248)\n+651368 Created Zip Spec      14 (20) '2.0'\n+651369 Created OS            00 (0) 'MS-DOS'\n+65136A Extract Zip Spec      14 (20) '2.0'\n+65136B Extract OS            00 (0) 'MS-DOS'\n+65136C General Purpose Flag  0000 (0)\n+65136E Compression Method    0000 (0) 'Stored'\n+651370 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+651374 CRC                   00000000 (0)\n+651378 Compressed Size       00000000 (0)\n+65137C Uncompressed Size     00000000 (0)\n+651380 Filename Length       0036 (54)\n+651382 Extra Length          0009 (9)\n+651384 Comment Length        0000 (0)\n+651386 Disk Start            0000 (0)\n+651388 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65138A Ext File Attributes   00000000 (0)\n+65138E Local Header Offset   000355BA (218554)\n+651392 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x651392: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6513C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6513CA   Length              0005 (5)\n+6513CC   Flags               01 (1) 'Modification'\n+6513CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6513D1 CENTRAL HEADER #98    02014B50 (33639248)\n+6513D5 Created Zip Spec      14 (20) '2.0'\n+6513D6 Created OS            00 (0) 'MS-DOS'\n+6513D7 Extract Zip Spec      14 (20) '2.0'\n+6513D8 Extract OS            00 (0) 'MS-DOS'\n+6513D9 General Purpose Flag  0000 (0)\n+6513DB Compression Method    0000 (0) 'Stored'\n+6513DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6513E1 CRC                   00000000 (0)\n+6513E5 Compressed Size       00000000 (0)\n+6513E9 Uncompressed Size     00000000 (0)\n+6513ED Filename Length       0078 (120)\n+6513EF Extra Length          0009 (9)\n+6513F1 Comment Length        0000 (0)\n+6513F3 Disk Start            0000 (0)\n+6513F5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6513F7 Ext File Attributes   00000000 (0)\n+6513FB Local Header Offset   00035617 (218647)\n+6513FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6513FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+651477 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+651479   Length              0005 (5)\n+65147B   Flags               01 (1) 'Modification'\n+65147C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+651480 CENTRAL HEADER #99    02014B50 (33639248)\n+651484 Created Zip Spec      14 (20) '2.0'\n+651485 Created OS            00 (0) 'MS-DOS'\n+651486 Extract Zip Spec      14 (20) '2.0'\n+651487 Extract OS            00 (0) 'MS-DOS'\n+651488 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65148A Compression Method    0000 (0) 'Stored'\n+65148C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+651490 CRC                   896578EC (2305128684)\n+651494 Compressed Size       00001327 (4903)\n+651498 Uncompressed Size     00001327 (4903)\n+65149C Filename Length       008E (142)\n+65149E Extra Length          0009 (9)\n+6514A0 Comment Length        0000 (0)\n+6514A2 Disk Start            0000 (0)\n+6514A4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6514A6 Ext File Attributes   00000000 (0)\n+6514AA Local Header Offset   000356B6 (218806)\n+6514AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0x64D889: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6514AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64D917 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D919   Length              0005 (5)\n-64D91B   Flags               01 (1) 'Modification'\n-64D91C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D920 CENTRAL HEADER #100   02014B50 (33639248)\n-64D924 Created Zip Spec      14 (20) '2.0'\n-64D925 Created OS            00 (0) 'MS-DOS'\n-64D926 Extract Zip Spec      14 (20) '2.0'\n-64D927 Extract OS            00 (0) 'MS-DOS'\n-64D928 General Purpose Flag  0000 (0)\n-64D92A Compression Method    0000 (0) 'Stored'\n-64D92C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D930 CRC                   00000000 (0)\n-64D934 Compressed Size       00000000 (0)\n-64D938 Uncompressed Size     00000000 (0)\n-64D93C Filename Length       003B (59)\n-64D93E Extra Length          0009 (9)\n-64D940 Comment Length        0000 (0)\n-64D942 Disk Start            0000 (0)\n-64D944 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D946 Ext File Attributes   00000000 (0)\n-64D94A Local Header Offset   000330DA (209114)\n-64D94E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D94E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64D989 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64D98B   Length              0005 (5)\n-64D98D   Flags               01 (1) 'Modification'\n-64D98E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64D992 CENTRAL HEADER #101   02014B50 (33639248)\n-64D996 Created Zip Spec      14 (20) '2.0'\n-64D997 Created OS            00 (0) 'MS-DOS'\n-64D998 Extract Zip Spec      14 (20) '2.0'\n-64D999 Extract OS            00 (0) 'MS-DOS'\n-64D99A General Purpose Flag  0000 (0)\n-64D99C Compression Method    0000 (0) 'Stored'\n-64D99E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64D9A2 CRC                   00000000 (0)\n-64D9A6 Compressed Size       00000000 (0)\n-64D9AA Uncompressed Size     00000000 (0)\n-64D9AE Filename Length       0042 (66)\n-64D9B0 Extra Length          0009 (9)\n-64D9B2 Comment Length        0000 (0)\n-64D9B4 Disk Start            0000 (0)\n-64D9B6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64D9B8 Ext File Attributes   00000000 (0)\n-64D9BC Local Header Offset   0003313C (209212)\n-64D9C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64D9C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64DA02 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64DA04   Length              0005 (5)\n-64DA06   Flags               01 (1) 'Modification'\n-64DA07   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64DA0B CENTRAL HEADER #102   02014B50 (33639248)\n-64DA0F Created Zip Spec      14 (20) '2.0'\n-64DA10 Created OS            00 (0) 'MS-DOS'\n-64DA11 Extract Zip Spec      14 (20) '2.0'\n-64DA12 Extract OS            00 (0) 'MS-DOS'\n-64DA13 General Purpose Flag  0000 (0)\n-64DA15 Compression Method    0000 (0) 'Stored'\n-64DA17 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64DA1B CRC                   00000000 (0)\n-64DA1F Compressed Size       00000000 (0)\n-64DA23 Uncompressed Size     00000000 (0)\n-64DA27 Filename Length       007F (127)\n-64DA29 Extra Length          0009 (9)\n-64DA2B Comment Length        0000 (0)\n-64DA2D Disk Start            0000 (0)\n-64DA2F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64DA31 Ext File Attributes   00000000 (0)\n-64DA35 Local Header Offset   000331A5 (209317)\n-64DA39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64DA39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64DAB8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64DABA   Length              0005 (5)\n-64DABC   Flags               01 (1) 'Modification'\n-64DABD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64DAC1 CENTRAL HEADER #103   02014B50 (33639248)\n-64DAC5 Created Zip Spec      14 (20) '2.0'\n-64DAC6 Created OS            00 (0) 'MS-DOS'\n-64DAC7 Extract Zip Spec      14 (20) '2.0'\n-64DAC8 Extract OS            00 (0) 'MS-DOS'\n-64DAC9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64DACB Compression Method    0000 (0) 'Stored'\n-64DACD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64DAD1 CRC                   64624734 (1684162356)\n-64DAD5 Compressed Size       00000D24 (3364)\n-64DAD9 Uncompressed Size     00000D24 (3364)\n-64DADD Filename Length       0095 (149)\n-64DADF Extra Length          0009 (9)\n-64DAE1 Comment Length        0000 (0)\n-64DAE3 Disk Start            0000 (0)\n-64DAE5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64DAE7 Ext File Attributes   00000000 (0)\n-64DAEB Local Header Offset   0003324B (209483)\n-64DAEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+65153C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65153E   Length              0005 (5)\n+651540   Flags               01 (1) 'Modification'\n+651541   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+651545 CENTRAL HEADER #100   02014B50 (33639248)\n+651549 Created Zip Spec      14 (20) '2.0'\n+65154A Created OS            00 (0) 'MS-DOS'\n+65154B Extract Zip Spec      14 (20) '2.0'\n+65154C Extract OS            00 (0) 'MS-DOS'\n+65154D General Purpose Flag  0000 (0)\n+65154F Compression Method    0000 (0) 'Stored'\n+651551 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+651555 CRC                   00000000 (0)\n+651559 Compressed Size       00000000 (0)\n+65155D Uncompressed Size     00000000 (0)\n+651561 Filename Length       003B (59)\n+651563 Extra Length          0009 (9)\n+651565 Comment Length        0000 (0)\n+651567 Disk Start            0000 (0)\n+651569 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65156B Ext File Attributes   00000000 (0)\n+65156F Local Header Offset   00036AA2 (223906)\n+651573 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x651573: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6515AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6515B0   Length              0005 (5)\n+6515B2   Flags               01 (1) 'Modification'\n+6515B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6515B7 CENTRAL HEADER #101   02014B50 (33639248)\n+6515BB Created Zip Spec      14 (20) '2.0'\n+6515BC Created OS            00 (0) 'MS-DOS'\n+6515BD Extract Zip Spec      14 (20) '2.0'\n+6515BE Extract OS            00 (0) 'MS-DOS'\n+6515BF General Purpose Flag  0000 (0)\n+6515C1 Compression Method    0000 (0) 'Stored'\n+6515C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6515C7 CRC                   00000000 (0)\n+6515CB Compressed Size       00000000 (0)\n+6515CF Uncompressed Size     00000000 (0)\n+6515D3 Filename Length       0042 (66)\n+6515D5 Extra Length          0009 (9)\n+6515D7 Comment Length        0000 (0)\n+6515D9 Disk Start            0000 (0)\n+6515DB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6515DD Ext File Attributes   00000000 (0)\n+6515E1 Local Header Offset   00036B04 (224004)\n+6515E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6515E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+651627 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+651629   Length              0005 (5)\n+65162B   Flags               01 (1) 'Modification'\n+65162C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+651630 CENTRAL HEADER #102   02014B50 (33639248)\n+651634 Created Zip Spec      14 (20) '2.0'\n+651635 Created OS            00 (0) 'MS-DOS'\n+651636 Extract Zip Spec      14 (20) '2.0'\n+651637 Extract OS            00 (0) 'MS-DOS'\n+651638 General Purpose Flag  0000 (0)\n+65163A Compression Method    0000 (0) 'Stored'\n+65163C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+651640 CRC                   00000000 (0)\n+651644 Compressed Size       00000000 (0)\n+651648 Uncompressed Size     00000000 (0)\n+65164C Filename Length       007F (127)\n+65164E Extra Length          0009 (9)\n+651650 Comment Length        0000 (0)\n+651652 Disk Start            0000 (0)\n+651654 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+651656 Ext File Attributes   00000000 (0)\n+65165A Local Header Offset   00036B6D (224109)\n+65165E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65165E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6516DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6516DF   Length              0005 (5)\n+6516E1   Flags               01 (1) 'Modification'\n+6516E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6516E6 CENTRAL HEADER #103   02014B50 (33639248)\n+6516EA Created Zip Spec      14 (20) '2.0'\n+6516EB Created OS            00 (0) 'MS-DOS'\n+6516EC Extract Zip Spec      14 (20) '2.0'\n+6516ED Extract OS            00 (0) 'MS-DOS'\n+6516EE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6516F0 Compression Method    0000 (0) 'Stored'\n+6516F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6516F6 CRC                   64624734 (1684162356)\n+6516FA Compressed Size       00000D24 (3364)\n+6516FE Uncompressed Size     00000D24 (3364)\n+651702 Filename Length       0095 (149)\n+651704 Extra Length          0009 (9)\n+651706 Comment Length        0000 (0)\n+651708 Disk Start            0000 (0)\n+65170A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65170C Ext File Attributes   00000000 (0)\n+651710 Local Header Offset   00036C13 (224275)\n+651714 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x64DAEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x651714: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64DB84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64DB86   Length              0005 (5)\n-64DB88   Flags               01 (1) 'Modification'\n-64DB89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64DB8D CENTRAL HEADER #104   02014B50 (33639248)\n-64DB91 Created Zip Spec      14 (20) '2.0'\n-64DB92 Created OS            00 (0) 'MS-DOS'\n-64DB93 Extract Zip Spec      14 (20) '2.0'\n-64DB94 Extract OS            00 (0) 'MS-DOS'\n-64DB95 General Purpose Flag  0000 (0)\n-64DB97 Compression Method    0000 (0) 'Stored'\n-64DB99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64DB9D CRC                   00000000 (0)\n-64DBA1 Compressed Size       00000000 (0)\n-64DBA5 Uncompressed Size     00000000 (0)\n-64DBA9 Filename Length       007B (123)\n-64DBAB Extra Length          0009 (9)\n-64DBAD Comment Length        0000 (0)\n-64DBAF Disk Start            0000 (0)\n-64DBB1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64DBB3 Ext File Attributes   00000000 (0)\n-64DBB7 Local Header Offset   0003403B (213051)\n-64DBBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64DBBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64DC36 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64DC38   Length              0005 (5)\n-64DC3A   Flags               01 (1) 'Modification'\n-64DC3B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64DC3F CENTRAL HEADER #105   02014B50 (33639248)\n-64DC43 Created Zip Spec      14 (20) '2.0'\n-64DC44 Created OS            00 (0) 'MS-DOS'\n-64DC45 Extract Zip Spec      14 (20) '2.0'\n-64DC46 Extract OS            00 (0) 'MS-DOS'\n-64DC47 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64DC49 Compression Method    0000 (0) 'Stored'\n-64DC4B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64DC4F CRC                   2B6EF697 (728692375)\n-64DC53 Compressed Size       000008CD (2253)\n-64DC57 Uncompressed Size     000008CD (2253)\n-64DC5B Filename Length       0091 (145)\n-64DC5D Extra Length          0009 (9)\n-64DC5F Comment Length        0000 (0)\n-64DC61 Disk Start            0000 (0)\n-64DC63 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64DC65 Ext File Attributes   00000000 (0)\n-64DC69 Local Header Offset   000340DD (213213)\n-64DC6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+6517A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6517AB   Length              0005 (5)\n+6517AD   Flags               01 (1) 'Modification'\n+6517AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6517B2 CENTRAL HEADER #104   02014B50 (33639248)\n+6517B6 Created Zip Spec      14 (20) '2.0'\n+6517B7 Created OS            00 (0) 'MS-DOS'\n+6517B8 Extract Zip Spec      14 (20) '2.0'\n+6517B9 Extract OS            00 (0) 'MS-DOS'\n+6517BA General Purpose Flag  0000 (0)\n+6517BC Compression Method    0000 (0) 'Stored'\n+6517BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6517C2 CRC                   00000000 (0)\n+6517C6 Compressed Size       00000000 (0)\n+6517CA Uncompressed Size     00000000 (0)\n+6517CE Filename Length       007B (123)\n+6517D0 Extra Length          0009 (9)\n+6517D2 Comment Length        0000 (0)\n+6517D4 Disk Start            0000 (0)\n+6517D6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6517D8 Ext File Attributes   00000000 (0)\n+6517DC Local Header Offset   00037A03 (227843)\n+6517E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6517E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65185B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65185D   Length              0005 (5)\n+65185F   Flags               01 (1) 'Modification'\n+651860   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+651864 CENTRAL HEADER #105   02014B50 (33639248)\n+651868 Created Zip Spec      14 (20) '2.0'\n+651869 Created OS            00 (0) 'MS-DOS'\n+65186A Extract Zip Spec      14 (20) '2.0'\n+65186B Extract OS            00 (0) 'MS-DOS'\n+65186C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65186E Compression Method    0000 (0) 'Stored'\n+651870 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+651874 CRC                   2B6EF697 (728692375)\n+651878 Compressed Size       000008CD (2253)\n+65187C Uncompressed Size     000008CD (2253)\n+651880 Filename Length       0091 (145)\n+651882 Extra Length          0009 (9)\n+651884 Comment Length        0000 (0)\n+651886 Disk Start            0000 (0)\n+651888 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65188A Ext File Attributes   00000000 (0)\n+65188E Local Header Offset   00037AA5 (228005)\n+651892 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x64DC6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x651892: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64DCFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64DD00   Length              0005 (5)\n-64DD02   Flags               01 (1) 'Modification'\n-64DD03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64DD07 CENTRAL HEADER #106   02014B50 (33639248)\n-64DD0B Created Zip Spec      14 (20) '2.0'\n-64DD0C Created OS            00 (0) 'MS-DOS'\n-64DD0D Extract Zip Spec      14 (20) '2.0'\n-64DD0E Extract OS            00 (0) 'MS-DOS'\n-64DD0F General Purpose Flag  0000 (0)\n-64DD11 Compression Method    0000 (0) 'Stored'\n-64DD13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64DD17 CRC                   00000000 (0)\n-64DD1B Compressed Size       00000000 (0)\n-64DD1F Uncompressed Size     00000000 (0)\n-64DD23 Filename Length       0034 (52)\n-64DD25 Extra Length          0009 (9)\n-64DD27 Comment Length        0000 (0)\n-64DD29 Disk Start            0000 (0)\n-64DD2B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64DD2D Ext File Attributes   00000000 (0)\n-64DD31 Local Header Offset   00034A72 (215666)\n-64DD35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64DD35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64DD69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64DD6B   Length              0005 (5)\n-64DD6D   Flags               01 (1) 'Modification'\n-64DD6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64DD72 CENTRAL HEADER #107   02014B50 (33639248)\n-64DD76 Created Zip Spec      14 (20) '2.0'\n-64DD77 Created OS            00 (0) 'MS-DOS'\n-64DD78 Extract Zip Spec      14 (20) '2.0'\n-64DD79 Extract OS            00 (0) 'MS-DOS'\n-64DD7A General Purpose Flag  0000 (0)\n-64DD7C Compression Method    0000 (0) 'Stored'\n-64DD7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64DD82 CRC                   00000000 (0)\n-64DD86 Compressed Size       00000000 (0)\n-64DD8A Uncompressed Size     00000000 (0)\n-64DD8E Filename Length       003B (59)\n-64DD90 Extra Length          0009 (9)\n-64DD92 Comment Length        0000 (0)\n-64DD94 Disk Start            0000 (0)\n-64DD96 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64DD98 Ext File Attributes   00000000 (0)\n-64DD9C Local Header Offset   00034ACD (215757)\n-64DDA0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64DDA0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64DDDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64DDDD   Length              0005 (5)\n-64DDDF   Flags               01 (1) 'Modification'\n-64DDE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64DDE4 CENTRAL HEADER #108   02014B50 (33639248)\n-64DDE8 Created Zip Spec      14 (20) '2.0'\n-64DDE9 Created OS            00 (0) 'MS-DOS'\n-64DDEA Extract Zip Spec      14 (20) '2.0'\n-64DDEB Extract OS            00 (0) 'MS-DOS'\n-64DDEC General Purpose Flag  0000 (0)\n-64DDEE Compression Method    0000 (0) 'Stored'\n-64DDF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64DDF4 CRC                   00000000 (0)\n-64DDF8 Compressed Size       00000000 (0)\n-64DDFC Uncompressed Size     00000000 (0)\n-64DE00 Filename Length       0079 (121)\n-64DE02 Extra Length          0009 (9)\n-64DE04 Comment Length        0000 (0)\n-64DE06 Disk Start            0000 (0)\n-64DE08 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64DE0A Ext File Attributes   00000000 (0)\n-64DE0E Local Header Offset   00034B2F (215855)\n-64DE12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64DE12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64DE8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64DE8D   Length              0005 (5)\n-64DE8F   Flags               01 (1) 'Modification'\n-64DE90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64DE94 CENTRAL HEADER #109   02014B50 (33639248)\n-64DE98 Created Zip Spec      14 (20) '2.0'\n-64DE99 Created OS            00 (0) 'MS-DOS'\n-64DE9A Extract Zip Spec      14 (20) '2.0'\n-64DE9B Extract OS            00 (0) 'MS-DOS'\n-64DE9C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64DE9E Compression Method    0000 (0) 'Stored'\n-64DEA0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64DEA4 CRC                   DBC79151 (3687289169)\n-64DEA8 Compressed Size       000013B1 (5041)\n-64DEAC Uncompressed Size     000013B1 (5041)\n-64DEB0 Filename Length       008F (143)\n-64DEB2 Extra Length          0009 (9)\n-64DEB4 Comment Length        0000 (0)\n-64DEB6 Disk Start            0000 (0)\n-64DEB8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64DEBA Ext File Attributes   00000000 (0)\n-64DEBE Local Header Offset   00034BCF (216015)\n-64DEC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+651923 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+651925   Length              0005 (5)\n+651927   Flags               01 (1) 'Modification'\n+651928   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65192C CENTRAL HEADER #106   02014B50 (33639248)\n+651930 Created Zip Spec      14 (20) '2.0'\n+651931 Created OS            00 (0) 'MS-DOS'\n+651932 Extract Zip Spec      14 (20) '2.0'\n+651933 Extract OS            00 (0) 'MS-DOS'\n+651934 General Purpose Flag  0000 (0)\n+651936 Compression Method    0000 (0) 'Stored'\n+651938 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65193C CRC                   00000000 (0)\n+651940 Compressed Size       00000000 (0)\n+651944 Uncompressed Size     00000000 (0)\n+651948 Filename Length       0034 (52)\n+65194A Extra Length          0009 (9)\n+65194C Comment Length        0000 (0)\n+65194E Disk Start            0000 (0)\n+651950 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+651952 Ext File Attributes   00000000 (0)\n+651956 Local Header Offset   0003843A (230458)\n+65195A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65195A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65198E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+651990   Length              0005 (5)\n+651992   Flags               01 (1) 'Modification'\n+651993   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+651997 CENTRAL HEADER #107   02014B50 (33639248)\n+65199B Created Zip Spec      14 (20) '2.0'\n+65199C Created OS            00 (0) 'MS-DOS'\n+65199D Extract Zip Spec      14 (20) '2.0'\n+65199E Extract OS            00 (0) 'MS-DOS'\n+65199F General Purpose Flag  0000 (0)\n+6519A1 Compression Method    0000 (0) 'Stored'\n+6519A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6519A7 CRC                   00000000 (0)\n+6519AB Compressed Size       00000000 (0)\n+6519AF Uncompressed Size     00000000 (0)\n+6519B3 Filename Length       003B (59)\n+6519B5 Extra Length          0009 (9)\n+6519B7 Comment Length        0000 (0)\n+6519B9 Disk Start            0000 (0)\n+6519BB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6519BD Ext File Attributes   00000000 (0)\n+6519C1 Local Header Offset   00038495 (230549)\n+6519C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6519C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+651A00 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+651A02   Length              0005 (5)\n+651A04   Flags               01 (1) 'Modification'\n+651A05   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+651A09 CENTRAL HEADER #108   02014B50 (33639248)\n+651A0D Created Zip Spec      14 (20) '2.0'\n+651A0E Created OS            00 (0) 'MS-DOS'\n+651A0F Extract Zip Spec      14 (20) '2.0'\n+651A10 Extract OS            00 (0) 'MS-DOS'\n+651A11 General Purpose Flag  0000 (0)\n+651A13 Compression Method    0000 (0) 'Stored'\n+651A15 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+651A19 CRC                   00000000 (0)\n+651A1D Compressed Size       00000000 (0)\n+651A21 Uncompressed Size     00000000 (0)\n+651A25 Filename Length       0079 (121)\n+651A27 Extra Length          0009 (9)\n+651A29 Comment Length        0000 (0)\n+651A2B Disk Start            0000 (0)\n+651A2D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+651A2F Ext File Attributes   00000000 (0)\n+651A33 Local Header Offset   000384F7 (230647)\n+651A37 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x651A37: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+651AB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+651AB2   Length              0005 (5)\n+651AB4   Flags               01 (1) 'Modification'\n+651AB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+651AB9 CENTRAL HEADER #109   02014B50 (33639248)\n+651ABD Created Zip Spec      14 (20) '2.0'\n+651ABE Created OS            00 (0) 'MS-DOS'\n+651ABF Extract Zip Spec      14 (20) '2.0'\n+651AC0 Extract OS            00 (0) 'MS-DOS'\n+651AC1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+651AC3 Compression Method    0000 (0) 'Stored'\n+651AC5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+651AC9 CRC                   DBC79151 (3687289169)\n+651ACD Compressed Size       000013B1 (5041)\n+651AD1 Uncompressed Size     000013B1 (5041)\n+651AD5 Filename Length       008F (143)\n+651AD7 Extra Length          0009 (9)\n+651AD9 Comment Length        0000 (0)\n+651ADB Disk Start            0000 (0)\n+651ADD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+651ADF Ext File Attributes   00000000 (0)\n+651AE3 Local Header Offset   00038597 (230807)\n+651AE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x64DEC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x651AE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64DF51 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64DF53   Length              0005 (5)\n-64DF55   Flags               01 (1) 'Modification'\n-64DF56   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64DF5A CENTRAL HEADER #110   02014B50 (33639248)\n-64DF5E Created Zip Spec      14 (20) '2.0'\n-64DF5F Created OS            00 (0) 'MS-DOS'\n-64DF60 Extract Zip Spec      14 (20) '2.0'\n-64DF61 Extract OS            00 (0) 'MS-DOS'\n-64DF62 General Purpose Flag  0000 (0)\n-64DF64 Compression Method    0000 (0) 'Stored'\n-64DF66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64DF6A CRC                   00000000 (0)\n-64DF6E Compressed Size       00000000 (0)\n-64DF72 Uncompressed Size     00000000 (0)\n-64DF76 Filename Length       007F (127)\n-64DF78 Extra Length          0009 (9)\n-64DF7A Comment Length        0000 (0)\n-64DF7C Disk Start            0000 (0)\n-64DF7E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64DF80 Ext File Attributes   00000000 (0)\n-64DF84 Local Header Offset   00036046 (221254)\n-64DF88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64DF88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64E007 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64E009   Length              0005 (5)\n-64E00B   Flags               01 (1) 'Modification'\n-64E00C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64E010 CENTRAL HEADER #111   02014B50 (33639248)\n-64E014 Created Zip Spec      14 (20) '2.0'\n-64E015 Created OS            00 (0) 'MS-DOS'\n-64E016 Extract Zip Spec      14 (20) '2.0'\n-64E017 Extract OS            00 (0) 'MS-DOS'\n-64E018 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64E01A Compression Method    0000 (0) 'Stored'\n-64E01C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64E020 CRC                   9AFFB21B (2600448539)\n-64E024 Compressed Size       0000064E (1614)\n-64E028 Uncompressed Size     0000064E (1614)\n-64E02C Filename Length       0095 (149)\n-64E02E Extra Length          0009 (9)\n-64E030 Comment Length        0000 (0)\n-64E032 Disk Start            0000 (0)\n-64E034 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64E036 Ext File Attributes   00000000 (0)\n-64E03A Local Header Offset   000360EC (221420)\n-64E03E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+651B76 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+651B78   Length              0005 (5)\n+651B7A   Flags               01 (1) 'Modification'\n+651B7B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+651B7F CENTRAL HEADER #110   02014B50 (33639248)\n+651B83 Created Zip Spec      14 (20) '2.0'\n+651B84 Created OS            00 (0) 'MS-DOS'\n+651B85 Extract Zip Spec      14 (20) '2.0'\n+651B86 Extract OS            00 (0) 'MS-DOS'\n+651B87 General Purpose Flag  0000 (0)\n+651B89 Compression Method    0000 (0) 'Stored'\n+651B8B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+651B8F CRC                   00000000 (0)\n+651B93 Compressed Size       00000000 (0)\n+651B97 Uncompressed Size     00000000 (0)\n+651B9B Filename Length       007F (127)\n+651B9D Extra Length          0009 (9)\n+651B9F Comment Length        0000 (0)\n+651BA1 Disk Start            0000 (0)\n+651BA3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+651BA5 Ext File Attributes   00000000 (0)\n+651BA9 Local Header Offset   00039A0E (236046)\n+651BAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x651BAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+651C2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+651C2E   Length              0005 (5)\n+651C30   Flags               01 (1) 'Modification'\n+651C31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+651C35 CENTRAL HEADER #111   02014B50 (33639248)\n+651C39 Created Zip Spec      14 (20) '2.0'\n+651C3A Created OS            00 (0) 'MS-DOS'\n+651C3B Extract Zip Spec      14 (20) '2.0'\n+651C3C Extract OS            00 (0) 'MS-DOS'\n+651C3D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+651C3F Compression Method    0000 (0) 'Stored'\n+651C41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+651C45 CRC                   9AFFB21B (2600448539)\n+651C49 Compressed Size       0000064E (1614)\n+651C4D Uncompressed Size     0000064E (1614)\n+651C51 Filename Length       0095 (149)\n+651C53 Extra Length          0009 (9)\n+651C55 Comment Length        0000 (0)\n+651C57 Disk Start            0000 (0)\n+651C59 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+651C5B Ext File Attributes   00000000 (0)\n+651C5F Local Header Offset   00039AB4 (236212)\n+651C63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x64E03E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x651C63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64E0D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64E0D5   Length              0005 (5)\n-64E0D7   Flags               01 (1) 'Modification'\n-64E0D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64E0DC CENTRAL HEADER #112   02014B50 (33639248)\n-64E0E0 Created Zip Spec      14 (20) '2.0'\n-64E0E1 Created OS            00 (0) 'MS-DOS'\n-64E0E2 Extract Zip Spec      14 (20) '2.0'\n-64E0E3 Extract OS            00 (0) 'MS-DOS'\n-64E0E4 General Purpose Flag  0000 (0)\n-64E0E6 Compression Method    0000 (0) 'Stored'\n-64E0E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64E0EC CRC                   00000000 (0)\n-64E0F0 Compressed Size       00000000 (0)\n-64E0F4 Uncompressed Size     00000000 (0)\n-64E0F8 Filename Length       007B (123)\n-64E0FA Extra Length          0009 (9)\n-64E0FC Comment Length        0000 (0)\n-64E0FE Disk Start            0000 (0)\n-64E100 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64E102 Ext File Attributes   00000000 (0)\n-64E106 Local Header Offset   00036806 (223238)\n-64E10A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64E10A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64E185 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64E187   Length              0005 (5)\n-64E189   Flags               01 (1) 'Modification'\n-64E18A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64E18E CENTRAL HEADER #113   02014B50 (33639248)\n-64E192 Created Zip Spec      14 (20) '2.0'\n-64E193 Created OS            00 (0) 'MS-DOS'\n-64E194 Extract Zip Spec      14 (20) '2.0'\n-64E195 Extract OS            00 (0) 'MS-DOS'\n-64E196 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64E198 Compression Method    0000 (0) 'Stored'\n-64E19A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64E19E CRC                   88CF36AA (2295281322)\n-64E1A2 Compressed Size       00000A4F (2639)\n-64E1A6 Uncompressed Size     00000A4F (2639)\n-64E1AA Filename Length       0091 (145)\n-64E1AC Extra Length          0009 (9)\n-64E1AE Comment Length        0000 (0)\n-64E1B0 Disk Start            0000 (0)\n-64E1B2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64E1B4 Ext File Attributes   00000000 (0)\n-64E1B8 Local Header Offset   000368A8 (223400)\n-64E1BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+651CF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+651CFA   Length              0005 (5)\n+651CFC   Flags               01 (1) 'Modification'\n+651CFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+651D01 CENTRAL HEADER #112   02014B50 (33639248)\n+651D05 Created Zip Spec      14 (20) '2.0'\n+651D06 Created OS            00 (0) 'MS-DOS'\n+651D07 Extract Zip Spec      14 (20) '2.0'\n+651D08 Extract OS            00 (0) 'MS-DOS'\n+651D09 General Purpose Flag  0000 (0)\n+651D0B Compression Method    0000 (0) 'Stored'\n+651D0D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+651D11 CRC                   00000000 (0)\n+651D15 Compressed Size       00000000 (0)\n+651D19 Uncompressed Size     00000000 (0)\n+651D1D Filename Length       007B (123)\n+651D1F Extra Length          0009 (9)\n+651D21 Comment Length        0000 (0)\n+651D23 Disk Start            0000 (0)\n+651D25 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+651D27 Ext File Attributes   00000000 (0)\n+651D2B Local Header Offset   0003A1CE (238030)\n+651D2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x651D2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+651DAA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+651DAC   Length              0005 (5)\n+651DAE   Flags               01 (1) 'Modification'\n+651DAF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+651DB3 CENTRAL HEADER #113   02014B50 (33639248)\n+651DB7 Created Zip Spec      14 (20) '2.0'\n+651DB8 Created OS            00 (0) 'MS-DOS'\n+651DB9 Extract Zip Spec      14 (20) '2.0'\n+651DBA Extract OS            00 (0) 'MS-DOS'\n+651DBB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+651DBD Compression Method    0000 (0) 'Stored'\n+651DBF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+651DC3 CRC                   88CF36AA (2295281322)\n+651DC7 Compressed Size       00000A4F (2639)\n+651DCB Uncompressed Size     00000A4F (2639)\n+651DCF Filename Length       0091 (145)\n+651DD1 Extra Length          0009 (9)\n+651DD3 Comment Length        0000 (0)\n+651DD5 Disk Start            0000 (0)\n+651DD7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+651DD9 Ext File Attributes   00000000 (0)\n+651DDD Local Header Offset   0003A270 (238192)\n+651DE1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x64E1BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x651DE1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64E24D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64E24F   Length              0005 (5)\n-64E251   Flags               01 (1) 'Modification'\n-64E252   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64E256 CENTRAL HEADER #114   02014B50 (33639248)\n-64E25A Created Zip Spec      14 (20) '2.0'\n-64E25B Created OS            00 (0) 'MS-DOS'\n-64E25C Extract Zip Spec      14 (20) '2.0'\n-64E25D Extract OS            00 (0) 'MS-DOS'\n-64E25E General Purpose Flag  0000 (0)\n-64E260 Compression Method    0000 (0) 'Stored'\n-64E262 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64E266 CRC                   00000000 (0)\n-64E26A Compressed Size       00000000 (0)\n-64E26E Uncompressed Size     00000000 (0)\n-64E272 Filename Length       0084 (132)\n-64E274 Extra Length          0009 (9)\n-64E276 Comment Length        0000 (0)\n-64E278 Disk Start            0000 (0)\n-64E27A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64E27C Ext File Attributes   00000000 (0)\n-64E280 Local Header Offset   000373BF (226239)\n-64E284 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+651E72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+651E74   Length              0005 (5)\n+651E76   Flags               01 (1) 'Modification'\n+651E77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+651E7B CENTRAL HEADER #114   02014B50 (33639248)\n+651E7F Created Zip Spec      14 (20) '2.0'\n+651E80 Created OS            00 (0) 'MS-DOS'\n+651E81 Extract Zip Spec      14 (20) '2.0'\n+651E82 Extract OS            00 (0) 'MS-DOS'\n+651E83 General Purpose Flag  0000 (0)\n+651E85 Compression Method    0000 (0) 'Stored'\n+651E87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+651E8B CRC                   00000000 (0)\n+651E8F Compressed Size       00000000 (0)\n+651E93 Uncompressed Size     00000000 (0)\n+651E97 Filename Length       0084 (132)\n+651E99 Extra Length          0009 (9)\n+651E9B Comment Length        0000 (0)\n+651E9D Disk Start            0000 (0)\n+651E9F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+651EA1 Ext File Attributes   00000000 (0)\n+651EA5 Local Header Offset   0003AD87 (241031)\n+651EA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x64E284: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x651EA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64E308 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64E30A   Length              0005 (5)\n-64E30C   Flags               01 (1) 'Modification'\n-64E30D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64E311 CENTRAL HEADER #115   02014B50 (33639248)\n-64E315 Created Zip Spec      14 (20) '2.0'\n-64E316 Created OS            00 (0) 'MS-DOS'\n-64E317 Extract Zip Spec      14 (20) '2.0'\n-64E318 Extract OS            00 (0) 'MS-DOS'\n-64E319 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64E31B Compression Method    0000 (0) 'Stored'\n-64E31D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64E321 CRC                   9593555C (2509460828)\n-64E325 Compressed Size       00000D05 (3333)\n-64E329 Uncompressed Size     00000D05 (3333)\n-64E32D Filename Length       009A (154)\n-64E32F Extra Length          0009 (9)\n-64E331 Comment Length        0000 (0)\n-64E333 Disk Start            0000 (0)\n-64E335 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64E337 Ext File Attributes   00000000 (0)\n-64E33B Local Header Offset   0003746A (226410)\n-64E33F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+651F2D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+651F2F   Length              0005 (5)\n+651F31   Flags               01 (1) 'Modification'\n+651F32   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+651F36 CENTRAL HEADER #115   02014B50 (33639248)\n+651F3A Created Zip Spec      14 (20) '2.0'\n+651F3B Created OS            00 (0) 'MS-DOS'\n+651F3C Extract Zip Spec      14 (20) '2.0'\n+651F3D Extract OS            00 (0) 'MS-DOS'\n+651F3E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+651F40 Compression Method    0000 (0) 'Stored'\n+651F42 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+651F46 CRC                   9593555C (2509460828)\n+651F4A Compressed Size       00000D05 (3333)\n+651F4E Uncompressed Size     00000D05 (3333)\n+651F52 Filename Length       009A (154)\n+651F54 Extra Length          0009 (9)\n+651F56 Comment Length        0000 (0)\n+651F58 Disk Start            0000 (0)\n+651F5A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+651F5C Ext File Attributes   00000000 (0)\n+651F60 Local Header Offset   0003AE32 (241202)\n+651F64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x64E33F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x651F64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64E3D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64E3DB   Length              0005 (5)\n-64E3DD   Flags               01 (1) 'Modification'\n-64E3DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64E3E2 CENTRAL HEADER #116   02014B50 (33639248)\n-64E3E6 Created Zip Spec      14 (20) '2.0'\n-64E3E7 Created OS            00 (0) 'MS-DOS'\n-64E3E8 Extract Zip Spec      14 (20) '2.0'\n-64E3E9 Extract OS            00 (0) 'MS-DOS'\n-64E3EA General Purpose Flag  0000 (0)\n-64E3EC Compression Method    0000 (0) 'Stored'\n-64E3EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64E3F2 CRC                   00000000 (0)\n-64E3F6 Compressed Size       00000000 (0)\n-64E3FA Uncompressed Size     00000000 (0)\n-64E3FE Filename Length       0079 (121)\n-64E400 Extra Length          0009 (9)\n-64E402 Comment Length        0000 (0)\n-64E404 Disk Start            0000 (0)\n-64E406 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64E408 Ext File Attributes   00000000 (0)\n-64E40C Local Header Offset   00038240 (229952)\n-64E410 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64E410: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64E489 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64E48B   Length              0005 (5)\n-64E48D   Flags               01 (1) 'Modification'\n-64E48E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64E492 CENTRAL HEADER #117   02014B50 (33639248)\n-64E496 Created Zip Spec      14 (20) '2.0'\n-64E497 Created OS            00 (0) 'MS-DOS'\n-64E498 Extract Zip Spec      14 (20) '2.0'\n-64E499 Extract OS            00 (0) 'MS-DOS'\n-64E49A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64E49C Compression Method    0000 (0) 'Stored'\n-64E49E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64E4A2 CRC                   9640338D (2520789901)\n-64E4A6 Compressed Size       000013DD (5085)\n-64E4AA Uncompressed Size     000013DD (5085)\n-64E4AE Filename Length       008F (143)\n-64E4B0 Extra Length          0009 (9)\n-64E4B2 Comment Length        0000 (0)\n-64E4B4 Disk Start            0000 (0)\n-64E4B6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64E4B8 Ext File Attributes   00000000 (0)\n-64E4BC Local Header Offset   000382E0 (230112)\n-64E4C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+651FFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652000   Length              0005 (5)\n+652002   Flags               01 (1) 'Modification'\n+652003   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+652007 CENTRAL HEADER #116   02014B50 (33639248)\n+65200B Created Zip Spec      14 (20) '2.0'\n+65200C Created OS            00 (0) 'MS-DOS'\n+65200D Extract Zip Spec      14 (20) '2.0'\n+65200E Extract OS            00 (0) 'MS-DOS'\n+65200F General Purpose Flag  0000 (0)\n+652011 Compression Method    0000 (0) 'Stored'\n+652013 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652017 CRC                   00000000 (0)\n+65201B Compressed Size       00000000 (0)\n+65201F Uncompressed Size     00000000 (0)\n+652023 Filename Length       0079 (121)\n+652025 Extra Length          0009 (9)\n+652027 Comment Length        0000 (0)\n+652029 Disk Start            0000 (0)\n+65202B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65202D Ext File Attributes   00000000 (0)\n+652031 Local Header Offset   0003BC08 (244744)\n+652035 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652035: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6520AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6520B0   Length              0005 (5)\n+6520B2   Flags               01 (1) 'Modification'\n+6520B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6520B7 CENTRAL HEADER #117   02014B50 (33639248)\n+6520BB Created Zip Spec      14 (20) '2.0'\n+6520BC Created OS            00 (0) 'MS-DOS'\n+6520BD Extract Zip Spec      14 (20) '2.0'\n+6520BE Extract OS            00 (0) 'MS-DOS'\n+6520BF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6520C1 Compression Method    0000 (0) 'Stored'\n+6520C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6520C7 CRC                   9640338D (2520789901)\n+6520CB Compressed Size       000013DD (5085)\n+6520CF Uncompressed Size     000013DD (5085)\n+6520D3 Filename Length       008F (143)\n+6520D5 Extra Length          0009 (9)\n+6520D7 Comment Length        0000 (0)\n+6520D9 Disk Start            0000 (0)\n+6520DB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6520DD Ext File Attributes   00000000 (0)\n+6520E1 Local Header Offset   0003BCA8 (244904)\n+6520E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x64E4C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6520E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64E54F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64E551   Length              0005 (5)\n-64E553   Flags               01 (1) 'Modification'\n-64E554   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64E558 CENTRAL HEADER #118   02014B50 (33639248)\n-64E55C Created Zip Spec      14 (20) '2.0'\n-64E55D Created OS            00 (0) 'MS-DOS'\n-64E55E Extract Zip Spec      14 (20) '2.0'\n-64E55F Extract OS            00 (0) 'MS-DOS'\n-64E560 General Purpose Flag  0000 (0)\n-64E562 Compression Method    0000 (0) 'Stored'\n-64E564 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64E568 CRC                   00000000 (0)\n-64E56C Compressed Size       00000000 (0)\n-64E570 Uncompressed Size     00000000 (0)\n-64E574 Filename Length       007B (123)\n-64E576 Extra Length          0009 (9)\n-64E578 Comment Length        0000 (0)\n-64E57A Disk Start            0000 (0)\n-64E57C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64E57E Ext File Attributes   00000000 (0)\n-64E582 Local Header Offset   00039783 (235395)\n-64E586 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64E586: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64E601 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64E603   Length              0005 (5)\n-64E605   Flags               01 (1) 'Modification'\n-64E606   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64E60A CENTRAL HEADER #119   02014B50 (33639248)\n-64E60E Created Zip Spec      14 (20) '2.0'\n-64E60F Created OS            00 (0) 'MS-DOS'\n-64E610 Extract Zip Spec      14 (20) '2.0'\n-64E611 Extract OS            00 (0) 'MS-DOS'\n-64E612 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64E614 Compression Method    0000 (0) 'Stored'\n-64E616 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64E61A CRC                   5232B519 (1379054873)\n-64E61E Compressed Size       00001C1F (7199)\n-64E622 Uncompressed Size     00001C1F (7199)\n-64E626 Filename Length       0091 (145)\n-64E628 Extra Length          0009 (9)\n-64E62A Comment Length        0000 (0)\n-64E62C Disk Start            0000 (0)\n-64E62E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64E630 Ext File Attributes   00000000 (0)\n-64E634 Local Header Offset   00039825 (235557)\n-64E638 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+652174 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652176   Length              0005 (5)\n+652178   Flags               01 (1) 'Modification'\n+652179   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65217D CENTRAL HEADER #118   02014B50 (33639248)\n+652181 Created Zip Spec      14 (20) '2.0'\n+652182 Created OS            00 (0) 'MS-DOS'\n+652183 Extract Zip Spec      14 (20) '2.0'\n+652184 Extract OS            00 (0) 'MS-DOS'\n+652185 General Purpose Flag  0000 (0)\n+652187 Compression Method    0000 (0) 'Stored'\n+652189 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65218D CRC                   00000000 (0)\n+652191 Compressed Size       00000000 (0)\n+652195 Uncompressed Size     00000000 (0)\n+652199 Filename Length       007B (123)\n+65219B Extra Length          0009 (9)\n+65219D Comment Length        0000 (0)\n+65219F Disk Start            0000 (0)\n+6521A1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6521A3 Ext File Attributes   00000000 (0)\n+6521A7 Local Header Offset   0003D14B (250187)\n+6521AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6521AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652226 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652228   Length              0005 (5)\n+65222A   Flags               01 (1) 'Modification'\n+65222B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65222F CENTRAL HEADER #119   02014B50 (33639248)\n+652233 Created Zip Spec      14 (20) '2.0'\n+652234 Created OS            00 (0) 'MS-DOS'\n+652235 Extract Zip Spec      14 (20) '2.0'\n+652236 Extract OS            00 (0) 'MS-DOS'\n+652237 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+652239 Compression Method    0000 (0) 'Stored'\n+65223B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65223F CRC                   5232B519 (1379054873)\n+652243 Compressed Size       00001C1F (7199)\n+652247 Uncompressed Size     00001C1F (7199)\n+65224B Filename Length       0091 (145)\n+65224D Extra Length          0009 (9)\n+65224F Comment Length        0000 (0)\n+652251 Disk Start            0000 (0)\n+652253 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652255 Ext File Attributes   00000000 (0)\n+652259 Local Header Offset   0003D1ED (250349)\n+65225D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x64E638: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x65225D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64E6C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64E6CB   Length              0005 (5)\n-64E6CD   Flags               01 (1) 'Modification'\n-64E6CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64E6D2 CENTRAL HEADER #120   02014B50 (33639248)\n-64E6D6 Created Zip Spec      14 (20) '2.0'\n-64E6D7 Created OS            00 (0) 'MS-DOS'\n-64E6D8 Extract Zip Spec      14 (20) '2.0'\n-64E6D9 Extract OS            00 (0) 'MS-DOS'\n-64E6DA General Purpose Flag  0000 (0)\n-64E6DC Compression Method    0000 (0) 'Stored'\n-64E6DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64E6E2 CRC                   00000000 (0)\n-64E6E6 Compressed Size       00000000 (0)\n-64E6EA Uncompressed Size     00000000 (0)\n-64E6EE Filename Length       0078 (120)\n-64E6F0 Extra Length          0009 (9)\n-64E6F2 Comment Length        0000 (0)\n-64E6F4 Disk Start            0000 (0)\n-64E6F6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64E6F8 Ext File Attributes   00000000 (0)\n-64E6FC Local Header Offset   0003B50C (242956)\n-64E700 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64E700: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64E778 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64E77A   Length              0005 (5)\n-64E77C   Flags               01 (1) 'Modification'\n-64E77D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64E781 CENTRAL HEADER #121   02014B50 (33639248)\n-64E785 Created Zip Spec      14 (20) '2.0'\n-64E786 Created OS            00 (0) 'MS-DOS'\n-64E787 Extract Zip Spec      14 (20) '2.0'\n-64E788 Extract OS            00 (0) 'MS-DOS'\n-64E789 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64E78B Compression Method    0000 (0) 'Stored'\n-64E78D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64E791 CRC                   57267C45 (1462139973)\n-64E795 Compressed Size       000013D6 (5078)\n-64E799 Uncompressed Size     000013D6 (5078)\n-64E79D Filename Length       008E (142)\n-64E79F Extra Length          0009 (9)\n-64E7A1 Comment Length        0000 (0)\n-64E7A3 Disk Start            0000 (0)\n-64E7A5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64E7A7 Ext File Attributes   00000000 (0)\n-64E7AB Local Header Offset   0003B5AB (243115)\n-64E7AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+6522EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6522F0   Length              0005 (5)\n+6522F2   Flags               01 (1) 'Modification'\n+6522F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6522F7 CENTRAL HEADER #120   02014B50 (33639248)\n+6522FB Created Zip Spec      14 (20) '2.0'\n+6522FC Created OS            00 (0) 'MS-DOS'\n+6522FD Extract Zip Spec      14 (20) '2.0'\n+6522FE Extract OS            00 (0) 'MS-DOS'\n+6522FF General Purpose Flag  0000 (0)\n+652301 Compression Method    0000 (0) 'Stored'\n+652303 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652307 CRC                   00000000 (0)\n+65230B Compressed Size       00000000 (0)\n+65230F Uncompressed Size     00000000 (0)\n+652313 Filename Length       0078 (120)\n+652315 Extra Length          0009 (9)\n+652317 Comment Length        0000 (0)\n+652319 Disk Start            0000 (0)\n+65231B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65231D Ext File Attributes   00000000 (0)\n+652321 Local Header Offset   0003EED4 (257748)\n+652325 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652325: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65239D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65239F   Length              0005 (5)\n+6523A1   Flags               01 (1) 'Modification'\n+6523A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6523A6 CENTRAL HEADER #121   02014B50 (33639248)\n+6523AA Created Zip Spec      14 (20) '2.0'\n+6523AB Created OS            00 (0) 'MS-DOS'\n+6523AC Extract Zip Spec      14 (20) '2.0'\n+6523AD Extract OS            00 (0) 'MS-DOS'\n+6523AE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6523B0 Compression Method    0000 (0) 'Stored'\n+6523B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6523B6 CRC                   57267C45 (1462139973)\n+6523BA Compressed Size       000013D6 (5078)\n+6523BE Uncompressed Size     000013D6 (5078)\n+6523C2 Filename Length       008E (142)\n+6523C4 Extra Length          0009 (9)\n+6523C6 Comment Length        0000 (0)\n+6523C8 Disk Start            0000 (0)\n+6523CA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6523CC Ext File Attributes   00000000 (0)\n+6523D0 Local Header Offset   0003EF73 (257907)\n+6523D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0x64E7AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6523D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64E83D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64E83F   Length              0005 (5)\n-64E841   Flags               01 (1) 'Modification'\n-64E842   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64E846 CENTRAL HEADER #122   02014B50 (33639248)\n-64E84A Created Zip Spec      14 (20) '2.0'\n-64E84B Created OS            00 (0) 'MS-DOS'\n-64E84C Extract Zip Spec      14 (20) '2.0'\n-64E84D Extract OS            00 (0) 'MS-DOS'\n-64E84E General Purpose Flag  0000 (0)\n-64E850 Compression Method    0000 (0) 'Stored'\n-64E852 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64E856 CRC                   00000000 (0)\n-64E85A Compressed Size       00000000 (0)\n-64E85E Uncompressed Size     00000000 (0)\n-64E862 Filename Length       007F (127)\n-64E864 Extra Length          0009 (9)\n-64E866 Comment Length        0000 (0)\n-64E868 Disk Start            0000 (0)\n-64E86A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64E86C Ext File Attributes   00000000 (0)\n-64E870 Local Header Offset   0003CA46 (248390)\n-64E874 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64E874: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64E8F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64E8F5   Length              0005 (5)\n-64E8F7   Flags               01 (1) 'Modification'\n-64E8F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64E8FC CENTRAL HEADER #123   02014B50 (33639248)\n-64E900 Created Zip Spec      14 (20) '2.0'\n-64E901 Created OS            00 (0) 'MS-DOS'\n-64E902 Extract Zip Spec      14 (20) '2.0'\n-64E903 Extract OS            00 (0) 'MS-DOS'\n-64E904 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64E906 Compression Method    0000 (0) 'Stored'\n-64E908 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64E90C CRC                   333FC2BB (859816635)\n-64E910 Compressed Size       00000736 (1846)\n-64E914 Uncompressed Size     00000736 (1846)\n-64E918 Filename Length       0095 (149)\n-64E91A Extra Length          0009 (9)\n-64E91C Comment Length        0000 (0)\n-64E91E Disk Start            0000 (0)\n-64E920 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64E922 Ext File Attributes   00000000 (0)\n-64E926 Local Header Offset   0003CAEC (248556)\n-64E92A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+652462 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652464   Length              0005 (5)\n+652466   Flags               01 (1) 'Modification'\n+652467   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65246B CENTRAL HEADER #122   02014B50 (33639248)\n+65246F Created Zip Spec      14 (20) '2.0'\n+652470 Created OS            00 (0) 'MS-DOS'\n+652471 Extract Zip Spec      14 (20) '2.0'\n+652472 Extract OS            00 (0) 'MS-DOS'\n+652473 General Purpose Flag  0000 (0)\n+652475 Compression Method    0000 (0) 'Stored'\n+652477 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65247B CRC                   00000000 (0)\n+65247F Compressed Size       00000000 (0)\n+652483 Uncompressed Size     00000000 (0)\n+652487 Filename Length       007F (127)\n+652489 Extra Length          0009 (9)\n+65248B Comment Length        0000 (0)\n+65248D Disk Start            0000 (0)\n+65248F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652491 Ext File Attributes   00000000 (0)\n+652495 Local Header Offset   0004040E (263182)\n+652499 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652499: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652518 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65251A   Length              0005 (5)\n+65251C   Flags               01 (1) 'Modification'\n+65251D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+652521 CENTRAL HEADER #123   02014B50 (33639248)\n+652525 Created Zip Spec      14 (20) '2.0'\n+652526 Created OS            00 (0) 'MS-DOS'\n+652527 Extract Zip Spec      14 (20) '2.0'\n+652528 Extract OS            00 (0) 'MS-DOS'\n+652529 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65252B Compression Method    0000 (0) 'Stored'\n+65252D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652531 CRC                   333FC2BB (859816635)\n+652535 Compressed Size       00000736 (1846)\n+652539 Uncompressed Size     00000736 (1846)\n+65253D Filename Length       0095 (149)\n+65253F Extra Length          0009 (9)\n+652541 Comment Length        0000 (0)\n+652543 Disk Start            0000 (0)\n+652545 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652547 Ext File Attributes   00000000 (0)\n+65254B Local Header Offset   000404B4 (263348)\n+65254F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x64E92A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x65254F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64E9BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64E9C1   Length              0005 (5)\n-64E9C3   Flags               01 (1) 'Modification'\n-64E9C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64E9C8 CENTRAL HEADER #124   02014B50 (33639248)\n-64E9CC Created Zip Spec      14 (20) '2.0'\n-64E9CD Created OS            00 (0) 'MS-DOS'\n-64E9CE Extract Zip Spec      14 (20) '2.0'\n-64E9CF Extract OS            00 (0) 'MS-DOS'\n-64E9D0 General Purpose Flag  0000 (0)\n-64E9D2 Compression Method    0000 (0) 'Stored'\n-64E9D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64E9D8 CRC                   00000000 (0)\n-64E9DC Compressed Size       00000000 (0)\n-64E9E0 Uncompressed Size     00000000 (0)\n-64E9E4 Filename Length       0024 (36)\n-64E9E6 Extra Length          0009 (9)\n-64E9E8 Comment Length        0000 (0)\n-64E9EA Disk Start            0000 (0)\n-64E9EC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64E9EE Ext File Attributes   00000000 (0)\n-64E9F2 Local Header Offset   0003D2EE (250606)\n-64E9F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64E9F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64EA1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64EA1C   Length              0005 (5)\n-64EA1E   Flags               01 (1) 'Modification'\n-64EA1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64EA23 CENTRAL HEADER #125   02014B50 (33639248)\n-64EA27 Created Zip Spec      14 (20) '2.0'\n-64EA28 Created OS            00 (0) 'MS-DOS'\n-64EA29 Extract Zip Spec      14 (20) '2.0'\n-64EA2A Extract OS            00 (0) 'MS-DOS'\n-64EA2B General Purpose Flag  0000 (0)\n-64EA2D Compression Method    0000 (0) 'Stored'\n-64EA2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64EA33 CRC                   00000000 (0)\n-64EA37 Compressed Size       00000000 (0)\n-64EA3B Uncompressed Size     00000000 (0)\n-64EA3F Filename Length       002B (43)\n-64EA41 Extra Length          0009 (9)\n-64EA43 Comment Length        0000 (0)\n-64EA45 Disk Start            0000 (0)\n-64EA47 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64EA49 Ext File Attributes   00000000 (0)\n-64EA4D Local Header Offset   0003D339 (250681)\n-64EA51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64EA51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64EA7C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64EA7E   Length              0005 (5)\n-64EA80   Flags               01 (1) 'Modification'\n-64EA81   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64EA85 CENTRAL HEADER #126   02014B50 (33639248)\n-64EA89 Created Zip Spec      14 (20) '2.0'\n-64EA8A Created OS            00 (0) 'MS-DOS'\n-64EA8B Extract Zip Spec      14 (20) '2.0'\n-64EA8C Extract OS            00 (0) 'MS-DOS'\n-64EA8D General Purpose Flag  0000 (0)\n-64EA8F Compression Method    0000 (0) 'Stored'\n-64EA91 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64EA95 CRC                   00000000 (0)\n-64EA99 Compressed Size       00000000 (0)\n-64EA9D Uncompressed Size     00000000 (0)\n-64EAA1 Filename Length       0058 (88)\n-64EAA3 Extra Length          0009 (9)\n-64EAA5 Comment Length        0000 (0)\n-64EAA7 Disk Start            0000 (0)\n-64EAA9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64EAAB Ext File Attributes   00000000 (0)\n-64EAAF Local Header Offset   0003D38B (250763)\n-64EAB3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64EAB3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64EB0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64EB0D   Length              0005 (5)\n-64EB0F   Flags               01 (1) 'Modification'\n-64EB10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64EB14 CENTRAL HEADER #127   02014B50 (33639248)\n-64EB18 Created Zip Spec      14 (20) '2.0'\n-64EB19 Created OS            00 (0) 'MS-DOS'\n-64EB1A Extract Zip Spec      14 (20) '2.0'\n-64EB1B Extract OS            00 (0) 'MS-DOS'\n-64EB1C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64EB1E Compression Method    0000 (0) 'Stored'\n-64EB20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64EB24 CRC                   10CC5E74 (281828980)\n-64EB28 Compressed Size       000009CD (2509)\n-64EB2C Uncompressed Size     000009CD (2509)\n-64EB30 Filename Length       006E (110)\n-64EB32 Extra Length          0009 (9)\n-64EB34 Comment Length        0000 (0)\n-64EB36 Disk Start            0000 (0)\n-64EB38 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64EB3A Ext File Attributes   00000000 (0)\n-64EB3E Local Header Offset   0003D40A (250890)\n-64EB42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64EB42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64EBB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64EBB2   Length              0005 (5)\n-64EBB4   Flags               01 (1) 'Modification'\n-64EBB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64EBB9 CENTRAL HEADER #128   02014B50 (33639248)\n-64EBBD Created Zip Spec      14 (20) '2.0'\n-64EBBE Created OS            00 (0) 'MS-DOS'\n-64EBBF Extract Zip Spec      14 (20) '2.0'\n-64EBC0 Extract OS            00 (0) 'MS-DOS'\n-64EBC1 General Purpose Flag  0000 (0)\n-64EBC3 Compression Method    0000 (0) 'Stored'\n-64EBC5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64EBC9 CRC                   00000000 (0)\n-64EBCD Compressed Size       00000000 (0)\n-64EBD1 Uncompressed Size     00000000 (0)\n-64EBD5 Filename Length       0058 (88)\n-64EBD7 Extra Length          0009 (9)\n-64EBD9 Comment Length        0000 (0)\n-64EBDB Disk Start            0000 (0)\n-64EBDD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64EBDF Ext File Attributes   00000000 (0)\n-64EBE3 Local Header Offset   0003DE7C (253564)\n-64EBE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64EBE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64EC3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64EC41   Length              0005 (5)\n-64EC43   Flags               01 (1) 'Modification'\n-64EC44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64EC48 CENTRAL HEADER #129   02014B50 (33639248)\n-64EC4C Created Zip Spec      14 (20) '2.0'\n-64EC4D Created OS            00 (0) 'MS-DOS'\n-64EC4E Extract Zip Spec      14 (20) '2.0'\n-64EC4F Extract OS            00 (0) 'MS-DOS'\n-64EC50 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64EC52 Compression Method    0000 (0) 'Stored'\n-64EC54 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64EC58 CRC                   5F6BF872 (1600911474)\n-64EC5C Compressed Size       000009A0 (2464)\n-64EC60 Uncompressed Size     000009A0 (2464)\n-64EC64 Filename Length       006E (110)\n-64EC66 Extra Length          0009 (9)\n-64EC68 Comment Length        0000 (0)\n-64EC6A Disk Start            0000 (0)\n-64EC6C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64EC6E Ext File Attributes   00000000 (0)\n-64EC72 Local Header Offset   0003DEFB (253691)\n-64EC76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64EC76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64ECE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64ECE6   Length              0005 (5)\n-64ECE8   Flags               01 (1) 'Modification'\n-64ECE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64ECED CENTRAL HEADER #130   02014B50 (33639248)\n-64ECF1 Created Zip Spec      14 (20) '2.0'\n-64ECF2 Created OS            00 (0) 'MS-DOS'\n-64ECF3 Extract Zip Spec      14 (20) '2.0'\n-64ECF4 Extract OS            00 (0) 'MS-DOS'\n-64ECF5 General Purpose Flag  0000 (0)\n-64ECF7 Compression Method    0000 (0) 'Stored'\n-64ECF9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64ECFD CRC                   00000000 (0)\n-64ED01 Compressed Size       00000000 (0)\n-64ED05 Uncompressed Size     00000000 (0)\n-64ED09 Filename Length       0023 (35)\n-64ED0B Extra Length          0009 (9)\n-64ED0D Comment Length        0000 (0)\n-64ED0F Disk Start            0000 (0)\n-64ED11 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64ED13 Ext File Attributes   00000000 (0)\n-64ED17 Local Header Offset   0003E940 (256320)\n-64ED1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64ED1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64ED3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64ED40   Length              0005 (5)\n-64ED42   Flags               01 (1) 'Modification'\n-64ED43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64ED47 CENTRAL HEADER #131   02014B50 (33639248)\n-64ED4B Created Zip Spec      14 (20) '2.0'\n-64ED4C Created OS            00 (0) 'MS-DOS'\n-64ED4D Extract Zip Spec      14 (20) '2.0'\n-64ED4E Extract OS            00 (0) 'MS-DOS'\n-64ED4F General Purpose Flag  0000 (0)\n-64ED51 Compression Method    0000 (0) 'Stored'\n-64ED53 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64ED57 CRC                   00000000 (0)\n-64ED5B Compressed Size       00000000 (0)\n-64ED5F Uncompressed Size     00000000 (0)\n-64ED63 Filename Length       002A (42)\n-64ED65 Extra Length          0009 (9)\n-64ED67 Comment Length        0000 (0)\n-64ED69 Disk Start            0000 (0)\n-64ED6B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64ED6D Ext File Attributes   00000000 (0)\n-64ED71 Local Header Offset   0003E98A (256394)\n-64ED75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64ED75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64ED9F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64EDA1   Length              0005 (5)\n-64EDA3   Flags               01 (1) 'Modification'\n-64EDA4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64EDA8 CENTRAL HEADER #132   02014B50 (33639248)\n-64EDAC Created Zip Spec      14 (20) '2.0'\n-64EDAD Created OS            00 (0) 'MS-DOS'\n-64EDAE Extract Zip Spec      14 (20) '2.0'\n-64EDAF Extract OS            00 (0) 'MS-DOS'\n-64EDB0 General Purpose Flag  0000 (0)\n-64EDB2 Compression Method    0000 (0) 'Stored'\n-64EDB4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64EDB8 CRC                   00000000 (0)\n-64EDBC Compressed Size       00000000 (0)\n-64EDC0 Uncompressed Size     00000000 (0)\n-64EDC4 Filename Length       0054 (84)\n-64EDC6 Extra Length          0009 (9)\n-64EDC8 Comment Length        0000 (0)\n-64EDCA Disk Start            0000 (0)\n-64EDCC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64EDCE Ext File Attributes   00000000 (0)\n-64EDD2 Local Header Offset   0003E9DB (256475)\n-64EDD6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64EDD6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64EE2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64EE2C   Length              0005 (5)\n-64EE2E   Flags               01 (1) 'Modification'\n-64EE2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64EE33 CENTRAL HEADER #133   02014B50 (33639248)\n-64EE37 Created Zip Spec      14 (20) '2.0'\n-64EE38 Created OS            00 (0) 'MS-DOS'\n-64EE39 Extract Zip Spec      14 (20) '2.0'\n-64EE3A Extract OS            00 (0) 'MS-DOS'\n-64EE3B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64EE3D Compression Method    0000 (0) 'Stored'\n-64EE3F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64EE43 CRC                   456B0BC9 (1164643273)\n-64EE47 Compressed Size       00001135 (4405)\n-64EE4B Uncompressed Size     00001135 (4405)\n-64EE4F Filename Length       006A (106)\n-64EE51 Extra Length          0009 (9)\n-64EE53 Comment Length        0000 (0)\n-64EE55 Disk Start            0000 (0)\n-64EE57 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64EE59 Ext File Attributes   00000000 (0)\n-64EE5D Local Header Offset   0003EA56 (256598)\n-64EE61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64EE61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64EECB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64EECD   Length              0005 (5)\n-64EECF   Flags               01 (1) 'Modification'\n-64EED0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64EED4 CENTRAL HEADER #134   02014B50 (33639248)\n-64EED8 Created Zip Spec      14 (20) '2.0'\n-64EED9 Created OS            00 (0) 'MS-DOS'\n-64EEDA Extract Zip Spec      14 (20) '2.0'\n-64EEDB Extract OS            00 (0) 'MS-DOS'\n-64EEDC General Purpose Flag  0000 (0)\n-64EEDE Compression Method    0000 (0) 'Stored'\n-64EEE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64EEE4 CRC                   00000000 (0)\n-64EEE8 Compressed Size       00000000 (0)\n-64EEEC Uncompressed Size     00000000 (0)\n-64EEF0 Filename Length       0022 (34)\n-64EEF2 Extra Length          0009 (9)\n-64EEF4 Comment Length        0000 (0)\n-64EEF6 Disk Start            0000 (0)\n-64EEF8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64EEFA Ext File Attributes   00000000 (0)\n-64EEFE Local Header Offset   0003FC2C (261164)\n-64EF02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64EF02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64EF24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64EF26   Length              0005 (5)\n-64EF28   Flags               01 (1) 'Modification'\n-64EF29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64EF2D CENTRAL HEADER #135   02014B50 (33639248)\n-64EF31 Created Zip Spec      14 (20) '2.0'\n-64EF32 Created OS            00 (0) 'MS-DOS'\n-64EF33 Extract Zip Spec      14 (20) '2.0'\n-64EF34 Extract OS            00 (0) 'MS-DOS'\n-64EF35 General Purpose Flag  0000 (0)\n-64EF37 Compression Method    0000 (0) 'Stored'\n-64EF39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64EF3D CRC                   00000000 (0)\n-64EF41 Compressed Size       00000000 (0)\n-64EF45 Uncompressed Size     00000000 (0)\n-64EF49 Filename Length       0029 (41)\n-64EF4B Extra Length          0009 (9)\n-64EF4D Comment Length        0000 (0)\n-64EF4F Disk Start            0000 (0)\n-64EF51 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64EF53 Ext File Attributes   00000000 (0)\n-64EF57 Local Header Offset   0003FC75 (261237)\n-64EF5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64EF5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64EF84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64EF86   Length              0005 (5)\n-64EF88   Flags               01 (1) 'Modification'\n-64EF89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64EF8D CENTRAL HEADER #136   02014B50 (33639248)\n-64EF91 Created Zip Spec      14 (20) '2.0'\n-64EF92 Created OS            00 (0) 'MS-DOS'\n-64EF93 Extract Zip Spec      14 (20) '2.0'\n-64EF94 Extract OS            00 (0) 'MS-DOS'\n-64EF95 General Purpose Flag  0000 (0)\n-64EF97 Compression Method    0000 (0) 'Stored'\n-64EF99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64EF9D CRC                   00000000 (0)\n-64EFA1 Compressed Size       00000000 (0)\n-64EFA5 Uncompressed Size     00000000 (0)\n-64EFA9 Filename Length       005D (93)\n-64EFAB Extra Length          0009 (9)\n-64EFAD Comment Length        0000 (0)\n-64EFAF Disk Start            0000 (0)\n-64EFB1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64EFB3 Ext File Attributes   00000000 (0)\n-64EFB7 Local Header Offset   0003FCC5 (261317)\n-64EFBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64EFBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64F018 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64F01A   Length              0005 (5)\n-64F01C   Flags               01 (1) 'Modification'\n-64F01D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64F021 CENTRAL HEADER #137   02014B50 (33639248)\n-64F025 Created Zip Spec      14 (20) '2.0'\n-64F026 Created OS            00 (0) 'MS-DOS'\n-64F027 Extract Zip Spec      14 (20) '2.0'\n-64F028 Extract OS            00 (0) 'MS-DOS'\n-64F029 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64F02B Compression Method    0000 (0) 'Stored'\n-64F02D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64F031 CRC                   6A45582D (1782929453)\n-64F035 Compressed Size       000009E0 (2528)\n-64F039 Uncompressed Size     000009E0 (2528)\n-64F03D Filename Length       0073 (115)\n-64F03F Extra Length          0009 (9)\n-64F041 Comment Length        0000 (0)\n-64F043 Disk Start            0000 (0)\n-64F045 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64F047 Ext File Attributes   00000000 (0)\n-64F04B Local Header Offset   0003FD49 (261449)\n-64F04F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64F04F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64F0C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64F0C4   Length              0005 (5)\n-64F0C6   Flags               01 (1) 'Modification'\n-64F0C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64F0CB CENTRAL HEADER #138   02014B50 (33639248)\n-64F0CF Created Zip Spec      14 (20) '2.0'\n-64F0D0 Created OS            00 (0) 'MS-DOS'\n-64F0D1 Extract Zip Spec      14 (20) '2.0'\n-64F0D2 Extract OS            00 (0) 'MS-DOS'\n-64F0D3 General Purpose Flag  0000 (0)\n-64F0D5 Compression Method    0000 (0) 'Stored'\n-64F0D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64F0DB CRC                   00000000 (0)\n-64F0DF Compressed Size       00000000 (0)\n-64F0E3 Uncompressed Size     00000000 (0)\n-64F0E7 Filename Length       005F (95)\n-64F0E9 Extra Length          0009 (9)\n-64F0EB Comment Length        0000 (0)\n-64F0ED Disk Start            0000 (0)\n-64F0EF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64F0F1 Ext File Attributes   00000000 (0)\n-64F0F5 Local Header Offset   000407D3 (264147)\n-64F0F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64F0F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64F158 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64F15A   Length              0005 (5)\n-64F15C   Flags               01 (1) 'Modification'\n-64F15D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64F161 CENTRAL HEADER #139   02014B50 (33639248)\n-64F165 Created Zip Spec      14 (20) '2.0'\n-64F166 Created OS            00 (0) 'MS-DOS'\n-64F167 Extract Zip Spec      14 (20) '2.0'\n-64F168 Extract OS            00 (0) 'MS-DOS'\n-64F169 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64F16B Compression Method    0000 (0) 'Stored'\n-64F16D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64F171 CRC                   4731534C (1194414924)\n-64F175 Compressed Size       00000B90 (2960)\n-64F179 Uncompressed Size     00000B90 (2960)\n-64F17D Filename Length       0075 (117)\n-64F17F Extra Length          0009 (9)\n-64F181 Comment Length        0000 (0)\n-64F183 Disk Start            0000 (0)\n-64F185 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64F187 Ext File Attributes   00000000 (0)\n-64F18B Local Header Offset   00040859 (264281)\n-64F18F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64F18F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64F204 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64F206   Length              0005 (5)\n-64F208   Flags               01 (1) 'Modification'\n-64F209   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64F20D CENTRAL HEADER #140   02014B50 (33639248)\n-64F211 Created Zip Spec      14 (20) '2.0'\n-64F212 Created OS            00 (0) 'MS-DOS'\n-64F213 Extract Zip Spec      14 (20) '2.0'\n-64F214 Extract OS            00 (0) 'MS-DOS'\n-64F215 General Purpose Flag  0000 (0)\n-64F217 Compression Method    0000 (0) 'Stored'\n-64F219 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64F21D CRC                   00000000 (0)\n-64F221 Compressed Size       00000000 (0)\n-64F225 Uncompressed Size     00000000 (0)\n-64F229 Filename Length       005E (94)\n-64F22B Extra Length          0009 (9)\n-64F22D Comment Length        0000 (0)\n-64F22F Disk Start            0000 (0)\n-64F231 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64F233 Ext File Attributes   00000000 (0)\n-64F237 Local Header Offset   00041495 (267413)\n-64F23B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64F23B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64F299 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64F29B   Length              0005 (5)\n-64F29D   Flags               01 (1) 'Modification'\n-64F29E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64F2A2 CENTRAL HEADER #141   02014B50 (33639248)\n-64F2A6 Created Zip Spec      14 (20) '2.0'\n-64F2A7 Created OS            00 (0) 'MS-DOS'\n-64F2A8 Extract Zip Spec      14 (20) '2.0'\n-64F2A9 Extract OS            00 (0) 'MS-DOS'\n-64F2AA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64F2AC Compression Method    0000 (0) 'Stored'\n-64F2AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64F2B2 CRC                   CEBA8B64 (3468331876)\n-64F2B6 Compressed Size       00000A7D (2685)\n-64F2BA Uncompressed Size     00000A7D (2685)\n-64F2BE Filename Length       0074 (116)\n-64F2C0 Extra Length          0009 (9)\n-64F2C2 Comment Length        0000 (0)\n-64F2C4 Disk Start            0000 (0)\n-64F2C6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64F2C8 Ext File Attributes   00000000 (0)\n-64F2CC Local Header Offset   0004151A (267546)\n-64F2D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64F2D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64F344 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64F346   Length              0005 (5)\n-64F348   Flags               01 (1) 'Modification'\n-64F349   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64F34D CENTRAL HEADER #142   02014B50 (33639248)\n-64F351 Created Zip Spec      14 (20) '2.0'\n-64F352 Created OS            00 (0) 'MS-DOS'\n-64F353 Extract Zip Spec      14 (20) '2.0'\n-64F354 Extract OS            00 (0) 'MS-DOS'\n-64F355 General Purpose Flag  0000 (0)\n-64F357 Compression Method    0000 (0) 'Stored'\n-64F359 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64F35D CRC                   00000000 (0)\n-64F361 Compressed Size       00000000 (0)\n-64F365 Uncompressed Size     00000000 (0)\n-64F369 Filename Length       005D (93)\n-64F36B Extra Length          0009 (9)\n-64F36D Comment Length        0000 (0)\n-64F36F Disk Start            0000 (0)\n-64F371 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64F373 Ext File Attributes   00000000 (0)\n-64F377 Local Header Offset   00042042 (270402)\n-64F37B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64F37B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64F3D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64F3DA   Length              0005 (5)\n-64F3DC   Flags               01 (1) 'Modification'\n-64F3DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64F3E1 CENTRAL HEADER #143   02014B50 (33639248)\n-64F3E5 Created Zip Spec      14 (20) '2.0'\n-64F3E6 Created OS            00 (0) 'MS-DOS'\n-64F3E7 Extract Zip Spec      14 (20) '2.0'\n-64F3E8 Extract OS            00 (0) 'MS-DOS'\n-64F3E9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64F3EB Compression Method    0000 (0) 'Stored'\n-64F3ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64F3F1 CRC                   0DACEA84 (229436036)\n-64F3F5 Compressed Size       00000A95 (2709)\n-64F3F9 Uncompressed Size     00000A95 (2709)\n-64F3FD Filename Length       0073 (115)\n-64F3FF Extra Length          0009 (9)\n-64F401 Comment Length        0000 (0)\n-64F403 Disk Start            0000 (0)\n-64F405 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64F407 Ext File Attributes   00000000 (0)\n-64F40B Local Header Offset   000420C6 (270534)\n-64F40F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64F40F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64F482 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64F484   Length              0005 (5)\n-64F486   Flags               01 (1) 'Modification'\n-64F487   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64F48B CENTRAL HEADER #144   02014B50 (33639248)\n-64F48F Created Zip Spec      14 (20) '2.0'\n-64F490 Created OS            00 (0) 'MS-DOS'\n-64F491 Extract Zip Spec      14 (20) '2.0'\n-64F492 Extract OS            00 (0) 'MS-DOS'\n-64F493 General Purpose Flag  0000 (0)\n-64F495 Compression Method    0000 (0) 'Stored'\n-64F497 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64F49B CRC                   00000000 (0)\n-64F49F Compressed Size       00000000 (0)\n-64F4A3 Uncompressed Size     00000000 (0)\n-64F4A7 Filename Length       005E (94)\n-64F4A9 Extra Length          0009 (9)\n-64F4AB Comment Length        0000 (0)\n-64F4AD Disk Start            0000 (0)\n-64F4AF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64F4B1 Ext File Attributes   00000000 (0)\n-64F4B5 Local Header Offset   00042C05 (273413)\n-64F4B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64F4B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64F517 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64F519   Length              0005 (5)\n-64F51B   Flags               01 (1) 'Modification'\n-64F51C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64F520 CENTRAL HEADER #145   02014B50 (33639248)\n-64F524 Created Zip Spec      14 (20) '2.0'\n-64F525 Created OS            00 (0) 'MS-DOS'\n-64F526 Extract Zip Spec      14 (20) '2.0'\n-64F527 Extract OS            00 (0) 'MS-DOS'\n-64F528 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64F52A Compression Method    0000 (0) 'Stored'\n-64F52C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64F530 CRC                   2E84B239 (780448313)\n-64F534 Compressed Size       0000121D (4637)\n-64F538 Uncompressed Size     0000121D (4637)\n-64F53C Filename Length       0074 (116)\n-64F53E Extra Length          0009 (9)\n-64F540 Comment Length        0000 (0)\n-64F542 Disk Start            0000 (0)\n-64F544 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64F546 Ext File Attributes   00000000 (0)\n-64F54A Local Header Offset   00042C8A (273546)\n-64F54E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64F54E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64F5C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64F5C4   Length              0005 (5)\n-64F5C6   Flags               01 (1) 'Modification'\n-64F5C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64F5CB CENTRAL HEADER #146   02014B50 (33639248)\n-64F5CF Created Zip Spec      14 (20) '2.0'\n-64F5D0 Created OS            00 (0) 'MS-DOS'\n-64F5D1 Extract Zip Spec      14 (20) '2.0'\n-64F5D2 Extract OS            00 (0) 'MS-DOS'\n-64F5D3 General Purpose Flag  0000 (0)\n-64F5D5 Compression Method    0000 (0) 'Stored'\n-64F5D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64F5DB CRC                   00000000 (0)\n-64F5DF Compressed Size       00000000 (0)\n-64F5E3 Uncompressed Size     00000000 (0)\n-64F5E7 Filename Length       0078 (120)\n-64F5E9 Extra Length          0009 (9)\n-64F5EB Comment Length        0000 (0)\n-64F5ED Disk Start            0000 (0)\n-64F5EF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64F5F1 Ext File Attributes   00000000 (0)\n-64F5F5 Local Header Offset   00043F52 (278354)\n-64F5F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64F5F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64F671 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64F673   Length              0005 (5)\n-64F675   Flags               01 (1) 'Modification'\n-64F676   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64F67A CENTRAL HEADER #147   02014B50 (33639248)\n-64F67E Created Zip Spec      14 (20) '2.0'\n-64F67F Created OS            00 (0) 'MS-DOS'\n-64F680 Extract Zip Spec      14 (20) '2.0'\n-64F681 Extract OS            00 (0) 'MS-DOS'\n-64F682 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64F684 Compression Method    0000 (0) 'Stored'\n-64F686 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64F68A CRC                   10E7267F (283584127)\n-64F68E Compressed Size       000006FB (1787)\n-64F692 Uncompressed Size     000006FB (1787)\n-64F696 Filename Length       008E (142)\n-64F698 Extra Length          0009 (9)\n-64F69A Comment Length        0000 (0)\n-64F69C Disk Start            0000 (0)\n-64F69E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64F6A0 Ext File Attributes   00000000 (0)\n-64F6A4 Local Header Offset   00043FF1 (278513)\n-64F6A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+6525E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6525E6   Length              0005 (5)\n+6525E8   Flags               01 (1) 'Modification'\n+6525E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6525ED CENTRAL HEADER #124   02014B50 (33639248)\n+6525F1 Created Zip Spec      14 (20) '2.0'\n+6525F2 Created OS            00 (0) 'MS-DOS'\n+6525F3 Extract Zip Spec      14 (20) '2.0'\n+6525F4 Extract OS            00 (0) 'MS-DOS'\n+6525F5 General Purpose Flag  0000 (0)\n+6525F7 Compression Method    0000 (0) 'Stored'\n+6525F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6525FD CRC                   00000000 (0)\n+652601 Compressed Size       00000000 (0)\n+652605 Uncompressed Size     00000000 (0)\n+652609 Filename Length       0024 (36)\n+65260B Extra Length          0009 (9)\n+65260D Comment Length        0000 (0)\n+65260F Disk Start            0000 (0)\n+652611 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652613 Ext File Attributes   00000000 (0)\n+652617 Local Header Offset   00040CB6 (265398)\n+65261B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65261B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65263F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652641   Length              0005 (5)\n+652643   Flags               01 (1) 'Modification'\n+652644   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+652648 CENTRAL HEADER #125   02014B50 (33639248)\n+65264C Created Zip Spec      14 (20) '2.0'\n+65264D Created OS            00 (0) 'MS-DOS'\n+65264E Extract Zip Spec      14 (20) '2.0'\n+65264F Extract OS            00 (0) 'MS-DOS'\n+652650 General Purpose Flag  0000 (0)\n+652652 Compression Method    0000 (0) 'Stored'\n+652654 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652658 CRC                   00000000 (0)\n+65265C Compressed Size       00000000 (0)\n+652660 Uncompressed Size     00000000 (0)\n+652664 Filename Length       002B (43)\n+652666 Extra Length          0009 (9)\n+652668 Comment Length        0000 (0)\n+65266A Disk Start            0000 (0)\n+65266C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65266E Ext File Attributes   00000000 (0)\n+652672 Local Header Offset   00040D01 (265473)\n+652676 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652676: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6526A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6526A3   Length              0005 (5)\n+6526A5   Flags               01 (1) 'Modification'\n+6526A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6526AA CENTRAL HEADER #126   02014B50 (33639248)\n+6526AE Created Zip Spec      14 (20) '2.0'\n+6526AF Created OS            00 (0) 'MS-DOS'\n+6526B0 Extract Zip Spec      14 (20) '2.0'\n+6526B1 Extract OS            00 (0) 'MS-DOS'\n+6526B2 General Purpose Flag  0000 (0)\n+6526B4 Compression Method    0000 (0) 'Stored'\n+6526B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6526BA CRC                   00000000 (0)\n+6526BE Compressed Size       00000000 (0)\n+6526C2 Uncompressed Size     00000000 (0)\n+6526C6 Filename Length       0058 (88)\n+6526C8 Extra Length          0009 (9)\n+6526CA Comment Length        0000 (0)\n+6526CC Disk Start            0000 (0)\n+6526CE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6526D0 Ext File Attributes   00000000 (0)\n+6526D4 Local Header Offset   00040D53 (265555)\n+6526D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6526D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652730 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652732   Length              0005 (5)\n+652734   Flags               01 (1) 'Modification'\n+652735   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+652739 CENTRAL HEADER #127   02014B50 (33639248)\n+65273D Created Zip Spec      14 (20) '2.0'\n+65273E Created OS            00 (0) 'MS-DOS'\n+65273F Extract Zip Spec      14 (20) '2.0'\n+652740 Extract OS            00 (0) 'MS-DOS'\n+652741 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+652743 Compression Method    0000 (0) 'Stored'\n+652745 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652749 CRC                   10CC5E74 (281828980)\n+65274D Compressed Size       000009CD (2509)\n+652751 Uncompressed Size     000009CD (2509)\n+652755 Filename Length       006E (110)\n+652757 Extra Length          0009 (9)\n+652759 Comment Length        0000 (0)\n+65275B Disk Start            0000 (0)\n+65275D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65275F Ext File Attributes   00000000 (0)\n+652763 Local Header Offset   00040DD2 (265682)\n+652767 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652767: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6527D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6527D7   Length              0005 (5)\n+6527D9   Flags               01 (1) 'Modification'\n+6527DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6527DE CENTRAL HEADER #128   02014B50 (33639248)\n+6527E2 Created Zip Spec      14 (20) '2.0'\n+6527E3 Created OS            00 (0) 'MS-DOS'\n+6527E4 Extract Zip Spec      14 (20) '2.0'\n+6527E5 Extract OS            00 (0) 'MS-DOS'\n+6527E6 General Purpose Flag  0000 (0)\n+6527E8 Compression Method    0000 (0) 'Stored'\n+6527EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6527EE CRC                   00000000 (0)\n+6527F2 Compressed Size       00000000 (0)\n+6527F6 Uncompressed Size     00000000 (0)\n+6527FA Filename Length       0058 (88)\n+6527FC Extra Length          0009 (9)\n+6527FE Comment Length        0000 (0)\n+652800 Disk Start            0000 (0)\n+652802 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652804 Ext File Attributes   00000000 (0)\n+652808 Local Header Offset   00041844 (268356)\n+65280C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65280C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652864 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652866   Length              0005 (5)\n+652868   Flags               01 (1) 'Modification'\n+652869   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65286D CENTRAL HEADER #129   02014B50 (33639248)\n+652871 Created Zip Spec      14 (20) '2.0'\n+652872 Created OS            00 (0) 'MS-DOS'\n+652873 Extract Zip Spec      14 (20) '2.0'\n+652874 Extract OS            00 (0) 'MS-DOS'\n+652875 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+652877 Compression Method    0000 (0) 'Stored'\n+652879 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65287D CRC                   5F6BF872 (1600911474)\n+652881 Compressed Size       000009A0 (2464)\n+652885 Uncompressed Size     000009A0 (2464)\n+652889 Filename Length       006E (110)\n+65288B Extra Length          0009 (9)\n+65288D Comment Length        0000 (0)\n+65288F Disk Start            0000 (0)\n+652891 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652893 Ext File Attributes   00000000 (0)\n+652897 Local Header Offset   000418C3 (268483)\n+65289B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65289B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652909 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65290B   Length              0005 (5)\n+65290D   Flags               01 (1) 'Modification'\n+65290E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+652912 CENTRAL HEADER #130   02014B50 (33639248)\n+652916 Created Zip Spec      14 (20) '2.0'\n+652917 Created OS            00 (0) 'MS-DOS'\n+652918 Extract Zip Spec      14 (20) '2.0'\n+652919 Extract OS            00 (0) 'MS-DOS'\n+65291A General Purpose Flag  0000 (0)\n+65291C Compression Method    0000 (0) 'Stored'\n+65291E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652922 CRC                   00000000 (0)\n+652926 Compressed Size       00000000 (0)\n+65292A Uncompressed Size     00000000 (0)\n+65292E Filename Length       0023 (35)\n+652930 Extra Length          0009 (9)\n+652932 Comment Length        0000 (0)\n+652934 Disk Start            0000 (0)\n+652936 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652938 Ext File Attributes   00000000 (0)\n+65293C Local Header Offset   00042308 (271112)\n+652940 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652940: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652963 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652965   Length              0005 (5)\n+652967   Flags               01 (1) 'Modification'\n+652968   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65296C CENTRAL HEADER #131   02014B50 (33639248)\n+652970 Created Zip Spec      14 (20) '2.0'\n+652971 Created OS            00 (0) 'MS-DOS'\n+652972 Extract Zip Spec      14 (20) '2.0'\n+652973 Extract OS            00 (0) 'MS-DOS'\n+652974 General Purpose Flag  0000 (0)\n+652976 Compression Method    0000 (0) 'Stored'\n+652978 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65297C CRC                   00000000 (0)\n+652980 Compressed Size       00000000 (0)\n+652984 Uncompressed Size     00000000 (0)\n+652988 Filename Length       002A (42)\n+65298A Extra Length          0009 (9)\n+65298C Comment Length        0000 (0)\n+65298E Disk Start            0000 (0)\n+652990 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652992 Ext File Attributes   00000000 (0)\n+652996 Local Header Offset   00042352 (271186)\n+65299A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65299A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6529C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6529C6   Length              0005 (5)\n+6529C8   Flags               01 (1) 'Modification'\n+6529C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6529CD CENTRAL HEADER #132   02014B50 (33639248)\n+6529D1 Created Zip Spec      14 (20) '2.0'\n+6529D2 Created OS            00 (0) 'MS-DOS'\n+6529D3 Extract Zip Spec      14 (20) '2.0'\n+6529D4 Extract OS            00 (0) 'MS-DOS'\n+6529D5 General Purpose Flag  0000 (0)\n+6529D7 Compression Method    0000 (0) 'Stored'\n+6529D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6529DD CRC                   00000000 (0)\n+6529E1 Compressed Size       00000000 (0)\n+6529E5 Uncompressed Size     00000000 (0)\n+6529E9 Filename Length       0054 (84)\n+6529EB Extra Length          0009 (9)\n+6529ED Comment Length        0000 (0)\n+6529EF Disk Start            0000 (0)\n+6529F1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6529F3 Ext File Attributes   00000000 (0)\n+6529F7 Local Header Offset   000423A3 (271267)\n+6529FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6529FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652A4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652A51   Length              0005 (5)\n+652A53   Flags               01 (1) 'Modification'\n+652A54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+652A58 CENTRAL HEADER #133   02014B50 (33639248)\n+652A5C Created Zip Spec      14 (20) '2.0'\n+652A5D Created OS            00 (0) 'MS-DOS'\n+652A5E Extract Zip Spec      14 (20) '2.0'\n+652A5F Extract OS            00 (0) 'MS-DOS'\n+652A60 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+652A62 Compression Method    0000 (0) 'Stored'\n+652A64 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652A68 CRC                   456B0BC9 (1164643273)\n+652A6C Compressed Size       00001135 (4405)\n+652A70 Uncompressed Size     00001135 (4405)\n+652A74 Filename Length       006A (106)\n+652A76 Extra Length          0009 (9)\n+652A78 Comment Length        0000 (0)\n+652A7A Disk Start            0000 (0)\n+652A7C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652A7E Ext File Attributes   00000000 (0)\n+652A82 Local Header Offset   0004241E (271390)\n+652A86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652A86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652AF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652AF2   Length              0005 (5)\n+652AF4   Flags               01 (1) 'Modification'\n+652AF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+652AF9 CENTRAL HEADER #134   02014B50 (33639248)\n+652AFD Created Zip Spec      14 (20) '2.0'\n+652AFE Created OS            00 (0) 'MS-DOS'\n+652AFF Extract Zip Spec      14 (20) '2.0'\n+652B00 Extract OS            00 (0) 'MS-DOS'\n+652B01 General Purpose Flag  0000 (0)\n+652B03 Compression Method    0000 (0) 'Stored'\n+652B05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652B09 CRC                   00000000 (0)\n+652B0D Compressed Size       00000000 (0)\n+652B11 Uncompressed Size     00000000 (0)\n+652B15 Filename Length       0022 (34)\n+652B17 Extra Length          0009 (9)\n+652B19 Comment Length        0000 (0)\n+652B1B Disk Start            0000 (0)\n+652B1D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652B1F Ext File Attributes   00000000 (0)\n+652B23 Local Header Offset   000435F4 (275956)\n+652B27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652B27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652B49 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652B4B   Length              0005 (5)\n+652B4D   Flags               01 (1) 'Modification'\n+652B4E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+652B52 CENTRAL HEADER #135   02014B50 (33639248)\n+652B56 Created Zip Spec      14 (20) '2.0'\n+652B57 Created OS            00 (0) 'MS-DOS'\n+652B58 Extract Zip Spec      14 (20) '2.0'\n+652B59 Extract OS            00 (0) 'MS-DOS'\n+652B5A General Purpose Flag  0000 (0)\n+652B5C Compression Method    0000 (0) 'Stored'\n+652B5E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652B62 CRC                   00000000 (0)\n+652B66 Compressed Size       00000000 (0)\n+652B6A Uncompressed Size     00000000 (0)\n+652B6E Filename Length       0029 (41)\n+652B70 Extra Length          0009 (9)\n+652B72 Comment Length        0000 (0)\n+652B74 Disk Start            0000 (0)\n+652B76 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652B78 Ext File Attributes   00000000 (0)\n+652B7C Local Header Offset   0004363D (276029)\n+652B80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652B80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652BA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652BAB   Length              0005 (5)\n+652BAD   Flags               01 (1) 'Modification'\n+652BAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+652BB2 CENTRAL HEADER #136   02014B50 (33639248)\n+652BB6 Created Zip Spec      14 (20) '2.0'\n+652BB7 Created OS            00 (0) 'MS-DOS'\n+652BB8 Extract Zip Spec      14 (20) '2.0'\n+652BB9 Extract OS            00 (0) 'MS-DOS'\n+652BBA General Purpose Flag  0000 (0)\n+652BBC Compression Method    0000 (0) 'Stored'\n+652BBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652BC2 CRC                   00000000 (0)\n+652BC6 Compressed Size       00000000 (0)\n+652BCA Uncompressed Size     00000000 (0)\n+652BCE Filename Length       005D (93)\n+652BD0 Extra Length          0009 (9)\n+652BD2 Comment Length        0000 (0)\n+652BD4 Disk Start            0000 (0)\n+652BD6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652BD8 Ext File Attributes   00000000 (0)\n+652BDC Local Header Offset   0004368D (276109)\n+652BE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652BE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652C3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652C3F   Length              0005 (5)\n+652C41   Flags               01 (1) 'Modification'\n+652C42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+652C46 CENTRAL HEADER #137   02014B50 (33639248)\n+652C4A Created Zip Spec      14 (20) '2.0'\n+652C4B Created OS            00 (0) 'MS-DOS'\n+652C4C Extract Zip Spec      14 (20) '2.0'\n+652C4D Extract OS            00 (0) 'MS-DOS'\n+652C4E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+652C50 Compression Method    0000 (0) 'Stored'\n+652C52 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652C56 CRC                   6A45582D (1782929453)\n+652C5A Compressed Size       000009E0 (2528)\n+652C5E Uncompressed Size     000009E0 (2528)\n+652C62 Filename Length       0073 (115)\n+652C64 Extra Length          0009 (9)\n+652C66 Comment Length        0000 (0)\n+652C68 Disk Start            0000 (0)\n+652C6A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652C6C Ext File Attributes   00000000 (0)\n+652C70 Local Header Offset   00043711 (276241)\n+652C74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652C74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652CE7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652CE9   Length              0005 (5)\n+652CEB   Flags               01 (1) 'Modification'\n+652CEC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+652CF0 CENTRAL HEADER #138   02014B50 (33639248)\n+652CF4 Created Zip Spec      14 (20) '2.0'\n+652CF5 Created OS            00 (0) 'MS-DOS'\n+652CF6 Extract Zip Spec      14 (20) '2.0'\n+652CF7 Extract OS            00 (0) 'MS-DOS'\n+652CF8 General Purpose Flag  0000 (0)\n+652CFA Compression Method    0000 (0) 'Stored'\n+652CFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652D00 CRC                   00000000 (0)\n+652D04 Compressed Size       00000000 (0)\n+652D08 Uncompressed Size     00000000 (0)\n+652D0C Filename Length       005F (95)\n+652D0E Extra Length          0009 (9)\n+652D10 Comment Length        0000 (0)\n+652D12 Disk Start            0000 (0)\n+652D14 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652D16 Ext File Attributes   00000000 (0)\n+652D1A Local Header Offset   0004419B (278939)\n+652D1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652D1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652D7D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652D7F   Length              0005 (5)\n+652D81   Flags               01 (1) 'Modification'\n+652D82   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+652D86 CENTRAL HEADER #139   02014B50 (33639248)\n+652D8A Created Zip Spec      14 (20) '2.0'\n+652D8B Created OS            00 (0) 'MS-DOS'\n+652D8C Extract Zip Spec      14 (20) '2.0'\n+652D8D Extract OS            00 (0) 'MS-DOS'\n+652D8E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+652D90 Compression Method    0000 (0) 'Stored'\n+652D92 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652D96 CRC                   4731534C (1194414924)\n+652D9A Compressed Size       00000B90 (2960)\n+652D9E Uncompressed Size     00000B90 (2960)\n+652DA2 Filename Length       0075 (117)\n+652DA4 Extra Length          0009 (9)\n+652DA6 Comment Length        0000 (0)\n+652DA8 Disk Start            0000 (0)\n+652DAA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652DAC Ext File Attributes   00000000 (0)\n+652DB0 Local Header Offset   00044221 (279073)\n+652DB4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652DB4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652E29 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652E2B   Length              0005 (5)\n+652E2D   Flags               01 (1) 'Modification'\n+652E2E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+652E32 CENTRAL HEADER #140   02014B50 (33639248)\n+652E36 Created Zip Spec      14 (20) '2.0'\n+652E37 Created OS            00 (0) 'MS-DOS'\n+652E38 Extract Zip Spec      14 (20) '2.0'\n+652E39 Extract OS            00 (0) 'MS-DOS'\n+652E3A General Purpose Flag  0000 (0)\n+652E3C Compression Method    0000 (0) 'Stored'\n+652E3E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652E42 CRC                   00000000 (0)\n+652E46 Compressed Size       00000000 (0)\n+652E4A Uncompressed Size     00000000 (0)\n+652E4E Filename Length       005E (94)\n+652E50 Extra Length          0009 (9)\n+652E52 Comment Length        0000 (0)\n+652E54 Disk Start            0000 (0)\n+652E56 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652E58 Ext File Attributes   00000000 (0)\n+652E5C Local Header Offset   00044E5D (282205)\n+652E60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652E60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652EBE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652EC0   Length              0005 (5)\n+652EC2   Flags               01 (1) 'Modification'\n+652EC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+652EC7 CENTRAL HEADER #141   02014B50 (33639248)\n+652ECB Created Zip Spec      14 (20) '2.0'\n+652ECC Created OS            00 (0) 'MS-DOS'\n+652ECD Extract Zip Spec      14 (20) '2.0'\n+652ECE Extract OS            00 (0) 'MS-DOS'\n+652ECF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+652ED1 Compression Method    0000 (0) 'Stored'\n+652ED3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652ED7 CRC                   CEBA8B64 (3468331876)\n+652EDB Compressed Size       00000A7D (2685)\n+652EDF Uncompressed Size     00000A7D (2685)\n+652EE3 Filename Length       0074 (116)\n+652EE5 Extra Length          0009 (9)\n+652EE7 Comment Length        0000 (0)\n+652EE9 Disk Start            0000 (0)\n+652EEB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652EED Ext File Attributes   00000000 (0)\n+652EF1 Local Header Offset   00044EE2 (282338)\n+652EF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652EF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652F69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652F6B   Length              0005 (5)\n+652F6D   Flags               01 (1) 'Modification'\n+652F6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+652F72 CENTRAL HEADER #142   02014B50 (33639248)\n+652F76 Created Zip Spec      14 (20) '2.0'\n+652F77 Created OS            00 (0) 'MS-DOS'\n+652F78 Extract Zip Spec      14 (20) '2.0'\n+652F79 Extract OS            00 (0) 'MS-DOS'\n+652F7A General Purpose Flag  0000 (0)\n+652F7C Compression Method    0000 (0) 'Stored'\n+652F7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+652F82 CRC                   00000000 (0)\n+652F86 Compressed Size       00000000 (0)\n+652F8A Uncompressed Size     00000000 (0)\n+652F8E Filename Length       005D (93)\n+652F90 Extra Length          0009 (9)\n+652F92 Comment Length        0000 (0)\n+652F94 Disk Start            0000 (0)\n+652F96 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+652F98 Ext File Attributes   00000000 (0)\n+652F9C Local Header Offset   00045A0A (285194)\n+652FA0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x652FA0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+652FFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+652FFF   Length              0005 (5)\n+653001   Flags               01 (1) 'Modification'\n+653002   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653006 CENTRAL HEADER #143   02014B50 (33639248)\n+65300A Created Zip Spec      14 (20) '2.0'\n+65300B Created OS            00 (0) 'MS-DOS'\n+65300C Extract Zip Spec      14 (20) '2.0'\n+65300D Extract OS            00 (0) 'MS-DOS'\n+65300E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+653010 Compression Method    0000 (0) 'Stored'\n+653012 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653016 CRC                   0DACEA84 (229436036)\n+65301A Compressed Size       00000A95 (2709)\n+65301E Uncompressed Size     00000A95 (2709)\n+653022 Filename Length       0073 (115)\n+653024 Extra Length          0009 (9)\n+653026 Comment Length        0000 (0)\n+653028 Disk Start            0000 (0)\n+65302A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65302C Ext File Attributes   00000000 (0)\n+653030 Local Header Offset   00045A8E (285326)\n+653034 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653034: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6530A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6530A9   Length              0005 (5)\n+6530AB   Flags               01 (1) 'Modification'\n+6530AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6530B0 CENTRAL HEADER #144   02014B50 (33639248)\n+6530B4 Created Zip Spec      14 (20) '2.0'\n+6530B5 Created OS            00 (0) 'MS-DOS'\n+6530B6 Extract Zip Spec      14 (20) '2.0'\n+6530B7 Extract OS            00 (0) 'MS-DOS'\n+6530B8 General Purpose Flag  0000 (0)\n+6530BA Compression Method    0000 (0) 'Stored'\n+6530BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6530C0 CRC                   00000000 (0)\n+6530C4 Compressed Size       00000000 (0)\n+6530C8 Uncompressed Size     00000000 (0)\n+6530CC Filename Length       005E (94)\n+6530CE Extra Length          0009 (9)\n+6530D0 Comment Length        0000 (0)\n+6530D2 Disk Start            0000 (0)\n+6530D4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6530D6 Ext File Attributes   00000000 (0)\n+6530DA Local Header Offset   000465CD (288205)\n+6530DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6530DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65313C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65313E   Length              0005 (5)\n+653140   Flags               01 (1) 'Modification'\n+653141   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653145 CENTRAL HEADER #145   02014B50 (33639248)\n+653149 Created Zip Spec      14 (20) '2.0'\n+65314A Created OS            00 (0) 'MS-DOS'\n+65314B Extract Zip Spec      14 (20) '2.0'\n+65314C Extract OS            00 (0) 'MS-DOS'\n+65314D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65314F Compression Method    0000 (0) 'Stored'\n+653151 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653155 CRC                   2E84B239 (780448313)\n+653159 Compressed Size       0000121D (4637)\n+65315D Uncompressed Size     0000121D (4637)\n+653161 Filename Length       0074 (116)\n+653163 Extra Length          0009 (9)\n+653165 Comment Length        0000 (0)\n+653167 Disk Start            0000 (0)\n+653169 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65316B Ext File Attributes   00000000 (0)\n+65316F Local Header Offset   00046652 (288338)\n+653173 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653173: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6531E7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6531E9   Length              0005 (5)\n+6531EB   Flags               01 (1) 'Modification'\n+6531EC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6531F0 CENTRAL HEADER #146   02014B50 (33639248)\n+6531F4 Created Zip Spec      14 (20) '2.0'\n+6531F5 Created OS            00 (0) 'MS-DOS'\n+6531F6 Extract Zip Spec      14 (20) '2.0'\n+6531F7 Extract OS            00 (0) 'MS-DOS'\n+6531F8 General Purpose Flag  0000 (0)\n+6531FA Compression Method    0000 (0) 'Stored'\n+6531FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653200 CRC                   00000000 (0)\n+653204 Compressed Size       00000000 (0)\n+653208 Uncompressed Size     00000000 (0)\n+65320C Filename Length       0078 (120)\n+65320E Extra Length          0009 (9)\n+653210 Comment Length        0000 (0)\n+653212 Disk Start            0000 (0)\n+653214 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653216 Ext File Attributes   00000000 (0)\n+65321A Local Header Offset   0004791A (293146)\n+65321E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65321E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+653296 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+653298   Length              0005 (5)\n+65329A   Flags               01 (1) 'Modification'\n+65329B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65329F CENTRAL HEADER #147   02014B50 (33639248)\n+6532A3 Created Zip Spec      14 (20) '2.0'\n+6532A4 Created OS            00 (0) 'MS-DOS'\n+6532A5 Extract Zip Spec      14 (20) '2.0'\n+6532A6 Extract OS            00 (0) 'MS-DOS'\n+6532A7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6532A9 Compression Method    0000 (0) 'Stored'\n+6532AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6532AF CRC                   10E7267F (283584127)\n+6532B3 Compressed Size       000006FB (1787)\n+6532B7 Uncompressed Size     000006FB (1787)\n+6532BB Filename Length       008E (142)\n+6532BD Extra Length          0009 (9)\n+6532BF Comment Length        0000 (0)\n+6532C1 Disk Start            0000 (0)\n+6532C3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6532C5 Ext File Attributes   00000000 (0)\n+6532C9 Local Header Offset   000479B9 (293305)\n+6532CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0x64F6A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6532CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64F736 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64F738   Length              0005 (5)\n-64F73A   Flags               01 (1) 'Modification'\n-64F73B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64F73F CENTRAL HEADER #148   02014B50 (33639248)\n-64F743 Created Zip Spec      14 (20) '2.0'\n-64F744 Created OS            00 (0) 'MS-DOS'\n-64F745 Extract Zip Spec      14 (20) '2.0'\n-64F746 Extract OS            00 (0) 'MS-DOS'\n-64F747 General Purpose Flag  0000 (0)\n-64F749 Compression Method    0000 (0) 'Stored'\n-64F74B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64F74F CRC                   00000000 (0)\n-64F753 Compressed Size       00000000 (0)\n-64F757 Uncompressed Size     00000000 (0)\n-64F75B Filename Length       0079 (121)\n-64F75D Extra Length          0009 (9)\n-64F75F Comment Length        0000 (0)\n-64F761 Disk Start            0000 (0)\n-64F763 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64F765 Ext File Attributes   00000000 (0)\n-64F769 Local Header Offset   000447B1 (280497)\n-64F76D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64F76D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64F7E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64F7E8   Length              0005 (5)\n-64F7EA   Flags               01 (1) 'Modification'\n-64F7EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64F7EF CENTRAL HEADER #149   02014B50 (33639248)\n-64F7F3 Created Zip Spec      14 (20) '2.0'\n-64F7F4 Created OS            00 (0) 'MS-DOS'\n-64F7F5 Extract Zip Spec      14 (20) '2.0'\n-64F7F6 Extract OS            00 (0) 'MS-DOS'\n-64F7F7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64F7F9 Compression Method    0000 (0) 'Stored'\n-64F7FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64F7FF CRC                   24E47A3B (618953275)\n-64F803 Compressed Size       000006FF (1791)\n-64F807 Uncompressed Size     000006FF (1791)\n-64F80B Filename Length       008F (143)\n-64F80D Extra Length          0009 (9)\n-64F80F Comment Length        0000 (0)\n-64F811 Disk Start            0000 (0)\n-64F813 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64F815 Ext File Attributes   00000000 (0)\n-64F819 Local Header Offset   00044851 (280657)\n-64F81D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+65335B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65335D   Length              0005 (5)\n+65335F   Flags               01 (1) 'Modification'\n+653360   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653364 CENTRAL HEADER #148   02014B50 (33639248)\n+653368 Created Zip Spec      14 (20) '2.0'\n+653369 Created OS            00 (0) 'MS-DOS'\n+65336A Extract Zip Spec      14 (20) '2.0'\n+65336B Extract OS            00 (0) 'MS-DOS'\n+65336C General Purpose Flag  0000 (0)\n+65336E Compression Method    0000 (0) 'Stored'\n+653370 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653374 CRC                   00000000 (0)\n+653378 Compressed Size       00000000 (0)\n+65337C Uncompressed Size     00000000 (0)\n+653380 Filename Length       0079 (121)\n+653382 Extra Length          0009 (9)\n+653384 Comment Length        0000 (0)\n+653386 Disk Start            0000 (0)\n+653388 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65338A Ext File Attributes   00000000 (0)\n+65338E Local Header Offset   00048179 (295289)\n+653392 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653392: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65340B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65340D   Length              0005 (5)\n+65340F   Flags               01 (1) 'Modification'\n+653410   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653414 CENTRAL HEADER #149   02014B50 (33639248)\n+653418 Created Zip Spec      14 (20) '2.0'\n+653419 Created OS            00 (0) 'MS-DOS'\n+65341A Extract Zip Spec      14 (20) '2.0'\n+65341B Extract OS            00 (0) 'MS-DOS'\n+65341C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65341E Compression Method    0000 (0) 'Stored'\n+653420 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653424 CRC                   24E47A3B (618953275)\n+653428 Compressed Size       000006FF (1791)\n+65342C Uncompressed Size     000006FF (1791)\n+653430 Filename Length       008F (143)\n+653432 Extra Length          0009 (9)\n+653434 Comment Length        0000 (0)\n+653436 Disk Start            0000 (0)\n+653438 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65343A Ext File Attributes   00000000 (0)\n+65343E Local Header Offset   00048219 (295449)\n+653442 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x64F81D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x653442: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64F8AC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64F8AE   Length              0005 (5)\n-64F8B0   Flags               01 (1) 'Modification'\n-64F8B1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64F8B5 CENTRAL HEADER #150   02014B50 (33639248)\n-64F8B9 Created Zip Spec      14 (20) '2.0'\n-64F8BA Created OS            00 (0) 'MS-DOS'\n-64F8BB Extract Zip Spec      14 (20) '2.0'\n-64F8BC Extract OS            00 (0) 'MS-DOS'\n-64F8BD General Purpose Flag  0000 (0)\n-64F8BF Compression Method    0000 (0) 'Stored'\n-64F8C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64F8C5 CRC                   00000000 (0)\n-64F8C9 Compressed Size       00000000 (0)\n-64F8CD Uncompressed Size     00000000 (0)\n-64F8D1 Filename Length       0074 (116)\n-64F8D3 Extra Length          0009 (9)\n-64F8D5 Comment Length        0000 (0)\n-64F8D7 Disk Start            0000 (0)\n-64F8D9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64F8DB Ext File Attributes   00000000 (0)\n-64F8DF Local Header Offset   00045016 (282646)\n-64F8E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64F8E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64F957 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64F959   Length              0005 (5)\n-64F95B   Flags               01 (1) 'Modification'\n-64F95C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64F960 CENTRAL HEADER #151   02014B50 (33639248)\n-64F964 Created Zip Spec      14 (20) '2.0'\n-64F965 Created OS            00 (0) 'MS-DOS'\n-64F966 Extract Zip Spec      14 (20) '2.0'\n-64F967 Extract OS            00 (0) 'MS-DOS'\n-64F968 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64F96A Compression Method    0000 (0) 'Stored'\n-64F96C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64F970 CRC                   042BB565 (69973349)\n-64F974 Compressed Size       00001364 (4964)\n-64F978 Uncompressed Size     00001364 (4964)\n-64F97C Filename Length       008A (138)\n-64F97E Extra Length          0009 (9)\n-64F980 Comment Length        0000 (0)\n-64F982 Disk Start            0000 (0)\n-64F984 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64F986 Ext File Attributes   00000000 (0)\n-64F98A Local Header Offset   000450B1 (282801)\n-64F98E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+6534D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6534D3   Length              0005 (5)\n+6534D5   Flags               01 (1) 'Modification'\n+6534D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6534DA CENTRAL HEADER #150   02014B50 (33639248)\n+6534DE Created Zip Spec      14 (20) '2.0'\n+6534DF Created OS            00 (0) 'MS-DOS'\n+6534E0 Extract Zip Spec      14 (20) '2.0'\n+6534E1 Extract OS            00 (0) 'MS-DOS'\n+6534E2 General Purpose Flag  0000 (0)\n+6534E4 Compression Method    0000 (0) 'Stored'\n+6534E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6534EA CRC                   00000000 (0)\n+6534EE Compressed Size       00000000 (0)\n+6534F2 Uncompressed Size     00000000 (0)\n+6534F6 Filename Length       0074 (116)\n+6534F8 Extra Length          0009 (9)\n+6534FA Comment Length        0000 (0)\n+6534FC Disk Start            0000 (0)\n+6534FE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653500 Ext File Attributes   00000000 (0)\n+653504 Local Header Offset   000489DE (297438)\n+653508 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653508: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65357C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65357E   Length              0005 (5)\n+653580   Flags               01 (1) 'Modification'\n+653581   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653585 CENTRAL HEADER #151   02014B50 (33639248)\n+653589 Created Zip Spec      14 (20) '2.0'\n+65358A Created OS            00 (0) 'MS-DOS'\n+65358B Extract Zip Spec      14 (20) '2.0'\n+65358C Extract OS            00 (0) 'MS-DOS'\n+65358D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65358F Compression Method    0000 (0) 'Stored'\n+653591 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653595 CRC                   042BB565 (69973349)\n+653599 Compressed Size       00001364 (4964)\n+65359D Uncompressed Size     00001364 (4964)\n+6535A1 Filename Length       008A (138)\n+6535A3 Extra Length          0009 (9)\n+6535A5 Comment Length        0000 (0)\n+6535A7 Disk Start            0000 (0)\n+6535A9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6535AB Ext File Attributes   00000000 (0)\n+6535AF Local Header Offset   00048A79 (297593)\n+6535B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXX'\n #\n-# WARNING: Offset 0x64F98E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6535B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64FA18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64FA1A   Length              0005 (5)\n-64FA1C   Flags               01 (1) 'Modification'\n-64FA1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64FA21 CENTRAL HEADER #152   02014B50 (33639248)\n-64FA25 Created Zip Spec      14 (20) '2.0'\n-64FA26 Created OS            00 (0) 'MS-DOS'\n-64FA27 Extract Zip Spec      14 (20) '2.0'\n-64FA28 Extract OS            00 (0) 'MS-DOS'\n-64FA29 General Purpose Flag  0000 (0)\n-64FA2B Compression Method    0000 (0) 'Stored'\n-64FA2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64FA31 CRC                   00000000 (0)\n-64FA35 Compressed Size       00000000 (0)\n-64FA39 Uncompressed Size     00000000 (0)\n-64FA3D Filename Length       0075 (117)\n-64FA3F Extra Length          0009 (9)\n-64FA41 Comment Length        0000 (0)\n-64FA43 Disk Start            0000 (0)\n-64FA45 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64FA47 Ext File Attributes   00000000 (0)\n-64FA4B Local Header Offset   000464D6 (287958)\n-64FA4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64FA4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64FAC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64FAC6   Length              0005 (5)\n-64FAC8   Flags               01 (1) 'Modification'\n-64FAC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64FACD CENTRAL HEADER #153   02014B50 (33639248)\n-64FAD1 Created Zip Spec      14 (20) '2.0'\n-64FAD2 Created OS            00 (0) 'MS-DOS'\n-64FAD3 Extract Zip Spec      14 (20) '2.0'\n-64FAD4 Extract OS            00 (0) 'MS-DOS'\n-64FAD5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64FAD7 Compression Method    0000 (0) 'Stored'\n-64FAD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64FADD CRC                   7A63232B (2053317419)\n-64FAE1 Compressed Size       000013C0 (5056)\n-64FAE5 Uncompressed Size     000013C0 (5056)\n-64FAE9 Filename Length       008B (139)\n-64FAEB Extra Length          0009 (9)\n-64FAED Comment Length        0000 (0)\n-64FAEF Disk Start            0000 (0)\n-64FAF1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64FAF3 Ext File Attributes   00000000 (0)\n-64FAF7 Local Header Offset   00046572 (288114)\n-64FAFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+65363D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65363F   Length              0005 (5)\n+653641   Flags               01 (1) 'Modification'\n+653642   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653646 CENTRAL HEADER #152   02014B50 (33639248)\n+65364A Created Zip Spec      14 (20) '2.0'\n+65364B Created OS            00 (0) 'MS-DOS'\n+65364C Extract Zip Spec      14 (20) '2.0'\n+65364D Extract OS            00 (0) 'MS-DOS'\n+65364E General Purpose Flag  0000 (0)\n+653650 Compression Method    0000 (0) 'Stored'\n+653652 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653656 CRC                   00000000 (0)\n+65365A Compressed Size       00000000 (0)\n+65365E Uncompressed Size     00000000 (0)\n+653662 Filename Length       0075 (117)\n+653664 Extra Length          0009 (9)\n+653666 Comment Length        0000 (0)\n+653668 Disk Start            0000 (0)\n+65366A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65366C Ext File Attributes   00000000 (0)\n+653670 Local Header Offset   00049E9E (302750)\n+653674 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653674: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6536E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6536EB   Length              0005 (5)\n+6536ED   Flags               01 (1) 'Modification'\n+6536EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6536F2 CENTRAL HEADER #153   02014B50 (33639248)\n+6536F6 Created Zip Spec      14 (20) '2.0'\n+6536F7 Created OS            00 (0) 'MS-DOS'\n+6536F8 Extract Zip Spec      14 (20) '2.0'\n+6536F9 Extract OS            00 (0) 'MS-DOS'\n+6536FA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6536FC Compression Method    0000 (0) 'Stored'\n+6536FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653702 CRC                   7A63232B (2053317419)\n+653706 Compressed Size       000013C0 (5056)\n+65370A Uncompressed Size     000013C0 (5056)\n+65370E Filename Length       008B (139)\n+653710 Extra Length          0009 (9)\n+653712 Comment Length        0000 (0)\n+653714 Disk Start            0000 (0)\n+653716 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653718 Ext File Attributes   00000000 (0)\n+65371C Local Header Offset   00049F3A (302906)\n+653720 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXX'\n #\n-# WARNING: Offset 0x64FAFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x653720: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-64FB86 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64FB88   Length              0005 (5)\n-64FB8A   Flags               01 (1) 'Modification'\n-64FB8B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64FB8F CENTRAL HEADER #154   02014B50 (33639248)\n-64FB93 Created Zip Spec      14 (20) '2.0'\n-64FB94 Created OS            00 (0) 'MS-DOS'\n-64FB95 Extract Zip Spec      14 (20) '2.0'\n-64FB96 Extract OS            00 (0) 'MS-DOS'\n-64FB97 General Purpose Flag  0000 (0)\n-64FB99 Compression Method    0000 (0) 'Stored'\n-64FB9B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64FB9F CRC                   00000000 (0)\n-64FBA3 Compressed Size       00000000 (0)\n-64FBA7 Uncompressed Size     00000000 (0)\n-64FBAB Filename Length       0026 (38)\n-64FBAD Extra Length          0009 (9)\n-64FBAF Comment Length        0000 (0)\n-64FBB1 Disk Start            0000 (0)\n-64FBB3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64FBB5 Ext File Attributes   00000000 (0)\n-64FBB9 Local Header Offset   000479F4 (293364)\n-64FBBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64FBBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64FBE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64FBE5   Length              0005 (5)\n-64FBE7   Flags               01 (1) 'Modification'\n-64FBE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64FBEC CENTRAL HEADER #155   02014B50 (33639248)\n-64FBF0 Created Zip Spec      14 (20) '2.0'\n-64FBF1 Created OS            00 (0) 'MS-DOS'\n-64FBF2 Extract Zip Spec      14 (20) '2.0'\n-64FBF3 Extract OS            00 (0) 'MS-DOS'\n-64FBF4 General Purpose Flag  0000 (0)\n-64FBF6 Compression Method    0000 (0) 'Stored'\n-64FBF8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64FBFC CRC                   00000000 (0)\n-64FC00 Compressed Size       00000000 (0)\n-64FC04 Uncompressed Size     00000000 (0)\n-64FC08 Filename Length       002D (45)\n-64FC0A Extra Length          0009 (9)\n-64FC0C Comment Length        0000 (0)\n-64FC0E Disk Start            0000 (0)\n-64FC10 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64FC12 Ext File Attributes   00000000 (0)\n-64FC16 Local Header Offset   00047A41 (293441)\n-64FC1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64FC1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64FC47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64FC49   Length              0005 (5)\n-64FC4B   Flags               01 (1) 'Modification'\n-64FC4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64FC50 CENTRAL HEADER #156   02014B50 (33639248)\n-64FC54 Created Zip Spec      14 (20) '2.0'\n-64FC55 Created OS            00 (0) 'MS-DOS'\n-64FC56 Extract Zip Spec      14 (20) '2.0'\n-64FC57 Extract OS            00 (0) 'MS-DOS'\n-64FC58 General Purpose Flag  0000 (0)\n-64FC5A Compression Method    0000 (0) 'Stored'\n-64FC5C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64FC60 CRC                   00000000 (0)\n-64FC64 Compressed Size       00000000 (0)\n-64FC68 Uncompressed Size     00000000 (0)\n-64FC6C Filename Length       005E (94)\n-64FC6E Extra Length          0009 (9)\n-64FC70 Comment Length        0000 (0)\n-64FC72 Disk Start            0000 (0)\n-64FC74 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64FC76 Ext File Attributes   00000000 (0)\n-64FC7A Local Header Offset   00047A95 (293525)\n-64FC7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64FC7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64FCDC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64FCDE   Length              0005 (5)\n-64FCE0   Flags               01 (1) 'Modification'\n-64FCE1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64FCE5 CENTRAL HEADER #157   02014B50 (33639248)\n-64FCE9 Created Zip Spec      14 (20) '2.0'\n-64FCEA Created OS            00 (0) 'MS-DOS'\n-64FCEB Extract Zip Spec      14 (20) '2.0'\n-64FCEC Extract OS            00 (0) 'MS-DOS'\n-64FCED General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64FCEF Compression Method    0000 (0) 'Stored'\n-64FCF1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64FCF5 CRC                   19888393 (428376979)\n-64FCF9 Compressed Size       0000092E (2350)\n-64FCFD Uncompressed Size     0000092E (2350)\n-64FD01 Filename Length       0074 (116)\n-64FD03 Extra Length          0009 (9)\n-64FD05 Comment Length        0000 (0)\n-64FD07 Disk Start            0000 (0)\n-64FD09 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64FD0B Ext File Attributes   00000000 (0)\n-64FD0F Local Header Offset   00047B1A (293658)\n-64FD13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64FD13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64FD87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64FD89   Length              0005 (5)\n-64FD8B   Flags               01 (1) 'Modification'\n-64FD8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64FD90 CENTRAL HEADER #158   02014B50 (33639248)\n-64FD94 Created Zip Spec      14 (20) '2.0'\n-64FD95 Created OS            00 (0) 'MS-DOS'\n-64FD96 Extract Zip Spec      14 (20) '2.0'\n-64FD97 Extract OS            00 (0) 'MS-DOS'\n-64FD98 General Purpose Flag  0000 (0)\n-64FD9A Compression Method    0000 (0) 'Stored'\n-64FD9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64FDA0 CRC                   00000000 (0)\n-64FDA4 Compressed Size       00000000 (0)\n-64FDA8 Uncompressed Size     00000000 (0)\n-64FDAC Filename Length       0026 (38)\n-64FDAE Extra Length          0009 (9)\n-64FDB0 Comment Length        0000 (0)\n-64FDB2 Disk Start            0000 (0)\n-64FDB4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64FDB6 Ext File Attributes   00000000 (0)\n-64FDBA Local Header Offset   000484F3 (296179)\n-64FDBE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64FDBE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64FDE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64FDE6   Length              0005 (5)\n-64FDE8   Flags               01 (1) 'Modification'\n-64FDE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64FDED CENTRAL HEADER #159   02014B50 (33639248)\n-64FDF1 Created Zip Spec      14 (20) '2.0'\n-64FDF2 Created OS            00 (0) 'MS-DOS'\n-64FDF3 Extract Zip Spec      14 (20) '2.0'\n-64FDF4 Extract OS            00 (0) 'MS-DOS'\n-64FDF5 General Purpose Flag  0000 (0)\n-64FDF7 Compression Method    0000 (0) 'Stored'\n-64FDF9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64FDFD CRC                   00000000 (0)\n-64FE01 Compressed Size       00000000 (0)\n-64FE05 Uncompressed Size     00000000 (0)\n-64FE09 Filename Length       002D (45)\n-64FE0B Extra Length          0009 (9)\n-64FE0D Comment Length        0000 (0)\n-64FE0F Disk Start            0000 (0)\n-64FE11 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64FE13 Ext File Attributes   00000000 (0)\n-64FE17 Local Header Offset   00048540 (296256)\n-64FE1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64FE1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64FE48 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64FE4A   Length              0005 (5)\n-64FE4C   Flags               01 (1) 'Modification'\n-64FE4D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64FE51 CENTRAL HEADER #160   02014B50 (33639248)\n-64FE55 Created Zip Spec      14 (20) '2.0'\n-64FE56 Created OS            00 (0) 'MS-DOS'\n-64FE57 Extract Zip Spec      14 (20) '2.0'\n-64FE58 Extract OS            00 (0) 'MS-DOS'\n-64FE59 General Purpose Flag  0000 (0)\n-64FE5B Compression Method    0000 (0) 'Stored'\n-64FE5D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64FE61 CRC                   00000000 (0)\n-64FE65 Compressed Size       00000000 (0)\n-64FE69 Uncompressed Size     00000000 (0)\n-64FE6D Filename Length       0064 (100)\n-64FE6F Extra Length          0009 (9)\n-64FE71 Comment Length        0000 (0)\n-64FE73 Disk Start            0000 (0)\n-64FE75 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64FE77 Ext File Attributes   00000000 (0)\n-64FE7B Local Header Offset   00048594 (296340)\n-64FE7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64FE7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64FEE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64FEE5   Length              0005 (5)\n-64FEE7   Flags               01 (1) 'Modification'\n-64FEE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64FEEC CENTRAL HEADER #161   02014B50 (33639248)\n-64FEF0 Created Zip Spec      14 (20) '2.0'\n-64FEF1 Created OS            00 (0) 'MS-DOS'\n-64FEF2 Extract Zip Spec      14 (20) '2.0'\n-64FEF3 Extract OS            00 (0) 'MS-DOS'\n-64FEF4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-64FEF6 Compression Method    0000 (0) 'Stored'\n-64FEF8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64FEFC CRC                   8B1E3BB7 (2334014391)\n-64FF00 Compressed Size       00002091 (8337)\n-64FF04 Uncompressed Size     00002091 (8337)\n-64FF08 Filename Length       007A (122)\n-64FF0A Extra Length          0009 (9)\n-64FF0C Comment Length        0000 (0)\n-64FF0E Disk Start            0000 (0)\n-64FF10 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64FF12 Ext File Attributes   00000000 (0)\n-64FF16 Local Header Offset   0004861F (296479)\n-64FF1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64FF1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64FF94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64FF96   Length              0005 (5)\n-64FF98   Flags               01 (1) 'Modification'\n-64FF99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64FF9D CENTRAL HEADER #162   02014B50 (33639248)\n-64FFA1 Created Zip Spec      14 (20) '2.0'\n-64FFA2 Created OS            00 (0) 'MS-DOS'\n-64FFA3 Extract Zip Spec      14 (20) '2.0'\n-64FFA4 Extract OS            00 (0) 'MS-DOS'\n-64FFA5 General Purpose Flag  0000 (0)\n-64FFA7 Compression Method    0000 (0) 'Stored'\n-64FFA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-64FFAD CRC                   00000000 (0)\n-64FFB1 Compressed Size       00000000 (0)\n-64FFB5 Uncompressed Size     00000000 (0)\n-64FFB9 Filename Length       0025 (37)\n-64FFBB Extra Length          0009 (9)\n-64FFBD Comment Length        0000 (0)\n-64FFBF Disk Start            0000 (0)\n-64FFC1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-64FFC3 Ext File Attributes   00000000 (0)\n-64FFC7 Local Header Offset   0004A761 (304993)\n-64FFCB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64FFCB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-64FFF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-64FFF2   Length              0005 (5)\n-64FFF4   Flags               01 (1) 'Modification'\n-64FFF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-64FFF9 CENTRAL HEADER #163   02014B50 (33639248)\n-64FFFD Created Zip Spec      14 (20) '2.0'\n-64FFFE Created OS            00 (0) 'MS-DOS'\n-64FFFF Extract Zip Spec      14 (20) '2.0'\n-650000 Extract OS            00 (0) 'MS-DOS'\n-650001 General Purpose Flag  0000 (0)\n-650003 Compression Method    0000 (0) 'Stored'\n-650005 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-650009 CRC                   00000000 (0)\n-65000D Compressed Size       00000000 (0)\n-650011 Uncompressed Size     00000000 (0)\n-650015 Filename Length       002C (44)\n-650017 Extra Length          0009 (9)\n-650019 Comment Length        0000 (0)\n-65001B Disk Start            0000 (0)\n-65001D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65001F Ext File Attributes   00000000 (0)\n-650023 Local Header Offset   0004A7AD (305069)\n-650027 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x650027: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650053 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650055   Length              0005 (5)\n-650057   Flags               01 (1) 'Modification'\n-650058   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65005C CENTRAL HEADER #164   02014B50 (33639248)\n-650060 Created Zip Spec      14 (20) '2.0'\n-650061 Created OS            00 (0) 'MS-DOS'\n-650062 Extract Zip Spec      14 (20) '2.0'\n-650063 Extract OS            00 (0) 'MS-DOS'\n-650064 General Purpose Flag  0000 (0)\n-650066 Compression Method    0000 (0) 'Stored'\n-650068 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65006C CRC                   00000000 (0)\n-650070 Compressed Size       00000000 (0)\n-650074 Uncompressed Size     00000000 (0)\n-650078 Filename Length       0067 (103)\n-65007A Extra Length          0009 (9)\n-65007C Comment Length        0000 (0)\n-65007E Disk Start            0000 (0)\n-650080 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650082 Ext File Attributes   00000000 (0)\n-650086 Local Header Offset   0004A800 (305152)\n-65008A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65008A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6500F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6500F3   Length              0005 (5)\n-6500F5   Flags               01 (1) 'Modification'\n-6500F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6500FA CENTRAL HEADER #165   02014B50 (33639248)\n-6500FE Created Zip Spec      14 (20) '2.0'\n-6500FF Created OS            00 (0) 'MS-DOS'\n-650100 Extract Zip Spec      14 (20) '2.0'\n-650101 Extract OS            00 (0) 'MS-DOS'\n-650102 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-650104 Compression Method    0000 (0) 'Stored'\n-650106 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65010A CRC                   EAE74E6F (3941027439)\n-65010E Compressed Size       00001481 (5249)\n-650112 Uncompressed Size     00001481 (5249)\n-650116 Filename Length       007D (125)\n-650118 Extra Length          0009 (9)\n-65011A Comment Length        0000 (0)\n-65011C Disk Start            0000 (0)\n-65011E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650120 Ext File Attributes   00000000 (0)\n-650124 Local Header Offset   0004A88E (305294)\n-650128 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x650128: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6501A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6501A7   Length              0005 (5)\n-6501A9   Flags               01 (1) 'Modification'\n-6501AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6501AE CENTRAL HEADER #166   02014B50 (33639248)\n-6501B2 Created Zip Spec      14 (20) '2.0'\n-6501B3 Created OS            00 (0) 'MS-DOS'\n-6501B4 Extract Zip Spec      14 (20) '2.0'\n-6501B5 Extract OS            00 (0) 'MS-DOS'\n-6501B6 General Purpose Flag  0000 (0)\n-6501B8 Compression Method    0000 (0) 'Stored'\n-6501BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6501BE CRC                   00000000 (0)\n-6501C2 Compressed Size       00000000 (0)\n-6501C6 Uncompressed Size     00000000 (0)\n-6501CA Filename Length       0057 (87)\n-6501CC Extra Length          0009 (9)\n-6501CE Comment Length        0000 (0)\n-6501D0 Disk Start            0000 (0)\n-6501D2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6501D4 Ext File Attributes   00000000 (0)\n-6501D8 Local Header Offset   0004BDC3 (310723)\n-6501DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6501DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650233 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650235   Length              0005 (5)\n-650237   Flags               01 (1) 'Modification'\n-650238   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65023C CENTRAL HEADER #167   02014B50 (33639248)\n-650240 Created Zip Spec      14 (20) '2.0'\n-650241 Created OS            00 (0) 'MS-DOS'\n-650242 Extract Zip Spec      14 (20) '2.0'\n-650243 Extract OS            00 (0) 'MS-DOS'\n-650244 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-650246 Compression Method    0000 (0) 'Stored'\n-650248 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65024C CRC                   49F8AFD7 (1241034711)\n-650250 Compressed Size       000025C9 (9673)\n-650254 Uncompressed Size     000025C9 (9673)\n-650258 Filename Length       006D (109)\n-65025A Extra Length          0009 (9)\n-65025C Comment Length        0000 (0)\n-65025E Disk Start            0000 (0)\n-650260 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650262 Ext File Attributes   00000000 (0)\n-650266 Local Header Offset   0004BE41 (310849)\n-65026A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65026A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6502D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6502D9   Length              0005 (5)\n-6502DB   Flags               01 (1) 'Modification'\n-6502DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6502E0 CENTRAL HEADER #168   02014B50 (33639248)\n-6502E4 Created Zip Spec      14 (20) '2.0'\n-6502E5 Created OS            00 (0) 'MS-DOS'\n-6502E6 Extract Zip Spec      14 (20) '2.0'\n-6502E7 Extract OS            00 (0) 'MS-DOS'\n-6502E8 General Purpose Flag  0000 (0)\n-6502EA Compression Method    0000 (0) 'Stored'\n-6502EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6502F0 CRC                   00000000 (0)\n-6502F4 Compressed Size       00000000 (0)\n-6502F8 Uncompressed Size     00000000 (0)\n-6502FC Filename Length       0056 (86)\n-6502FE Extra Length          0009 (9)\n-650300 Comment Length        0000 (0)\n-650302 Disk Start            0000 (0)\n-650304 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650306 Ext File Attributes   00000000 (0)\n-65030A Local Header Offset   0004E4AE (320686)\n-65030E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65030E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650364 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650366   Length              0005 (5)\n-650368   Flags               01 (1) 'Modification'\n-650369   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65036D CENTRAL HEADER #169   02014B50 (33639248)\n-650371 Created Zip Spec      14 (20) '2.0'\n-650372 Created OS            00 (0) 'MS-DOS'\n-650373 Extract Zip Spec      14 (20) '2.0'\n-650374 Extract OS            00 (0) 'MS-DOS'\n-650375 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-650377 Compression Method    0000 (0) 'Stored'\n-650379 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65037D CRC                   332580F8 (858095864)\n-650381 Compressed Size       00000E10 (3600)\n-650385 Uncompressed Size     00000E10 (3600)\n-650389 Filename Length       006C (108)\n-65038B Extra Length          0009 (9)\n-65038D Comment Length        0000 (0)\n-65038F Disk Start            0000 (0)\n-650391 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650393 Ext File Attributes   00000000 (0)\n-650397 Local Header Offset   0004E52B (320811)\n-65039B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65039B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650407 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650409   Length              0005 (5)\n-65040B   Flags               01 (1) 'Modification'\n-65040C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-650410 CENTRAL HEADER #170   02014B50 (33639248)\n-650414 Created Zip Spec      14 (20) '2.0'\n-650415 Created OS            00 (0) 'MS-DOS'\n-650416 Extract Zip Spec      14 (20) '2.0'\n-650417 Extract OS            00 (0) 'MS-DOS'\n-650418 General Purpose Flag  0000 (0)\n-65041A Compression Method    0000 (0) 'Stored'\n-65041C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-650420 CRC                   00000000 (0)\n-650424 Compressed Size       00000000 (0)\n-650428 Uncompressed Size     00000000 (0)\n-65042C Filename Length       002E (46)\n-65042E Extra Length          0009 (9)\n-650430 Comment Length        0000 (0)\n-650432 Disk Start            0000 (0)\n-650434 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650436 Ext File Attributes   00000000 (0)\n-65043A Local Header Offset   0004F3DE (324574)\n-65043E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65043E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65046C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65046E   Length              0005 (5)\n-650470   Flags               01 (1) 'Modification'\n-650471   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-650475 CENTRAL HEADER #171   02014B50 (33639248)\n-650479 Created Zip Spec      14 (20) '2.0'\n-65047A Created OS            00 (0) 'MS-DOS'\n-65047B Extract Zip Spec      14 (20) '2.0'\n-65047C Extract OS            00 (0) 'MS-DOS'\n-65047D General Purpose Flag  0000 (0)\n-65047F Compression Method    0000 (0) 'Stored'\n-650481 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-650485 CRC                   00000000 (0)\n-650489 Compressed Size       00000000 (0)\n-65048D Uncompressed Size     00000000 (0)\n-650491 Filename Length       0035 (53)\n-650493 Extra Length          0009 (9)\n-650495 Comment Length        0000 (0)\n-650497 Disk Start            0000 (0)\n-650499 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65049B Ext File Attributes   00000000 (0)\n-65049F Local Header Offset   0004F433 (324659)\n-6504A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6504A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6504D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6504DA   Length              0005 (5)\n-6504DC   Flags               01 (1) 'Modification'\n-6504DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6504E1 CENTRAL HEADER #172   02014B50 (33639248)\n-6504E5 Created Zip Spec      14 (20) '2.0'\n-6504E6 Created OS            00 (0) 'MS-DOS'\n-6504E7 Extract Zip Spec      14 (20) '2.0'\n-6504E8 Extract OS            00 (0) 'MS-DOS'\n-6504E9 General Purpose Flag  0000 (0)\n-6504EB Compression Method    0000 (0) 'Stored'\n-6504ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6504F1 CRC                   00000000 (0)\n-6504F5 Compressed Size       00000000 (0)\n-6504F9 Uncompressed Size     00000000 (0)\n-6504FD Filename Length       0079 (121)\n-6504FF Extra Length          0009 (9)\n-650501 Comment Length        0000 (0)\n-650503 Disk Start            0000 (0)\n-650505 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650507 Ext File Attributes   00000000 (0)\n-65050B Local Header Offset   0004F48F (324751)\n-65050F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65050F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650588 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65058A   Length              0005 (5)\n-65058C   Flags               01 (1) 'Modification'\n-65058D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-650591 CENTRAL HEADER #173   02014B50 (33639248)\n-650595 Created Zip Spec      14 (20) '2.0'\n-650596 Created OS            00 (0) 'MS-DOS'\n-650597 Extract Zip Spec      14 (20) '2.0'\n-650598 Extract OS            00 (0) 'MS-DOS'\n-650599 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65059B Compression Method    0000 (0) 'Stored'\n-65059D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6505A1 CRC                   0D142FFC (219426812)\n-6505A5 Compressed Size       00001A7B (6779)\n-6505A9 Uncompressed Size     00001A7B (6779)\n-6505AD Filename Length       008F (143)\n-6505AF Extra Length          0009 (9)\n-6505B1 Comment Length        0000 (0)\n-6505B3 Disk Start            0000 (0)\n-6505B5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6505B7 Ext File Attributes   00000000 (0)\n-6505BB Local Header Offset   0004F52F (324911)\n-6505BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+6537AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6537AD   Length              0005 (5)\n+6537AF   Flags               01 (1) 'Modification'\n+6537B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6537B4 CENTRAL HEADER #154   02014B50 (33639248)\n+6537B8 Created Zip Spec      14 (20) '2.0'\n+6537B9 Created OS            00 (0) 'MS-DOS'\n+6537BA Extract Zip Spec      14 (20) '2.0'\n+6537BB Extract OS            00 (0) 'MS-DOS'\n+6537BC General Purpose Flag  0000 (0)\n+6537BE Compression Method    0000 (0) 'Stored'\n+6537C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6537C4 CRC                   00000000 (0)\n+6537C8 Compressed Size       00000000 (0)\n+6537CC Uncompressed Size     00000000 (0)\n+6537D0 Filename Length       0026 (38)\n+6537D2 Extra Length          0009 (9)\n+6537D4 Comment Length        0000 (0)\n+6537D6 Disk Start            0000 (0)\n+6537D8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6537DA Ext File Attributes   00000000 (0)\n+6537DE Local Header Offset   0004B3BC (308156)\n+6537E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6537E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+653808 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65380A   Length              0005 (5)\n+65380C   Flags               01 (1) 'Modification'\n+65380D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653811 CENTRAL HEADER #155   02014B50 (33639248)\n+653815 Created Zip Spec      14 (20) '2.0'\n+653816 Created OS            00 (0) 'MS-DOS'\n+653817 Extract Zip Spec      14 (20) '2.0'\n+653818 Extract OS            00 (0) 'MS-DOS'\n+653819 General Purpose Flag  0000 (0)\n+65381B Compression Method    0000 (0) 'Stored'\n+65381D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653821 CRC                   00000000 (0)\n+653825 Compressed Size       00000000 (0)\n+653829 Uncompressed Size     00000000 (0)\n+65382D Filename Length       002D (45)\n+65382F Extra Length          0009 (9)\n+653831 Comment Length        0000 (0)\n+653833 Disk Start            0000 (0)\n+653835 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653837 Ext File Attributes   00000000 (0)\n+65383B Local Header Offset   0004B409 (308233)\n+65383F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65383F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65386C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65386E   Length              0005 (5)\n+653870   Flags               01 (1) 'Modification'\n+653871   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653875 CENTRAL HEADER #156   02014B50 (33639248)\n+653879 Created Zip Spec      14 (20) '2.0'\n+65387A Created OS            00 (0) 'MS-DOS'\n+65387B Extract Zip Spec      14 (20) '2.0'\n+65387C Extract OS            00 (0) 'MS-DOS'\n+65387D General Purpose Flag  0000 (0)\n+65387F Compression Method    0000 (0) 'Stored'\n+653881 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653885 CRC                   00000000 (0)\n+653889 Compressed Size       00000000 (0)\n+65388D Uncompressed Size     00000000 (0)\n+653891 Filename Length       005E (94)\n+653893 Extra Length          0009 (9)\n+653895 Comment Length        0000 (0)\n+653897 Disk Start            0000 (0)\n+653899 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65389B Ext File Attributes   00000000 (0)\n+65389F Local Header Offset   0004B45D (308317)\n+6538A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6538A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+653901 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+653903   Length              0005 (5)\n+653905   Flags               01 (1) 'Modification'\n+653906   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65390A CENTRAL HEADER #157   02014B50 (33639248)\n+65390E Created Zip Spec      14 (20) '2.0'\n+65390F Created OS            00 (0) 'MS-DOS'\n+653910 Extract Zip Spec      14 (20) '2.0'\n+653911 Extract OS            00 (0) 'MS-DOS'\n+653912 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+653914 Compression Method    0000 (0) 'Stored'\n+653916 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65391A CRC                   19888393 (428376979)\n+65391E Compressed Size       0000092E (2350)\n+653922 Uncompressed Size     0000092E (2350)\n+653926 Filename Length       0074 (116)\n+653928 Extra Length          0009 (9)\n+65392A Comment Length        0000 (0)\n+65392C Disk Start            0000 (0)\n+65392E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653930 Ext File Attributes   00000000 (0)\n+653934 Local Header Offset   0004B4E2 (308450)\n+653938 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653938: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6539AC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6539AE   Length              0005 (5)\n+6539B0   Flags               01 (1) 'Modification'\n+6539B1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6539B5 CENTRAL HEADER #158   02014B50 (33639248)\n+6539B9 Created Zip Spec      14 (20) '2.0'\n+6539BA Created OS            00 (0) 'MS-DOS'\n+6539BB Extract Zip Spec      14 (20) '2.0'\n+6539BC Extract OS            00 (0) 'MS-DOS'\n+6539BD General Purpose Flag  0000 (0)\n+6539BF Compression Method    0000 (0) 'Stored'\n+6539C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6539C5 CRC                   00000000 (0)\n+6539C9 Compressed Size       00000000 (0)\n+6539CD Uncompressed Size     00000000 (0)\n+6539D1 Filename Length       0026 (38)\n+6539D3 Extra Length          0009 (9)\n+6539D5 Comment Length        0000 (0)\n+6539D7 Disk Start            0000 (0)\n+6539D9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6539DB Ext File Attributes   00000000 (0)\n+6539DF Local Header Offset   0004BEBB (310971)\n+6539E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6539E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+653A09 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+653A0B   Length              0005 (5)\n+653A0D   Flags               01 (1) 'Modification'\n+653A0E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653A12 CENTRAL HEADER #159   02014B50 (33639248)\n+653A16 Created Zip Spec      14 (20) '2.0'\n+653A17 Created OS            00 (0) 'MS-DOS'\n+653A18 Extract Zip Spec      14 (20) '2.0'\n+653A19 Extract OS            00 (0) 'MS-DOS'\n+653A1A General Purpose Flag  0000 (0)\n+653A1C Compression Method    0000 (0) 'Stored'\n+653A1E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653A22 CRC                   00000000 (0)\n+653A26 Compressed Size       00000000 (0)\n+653A2A Uncompressed Size     00000000 (0)\n+653A2E Filename Length       002D (45)\n+653A30 Extra Length          0009 (9)\n+653A32 Comment Length        0000 (0)\n+653A34 Disk Start            0000 (0)\n+653A36 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653A38 Ext File Attributes   00000000 (0)\n+653A3C Local Header Offset   0004BF08 (311048)\n+653A40 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653A40: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+653A6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+653A6F   Length              0005 (5)\n+653A71   Flags               01 (1) 'Modification'\n+653A72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653A76 CENTRAL HEADER #160   02014B50 (33639248)\n+653A7A Created Zip Spec      14 (20) '2.0'\n+653A7B Created OS            00 (0) 'MS-DOS'\n+653A7C Extract Zip Spec      14 (20) '2.0'\n+653A7D Extract OS            00 (0) 'MS-DOS'\n+653A7E General Purpose Flag  0000 (0)\n+653A80 Compression Method    0000 (0) 'Stored'\n+653A82 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653A86 CRC                   00000000 (0)\n+653A8A Compressed Size       00000000 (0)\n+653A8E Uncompressed Size     00000000 (0)\n+653A92 Filename Length       0064 (100)\n+653A94 Extra Length          0009 (9)\n+653A96 Comment Length        0000 (0)\n+653A98 Disk Start            0000 (0)\n+653A9A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653A9C Ext File Attributes   00000000 (0)\n+653AA0 Local Header Offset   0004BF5C (311132)\n+653AA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653AA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+653B08 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+653B0A   Length              0005 (5)\n+653B0C   Flags               01 (1) 'Modification'\n+653B0D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653B11 CENTRAL HEADER #161   02014B50 (33639248)\n+653B15 Created Zip Spec      14 (20) '2.0'\n+653B16 Created OS            00 (0) 'MS-DOS'\n+653B17 Extract Zip Spec      14 (20) '2.0'\n+653B18 Extract OS            00 (0) 'MS-DOS'\n+653B19 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+653B1B Compression Method    0000 (0) 'Stored'\n+653B1D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653B21 CRC                   8B1E3BB7 (2334014391)\n+653B25 Compressed Size       00002091 (8337)\n+653B29 Uncompressed Size     00002091 (8337)\n+653B2D Filename Length       007A (122)\n+653B2F Extra Length          0009 (9)\n+653B31 Comment Length        0000 (0)\n+653B33 Disk Start            0000 (0)\n+653B35 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653B37 Ext File Attributes   00000000 (0)\n+653B3B Local Header Offset   0004BFE7 (311271)\n+653B3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653B3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+653BB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+653BBB   Length              0005 (5)\n+653BBD   Flags               01 (1) 'Modification'\n+653BBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653BC2 CENTRAL HEADER #162   02014B50 (33639248)\n+653BC6 Created Zip Spec      14 (20) '2.0'\n+653BC7 Created OS            00 (0) 'MS-DOS'\n+653BC8 Extract Zip Spec      14 (20) '2.0'\n+653BC9 Extract OS            00 (0) 'MS-DOS'\n+653BCA General Purpose Flag  0000 (0)\n+653BCC Compression Method    0000 (0) 'Stored'\n+653BCE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653BD2 CRC                   00000000 (0)\n+653BD6 Compressed Size       00000000 (0)\n+653BDA Uncompressed Size     00000000 (0)\n+653BDE Filename Length       0025 (37)\n+653BE0 Extra Length          0009 (9)\n+653BE2 Comment Length        0000 (0)\n+653BE4 Disk Start            0000 (0)\n+653BE6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653BE8 Ext File Attributes   00000000 (0)\n+653BEC Local Header Offset   0004E129 (319785)\n+653BF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653BF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+653C15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+653C17   Length              0005 (5)\n+653C19   Flags               01 (1) 'Modification'\n+653C1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653C1E CENTRAL HEADER #163   02014B50 (33639248)\n+653C22 Created Zip Spec      14 (20) '2.0'\n+653C23 Created OS            00 (0) 'MS-DOS'\n+653C24 Extract Zip Spec      14 (20) '2.0'\n+653C25 Extract OS            00 (0) 'MS-DOS'\n+653C26 General Purpose Flag  0000 (0)\n+653C28 Compression Method    0000 (0) 'Stored'\n+653C2A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653C2E CRC                   00000000 (0)\n+653C32 Compressed Size       00000000 (0)\n+653C36 Uncompressed Size     00000000 (0)\n+653C3A Filename Length       002C (44)\n+653C3C Extra Length          0009 (9)\n+653C3E Comment Length        0000 (0)\n+653C40 Disk Start            0000 (0)\n+653C42 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653C44 Ext File Attributes   00000000 (0)\n+653C48 Local Header Offset   0004E175 (319861)\n+653C4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653C4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+653C78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+653C7A   Length              0005 (5)\n+653C7C   Flags               01 (1) 'Modification'\n+653C7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653C81 CENTRAL HEADER #164   02014B50 (33639248)\n+653C85 Created Zip Spec      14 (20) '2.0'\n+653C86 Created OS            00 (0) 'MS-DOS'\n+653C87 Extract Zip Spec      14 (20) '2.0'\n+653C88 Extract OS            00 (0) 'MS-DOS'\n+653C89 General Purpose Flag  0000 (0)\n+653C8B Compression Method    0000 (0) 'Stored'\n+653C8D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653C91 CRC                   00000000 (0)\n+653C95 Compressed Size       00000000 (0)\n+653C99 Uncompressed Size     00000000 (0)\n+653C9D Filename Length       0067 (103)\n+653C9F Extra Length          0009 (9)\n+653CA1 Comment Length        0000 (0)\n+653CA3 Disk Start            0000 (0)\n+653CA5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653CA7 Ext File Attributes   00000000 (0)\n+653CAB Local Header Offset   0004E1C8 (319944)\n+653CAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653CAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+653D16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+653D18   Length              0005 (5)\n+653D1A   Flags               01 (1) 'Modification'\n+653D1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653D1F CENTRAL HEADER #165   02014B50 (33639248)\n+653D23 Created Zip Spec      14 (20) '2.0'\n+653D24 Created OS            00 (0) 'MS-DOS'\n+653D25 Extract Zip Spec      14 (20) '2.0'\n+653D26 Extract OS            00 (0) 'MS-DOS'\n+653D27 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+653D29 Compression Method    0000 (0) 'Stored'\n+653D2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653D2F CRC                   EAE74E6F (3941027439)\n+653D33 Compressed Size       00001481 (5249)\n+653D37 Uncompressed Size     00001481 (5249)\n+653D3B Filename Length       007D (125)\n+653D3D Extra Length          0009 (9)\n+653D3F Comment Length        0000 (0)\n+653D41 Disk Start            0000 (0)\n+653D43 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653D45 Ext File Attributes   00000000 (0)\n+653D49 Local Header Offset   0004E256 (320086)\n+653D4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653D4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+653DCA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+653DCC   Length              0005 (5)\n+653DCE   Flags               01 (1) 'Modification'\n+653DCF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653DD3 CENTRAL HEADER #166   02014B50 (33639248)\n+653DD7 Created Zip Spec      14 (20) '2.0'\n+653DD8 Created OS            00 (0) 'MS-DOS'\n+653DD9 Extract Zip Spec      14 (20) '2.0'\n+653DDA Extract OS            00 (0) 'MS-DOS'\n+653DDB General Purpose Flag  0000 (0)\n+653DDD Compression Method    0000 (0) 'Stored'\n+653DDF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653DE3 CRC                   00000000 (0)\n+653DE7 Compressed Size       00000000 (0)\n+653DEB Uncompressed Size     00000000 (0)\n+653DEF Filename Length       0057 (87)\n+653DF1 Extra Length          0009 (9)\n+653DF3 Comment Length        0000 (0)\n+653DF5 Disk Start            0000 (0)\n+653DF7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653DF9 Ext File Attributes   00000000 (0)\n+653DFD Local Header Offset   0004F78B (325515)\n+653E01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653E01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+653E58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+653E5A   Length              0005 (5)\n+653E5C   Flags               01 (1) 'Modification'\n+653E5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653E61 CENTRAL HEADER #167   02014B50 (33639248)\n+653E65 Created Zip Spec      14 (20) '2.0'\n+653E66 Created OS            00 (0) 'MS-DOS'\n+653E67 Extract Zip Spec      14 (20) '2.0'\n+653E68 Extract OS            00 (0) 'MS-DOS'\n+653E69 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+653E6B Compression Method    0000 (0) 'Stored'\n+653E6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653E71 CRC                   49F8AFD7 (1241034711)\n+653E75 Compressed Size       000025C9 (9673)\n+653E79 Uncompressed Size     000025C9 (9673)\n+653E7D Filename Length       006D (109)\n+653E7F Extra Length          0009 (9)\n+653E81 Comment Length        0000 (0)\n+653E83 Disk Start            0000 (0)\n+653E85 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653E87 Ext File Attributes   00000000 (0)\n+653E8B Local Header Offset   0004F809 (325641)\n+653E8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653E8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+653EFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+653EFE   Length              0005 (5)\n+653F00   Flags               01 (1) 'Modification'\n+653F01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653F05 CENTRAL HEADER #168   02014B50 (33639248)\n+653F09 Created Zip Spec      14 (20) '2.0'\n+653F0A Created OS            00 (0) 'MS-DOS'\n+653F0B Extract Zip Spec      14 (20) '2.0'\n+653F0C Extract OS            00 (0) 'MS-DOS'\n+653F0D General Purpose Flag  0000 (0)\n+653F0F Compression Method    0000 (0) 'Stored'\n+653F11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653F15 CRC                   00000000 (0)\n+653F19 Compressed Size       00000000 (0)\n+653F1D Uncompressed Size     00000000 (0)\n+653F21 Filename Length       0056 (86)\n+653F23 Extra Length          0009 (9)\n+653F25 Comment Length        0000 (0)\n+653F27 Disk Start            0000 (0)\n+653F29 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653F2B Ext File Attributes   00000000 (0)\n+653F2F Local Header Offset   00051E76 (335478)\n+653F33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653F33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+653F89 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+653F8B   Length              0005 (5)\n+653F8D   Flags               01 (1) 'Modification'\n+653F8E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+653F92 CENTRAL HEADER #169   02014B50 (33639248)\n+653F96 Created Zip Spec      14 (20) '2.0'\n+653F97 Created OS            00 (0) 'MS-DOS'\n+653F98 Extract Zip Spec      14 (20) '2.0'\n+653F99 Extract OS            00 (0) 'MS-DOS'\n+653F9A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+653F9C Compression Method    0000 (0) 'Stored'\n+653F9E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+653FA2 CRC                   332580F8 (858095864)\n+653FA6 Compressed Size       00000E10 (3600)\n+653FAA Uncompressed Size     00000E10 (3600)\n+653FAE Filename Length       006C (108)\n+653FB0 Extra Length          0009 (9)\n+653FB2 Comment Length        0000 (0)\n+653FB4 Disk Start            0000 (0)\n+653FB6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+653FB8 Ext File Attributes   00000000 (0)\n+653FBC Local Header Offset   00051EF3 (335603)\n+653FC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x653FC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65402C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65402E   Length              0005 (5)\n+654030   Flags               01 (1) 'Modification'\n+654031   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654035 CENTRAL HEADER #170   02014B50 (33639248)\n+654039 Created Zip Spec      14 (20) '2.0'\n+65403A Created OS            00 (0) 'MS-DOS'\n+65403B Extract Zip Spec      14 (20) '2.0'\n+65403C Extract OS            00 (0) 'MS-DOS'\n+65403D General Purpose Flag  0000 (0)\n+65403F Compression Method    0000 (0) 'Stored'\n+654041 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654045 CRC                   00000000 (0)\n+654049 Compressed Size       00000000 (0)\n+65404D Uncompressed Size     00000000 (0)\n+654051 Filename Length       002E (46)\n+654053 Extra Length          0009 (9)\n+654055 Comment Length        0000 (0)\n+654057 Disk Start            0000 (0)\n+654059 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65405B Ext File Attributes   00000000 (0)\n+65405F Local Header Offset   00052DA6 (339366)\n+654063 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654063: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654091 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654093   Length              0005 (5)\n+654095   Flags               01 (1) 'Modification'\n+654096   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65409A CENTRAL HEADER #171   02014B50 (33639248)\n+65409E Created Zip Spec      14 (20) '2.0'\n+65409F Created OS            00 (0) 'MS-DOS'\n+6540A0 Extract Zip Spec      14 (20) '2.0'\n+6540A1 Extract OS            00 (0) 'MS-DOS'\n+6540A2 General Purpose Flag  0000 (0)\n+6540A4 Compression Method    0000 (0) 'Stored'\n+6540A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6540AA CRC                   00000000 (0)\n+6540AE Compressed Size       00000000 (0)\n+6540B2 Uncompressed Size     00000000 (0)\n+6540B6 Filename Length       0035 (53)\n+6540B8 Extra Length          0009 (9)\n+6540BA Comment Length        0000 (0)\n+6540BC Disk Start            0000 (0)\n+6540BE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6540C0 Ext File Attributes   00000000 (0)\n+6540C4 Local Header Offset   00052DFB (339451)\n+6540C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6540C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6540FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6540FF   Length              0005 (5)\n+654101   Flags               01 (1) 'Modification'\n+654102   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654106 CENTRAL HEADER #172   02014B50 (33639248)\n+65410A Created Zip Spec      14 (20) '2.0'\n+65410B Created OS            00 (0) 'MS-DOS'\n+65410C Extract Zip Spec      14 (20) '2.0'\n+65410D Extract OS            00 (0) 'MS-DOS'\n+65410E General Purpose Flag  0000 (0)\n+654110 Compression Method    0000 (0) 'Stored'\n+654112 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654116 CRC                   00000000 (0)\n+65411A Compressed Size       00000000 (0)\n+65411E Uncompressed Size     00000000 (0)\n+654122 Filename Length       0079 (121)\n+654124 Extra Length          0009 (9)\n+654126 Comment Length        0000 (0)\n+654128 Disk Start            0000 (0)\n+65412A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65412C Ext File Attributes   00000000 (0)\n+654130 Local Header Offset   00052E57 (339543)\n+654134 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654134: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6541AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6541AF   Length              0005 (5)\n+6541B1   Flags               01 (1) 'Modification'\n+6541B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6541B6 CENTRAL HEADER #173   02014B50 (33639248)\n+6541BA Created Zip Spec      14 (20) '2.0'\n+6541BB Created OS            00 (0) 'MS-DOS'\n+6541BC Extract Zip Spec      14 (20) '2.0'\n+6541BD Extract OS            00 (0) 'MS-DOS'\n+6541BE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6541C0 Compression Method    0000 (0) 'Stored'\n+6541C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6541C6 CRC                   0D142FFC (219426812)\n+6541CA Compressed Size       00001A7B (6779)\n+6541CE Uncompressed Size     00001A7B (6779)\n+6541D2 Filename Length       008F (143)\n+6541D4 Extra Length          0009 (9)\n+6541D6 Comment Length        0000 (0)\n+6541D8 Disk Start            0000 (0)\n+6541DA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6541DC Ext File Attributes   00000000 (0)\n+6541E0 Local Header Offset   00052EF7 (339703)\n+6541E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6505BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65064E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650650   Length              0005 (5)\n-650652   Flags               01 (1) 'Modification'\n-650653   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-650657 CENTRAL HEADER #174   02014B50 (33639248)\n-65065B Created Zip Spec      14 (20) '2.0'\n-65065C Created OS            00 (0) 'MS-DOS'\n-65065D Extract Zip Spec      14 (20) '2.0'\n-65065E Extract OS            00 (0) 'MS-DOS'\n-65065F General Purpose Flag  0000 (0)\n-650661 Compression Method    0000 (0) 'Stored'\n-650663 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-650667 CRC                   00000000 (0)\n-65066B Compressed Size       00000000 (0)\n-65066F Uncompressed Size     00000000 (0)\n-650673 Filename Length       0031 (49)\n-650675 Extra Length          0009 (9)\n-650677 Comment Length        0000 (0)\n-650679 Disk Start            0000 (0)\n-65067B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65067D Ext File Attributes   00000000 (0)\n-650681 Local Header Offset   00051070 (331888)\n-650685 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x650685: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6506B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6506B8   Length              0005 (5)\n-6506BA   Flags               01 (1) 'Modification'\n-6506BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6506BF CENTRAL HEADER #175   02014B50 (33639248)\n-6506C3 Created Zip Spec      14 (20) '2.0'\n-6506C4 Created OS            00 (0) 'MS-DOS'\n-6506C5 Extract Zip Spec      14 (20) '2.0'\n-6506C6 Extract OS            00 (0) 'MS-DOS'\n-6506C7 General Purpose Flag  0000 (0)\n-6506C9 Compression Method    0000 (0) 'Stored'\n-6506CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6506CF CRC                   00000000 (0)\n-6506D3 Compressed Size       00000000 (0)\n-6506D7 Uncompressed Size     00000000 (0)\n-6506DB Filename Length       0038 (56)\n-6506DD Extra Length          0009 (9)\n-6506DF Comment Length        0000 (0)\n-6506E1 Disk Start            0000 (0)\n-6506E3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6506E5 Ext File Attributes   00000000 (0)\n-6506E9 Local Header Offset   000510C8 (331976)\n-6506ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6506ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650725 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650727   Length              0005 (5)\n-650729   Flags               01 (1) 'Modification'\n-65072A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65072E CENTRAL HEADER #176   02014B50 (33639248)\n-650732 Created Zip Spec      14 (20) '2.0'\n-650733 Created OS            00 (0) 'MS-DOS'\n-650734 Extract Zip Spec      14 (20) '2.0'\n-650735 Extract OS            00 (0) 'MS-DOS'\n-650736 General Purpose Flag  0000 (0)\n-650738 Compression Method    0000 (0) 'Stored'\n-65073A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65073E CRC                   00000000 (0)\n-650742 Compressed Size       00000000 (0)\n-650746 Uncompressed Size     00000000 (0)\n-65074A Filename Length       007F (127)\n-65074C Extra Length          0009 (9)\n-65074E Comment Length        0000 (0)\n-650750 Disk Start            0000 (0)\n-650752 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650754 Ext File Attributes   00000000 (0)\n-650758 Local Header Offset   00051127 (332071)\n-65075C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65075C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6507DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6507DD   Length              0005 (5)\n-6507DF   Flags               01 (1) 'Modification'\n-6507E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6507E4 CENTRAL HEADER #177   02014B50 (33639248)\n-6507E8 Created Zip Spec      14 (20) '2.0'\n-6507E9 Created OS            00 (0) 'MS-DOS'\n-6507EA Extract Zip Spec      14 (20) '2.0'\n-6507EB Extract OS            00 (0) 'MS-DOS'\n-6507EC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6507EE Compression Method    0000 (0) 'Stored'\n-6507F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6507F4 CRC                   726CFBF2 (1919745010)\n-6507F8 Compressed Size       00000886 (2182)\n-6507FC Uncompressed Size     00000886 (2182)\n-650800 Filename Length       0095 (149)\n-650802 Extra Length          0009 (9)\n-650804 Comment Length        0000 (0)\n-650806 Disk Start            0000 (0)\n-650808 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65080A Ext File Attributes   00000000 (0)\n-65080E Local Header Offset   000511CD (332237)\n-650812 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x650812: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6508A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6508A9   Length              0005 (5)\n-6508AB   Flags               01 (1) 'Modification'\n-6508AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6508B0 CENTRAL HEADER #178   02014B50 (33639248)\n-6508B4 Created Zip Spec      14 (20) '2.0'\n-6508B5 Created OS            00 (0) 'MS-DOS'\n-6508B6 Extract Zip Spec      14 (20) '2.0'\n-6508B7 Extract OS            00 (0) 'MS-DOS'\n-6508B8 General Purpose Flag  0000 (0)\n-6508BA Compression Method    0000 (0) 'Stored'\n-6508BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6508C0 CRC                   00000000 (0)\n-6508C4 Compressed Size       00000000 (0)\n-6508C8 Uncompressed Size     00000000 (0)\n-6508CC Filename Length       0086 (134)\n-6508CE Extra Length          0009 (9)\n-6508D0 Comment Length        0000 (0)\n-6508D2 Disk Start            0000 (0)\n-6508D4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6508D6 Ext File Attributes   00000000 (0)\n-6508DA Local Header Offset   00051B1F (334623)\n-6508DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XX'\n-#\n-# WARNING: Offset 0x6508DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650964 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650966   Length              0005 (5)\n-650968   Flags               01 (1) 'Modification'\n-650969   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65096D CENTRAL HEADER #179   02014B50 (33639248)\n-650971 Created Zip Spec      14 (20) '2.0'\n-650972 Created OS            00 (0) 'MS-DOS'\n-650973 Extract Zip Spec      14 (20) '2.0'\n-650974 Extract OS            00 (0) 'MS-DOS'\n-650975 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-650977 Compression Method    0000 (0) 'Stored'\n-650979 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65097D CRC                   0124A640 (19179072)\n-650981 Compressed Size       00001071 (4209)\n-650985 Uncompressed Size     00001071 (4209)\n-650989 Filename Length       009C (156)\n-65098B Extra Length          0009 (9)\n-65098D Comment Length        0000 (0)\n-65098F Disk Start            0000 (0)\n-650991 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650993 Ext File Attributes   00000000 (0)\n-650997 Local Header Offset   00051BCC (334796)\n-65099B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65099B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650A37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650A39   Length              0005 (5)\n-650A3B   Flags               01 (1) 'Modification'\n-650A3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-650A40 CENTRAL HEADER #180   02014B50 (33639248)\n-650A44 Created Zip Spec      14 (20) '2.0'\n-650A45 Created OS            00 (0) 'MS-DOS'\n-650A46 Extract Zip Spec      14 (20) '2.0'\n-650A47 Extract OS            00 (0) 'MS-DOS'\n-650A48 General Purpose Flag  0000 (0)\n-650A4A Compression Method    0000 (0) 'Stored'\n-650A4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-650A50 CRC                   00000000 (0)\n-650A54 Compressed Size       00000000 (0)\n-650A58 Uncompressed Size     00000000 (0)\n-650A5C Filename Length       0086 (134)\n-650A5E Extra Length          0009 (9)\n-650A60 Comment Length        0000 (0)\n-650A62 Disk Start            0000 (0)\n-650A64 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650A66 Ext File Attributes   00000000 (0)\n-650A6A Local Header Offset   00052D10 (339216)\n-650A6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XX'\n-#\n-# WARNING: Offset 0x650A6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650AF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650AF6   Length              0005 (5)\n-650AF8   Flags               01 (1) 'Modification'\n-650AF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-650AFD CENTRAL HEADER #181   02014B50 (33639248)\n-650B01 Created Zip Spec      14 (20) '2.0'\n-650B02 Created OS            00 (0) 'MS-DOS'\n-650B03 Extract Zip Spec      14 (20) '2.0'\n-650B04 Extract OS            00 (0) 'MS-DOS'\n-650B05 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-650B07 Compression Method    0000 (0) 'Stored'\n-650B09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-650B0D CRC                   7E793C9C (2121874588)\n-650B11 Compressed Size       000008CC (2252)\n-650B15 Uncompressed Size     000008CC (2252)\n-650B19 Filename Length       009C (156)\n-650B1B Extra Length          0009 (9)\n-650B1D Comment Length        0000 (0)\n-650B1F Disk Start            0000 (0)\n-650B21 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650B23 Ext File Attributes   00000000 (0)\n-650B27 Local Header Offset   00052DBD (339389)\n-650B2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x650B2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650BC7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650BC9   Length              0005 (5)\n-650BCB   Flags               01 (1) 'Modification'\n-650BCC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-650BD0 CENTRAL HEADER #182   02014B50 (33639248)\n-650BD4 Created Zip Spec      14 (20) '2.0'\n-650BD5 Created OS            00 (0) 'MS-DOS'\n-650BD6 Extract Zip Spec      14 (20) '2.0'\n-650BD7 Extract OS            00 (0) 'MS-DOS'\n-650BD8 General Purpose Flag  0000 (0)\n-650BDA Compression Method    0000 (0) 'Stored'\n-650BDC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-650BE0 CRC                   00000000 (0)\n-650BE4 Compressed Size       00000000 (0)\n-650BE8 Uncompressed Size     00000000 (0)\n-650BEC Filename Length       0024 (36)\n-650BEE Extra Length          0009 (9)\n-650BF0 Comment Length        0000 (0)\n-650BF2 Disk Start            0000 (0)\n-650BF4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650BF6 Ext File Attributes   00000000 (0)\n-650BFA Local Header Offset   0005375C (341852)\n-650BFE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x650BFE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650C22 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650C24   Length              0005 (5)\n-650C26   Flags               01 (1) 'Modification'\n-650C27   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-650C2B CENTRAL HEADER #183   02014B50 (33639248)\n-650C2F Created Zip Spec      14 (20) '2.0'\n-650C30 Created OS            00 (0) 'MS-DOS'\n-650C31 Extract Zip Spec      14 (20) '2.0'\n-650C32 Extract OS            00 (0) 'MS-DOS'\n-650C33 General Purpose Flag  0000 (0)\n-650C35 Compression Method    0000 (0) 'Stored'\n-650C37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-650C3B CRC                   00000000 (0)\n-650C3F Compressed Size       00000000 (0)\n-650C43 Uncompressed Size     00000000 (0)\n-650C47 Filename Length       002B (43)\n-650C49 Extra Length          0009 (9)\n-650C4B Comment Length        0000 (0)\n-650C4D Disk Start            0000 (0)\n-650C4F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650C51 Ext File Attributes   00000000 (0)\n-650C55 Local Header Offset   000537A7 (341927)\n-650C59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x650C59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650C84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650C86   Length              0005 (5)\n-650C88   Flags               01 (1) 'Modification'\n-650C89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-650C8D CENTRAL HEADER #184   02014B50 (33639248)\n-650C91 Created Zip Spec      14 (20) '2.0'\n-650C92 Created OS            00 (0) 'MS-DOS'\n-650C93 Extract Zip Spec      14 (20) '2.0'\n-650C94 Extract OS            00 (0) 'MS-DOS'\n-650C95 General Purpose Flag  0000 (0)\n-650C97 Compression Method    0000 (0) 'Stored'\n-650C99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-650C9D CRC                   00000000 (0)\n-650CA1 Compressed Size       00000000 (0)\n-650CA5 Uncompressed Size     00000000 (0)\n-650CA9 Filename Length       0052 (82)\n-650CAB Extra Length          0009 (9)\n-650CAD Comment Length        0000 (0)\n-650CAF Disk Start            0000 (0)\n-650CB1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650CB3 Ext File Attributes   00000000 (0)\n-650CB7 Local Header Offset   000537F9 (342009)\n-650CBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x650CBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650D0D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650D0F   Length              0005 (5)\n-650D11   Flags               01 (1) 'Modification'\n-650D12   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-650D16 CENTRAL HEADER #185   02014B50 (33639248)\n-650D1A Created Zip Spec      14 (20) '2.0'\n-650D1B Created OS            00 (0) 'MS-DOS'\n-650D1C Extract Zip Spec      14 (20) '2.0'\n-650D1D Extract OS            00 (0) 'MS-DOS'\n-650D1E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-650D20 Compression Method    0000 (0) 'Stored'\n-650D22 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-650D26 CRC                   A8584B88 (2824358792)\n-650D2A Compressed Size       0000070D (1805)\n-650D2E Uncompressed Size     0000070D (1805)\n-650D32 Filename Length       0068 (104)\n-650D34 Extra Length          0009 (9)\n-650D36 Comment Length        0000 (0)\n-650D38 Disk Start            0000 (0)\n-650D3A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650D3C Ext File Attributes   00000000 (0)\n-650D40 Local Header Offset   00053872 (342130)\n-650D44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x650D44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650DAC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650DAE   Length              0005 (5)\n-650DB0   Flags               01 (1) 'Modification'\n-650DB1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-650DB5 CENTRAL HEADER #186   02014B50 (33639248)\n-650DB9 Created Zip Spec      14 (20) '2.0'\n-650DBA Created OS            00 (0) 'MS-DOS'\n-650DBB Extract Zip Spec      14 (20) '2.0'\n-650DBC Extract OS            00 (0) 'MS-DOS'\n-650DBD General Purpose Flag  0000 (0)\n-650DBF Compression Method    0000 (0) 'Stored'\n-650DC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-650DC5 CRC                   00000000 (0)\n-650DC9 Compressed Size       00000000 (0)\n-650DCD Uncompressed Size     00000000 (0)\n-650DD1 Filename Length       004E (78)\n-650DD3 Extra Length          0009 (9)\n-650DD5 Comment Length        0000 (0)\n-650DD7 Disk Start            0000 (0)\n-650DD9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650DDB Ext File Attributes   00000000 (0)\n-650DDF Local Header Offset   0005401E (344094)\n-650DE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x650DE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650E31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650E33   Length              0005 (5)\n-650E35   Flags               01 (1) 'Modification'\n-650E36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-650E3A CENTRAL HEADER #187   02014B50 (33639248)\n-650E3E Created Zip Spec      14 (20) '2.0'\n-650E3F Created OS            00 (0) 'MS-DOS'\n-650E40 Extract Zip Spec      14 (20) '2.0'\n-650E41 Extract OS            00 (0) 'MS-DOS'\n-650E42 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-650E44 Compression Method    0000 (0) 'Stored'\n-650E46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-650E4A CRC                   A8336B4A (2821942090)\n-650E4E Compressed Size       00000760 (1888)\n-650E52 Uncompressed Size     00000760 (1888)\n-650E56 Filename Length       0064 (100)\n-650E58 Extra Length          0009 (9)\n-650E5A Comment Length        0000 (0)\n-650E5C Disk Start            0000 (0)\n-650E5E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650E60 Ext File Attributes   00000000 (0)\n-650E64 Local Header Offset   00054093 (344211)\n-650E68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x650E68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650ECC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650ECE   Length              0005 (5)\n-650ED0   Flags               01 (1) 'Modification'\n-650ED1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-650ED5 CENTRAL HEADER #188   02014B50 (33639248)\n-650ED9 Created Zip Spec      14 (20) '2.0'\n-650EDA Created OS            00 (0) 'MS-DOS'\n-650EDB Extract Zip Spec      14 (20) '2.0'\n-650EDC Extract OS            00 (0) 'MS-DOS'\n-650EDD General Purpose Flag  0000 (0)\n-650EDF Compression Method    0000 (0) 'Stored'\n-650EE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-650EE5 CRC                   00000000 (0)\n-650EE9 Compressed Size       00000000 (0)\n-650EED Uncompressed Size     00000000 (0)\n-650EF1 Filename Length       004E (78)\n-650EF3 Extra Length          0009 (9)\n-650EF5 Comment Length        0000 (0)\n-650EF7 Disk Start            0000 (0)\n-650EF9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650EFB Ext File Attributes   00000000 (0)\n-650EFF Local Header Offset   0005488E (346254)\n-650F03 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x650F03: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650F51 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650F53   Length              0005 (5)\n-650F55   Flags               01 (1) 'Modification'\n-650F56   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-650F5A CENTRAL HEADER #189   02014B50 (33639248)\n-650F5E Created Zip Spec      14 (20) '2.0'\n-650F5F Created OS            00 (0) 'MS-DOS'\n-650F60 Extract Zip Spec      14 (20) '2.0'\n-650F61 Extract OS            00 (0) 'MS-DOS'\n-650F62 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-650F64 Compression Method    0000 (0) 'Stored'\n-650F66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-650F6A CRC                   7559BE1A (1968815642)\n-650F6E Compressed Size       00000764 (1892)\n-650F72 Uncompressed Size     00000764 (1892)\n-650F76 Filename Length       0064 (100)\n-650F78 Extra Length          0009 (9)\n-650F7A Comment Length        0000 (0)\n-650F7C Disk Start            0000 (0)\n-650F7E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-650F80 Ext File Attributes   00000000 (0)\n-650F84 Local Header Offset   00054903 (346371)\n-650F88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x650F88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-650FEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-650FEE   Length              0005 (5)\n-650FF0   Flags               01 (1) 'Modification'\n-650FF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-650FF5 CENTRAL HEADER #190   02014B50 (33639248)\n-650FF9 Created Zip Spec      14 (20) '2.0'\n-650FFA Created OS            00 (0) 'MS-DOS'\n-650FFB Extract Zip Spec      14 (20) '2.0'\n-650FFC Extract OS            00 (0) 'MS-DOS'\n-650FFD General Purpose Flag  0000 (0)\n-650FFF Compression Method    0000 (0) 'Stored'\n-651001 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651005 CRC                   00000000 (0)\n-651009 Compressed Size       00000000 (0)\n-65100D Uncompressed Size     00000000 (0)\n-651011 Filename Length       0050 (80)\n-651013 Extra Length          0009 (9)\n-651015 Comment Length        0000 (0)\n-651017 Disk Start            0000 (0)\n-651019 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65101B Ext File Attributes   00000000 (0)\n-65101F Local Header Offset   00055102 (348418)\n-651023 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651023: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-651073 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651075   Length              0005 (5)\n-651077   Flags               01 (1) 'Modification'\n-651078   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65107C CENTRAL HEADER #191   02014B50 (33639248)\n-651080 Created Zip Spec      14 (20) '2.0'\n-651081 Created OS            00 (0) 'MS-DOS'\n-651082 Extract Zip Spec      14 (20) '2.0'\n-651083 Extract OS            00 (0) 'MS-DOS'\n-651084 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-651086 Compression Method    0000 (0) 'Stored'\n-651088 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65108C CRC                   F2039839 (4060321849)\n-651090 Compressed Size       00000F35 (3893)\n-651094 Uncompressed Size     00000F35 (3893)\n-651098 Filename Length       0066 (102)\n-65109A Extra Length          0009 (9)\n-65109C Comment Length        0000 (0)\n-65109E Disk Start            0000 (0)\n-6510A0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6510A2 Ext File Attributes   00000000 (0)\n-6510A6 Local Header Offset   00055179 (348537)\n-6510AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6510AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-651110 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651112   Length              0005 (5)\n-651114   Flags               01 (1) 'Modification'\n-651115   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651119 CENTRAL HEADER #192   02014B50 (33639248)\n-65111D Created Zip Spec      14 (20) '2.0'\n-65111E Created OS            00 (0) 'MS-DOS'\n-65111F Extract Zip Spec      14 (20) '2.0'\n-651120 Extract OS            00 (0) 'MS-DOS'\n-651121 General Purpose Flag  0000 (0)\n-651123 Compression Method    0000 (0) 'Stored'\n-651125 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651129 CRC                   00000000 (0)\n-65112D Compressed Size       00000000 (0)\n-651131 Uncompressed Size     00000000 (0)\n-651135 Filename Length       0026 (38)\n-651137 Extra Length          0009 (9)\n-651139 Comment Length        0000 (0)\n-65113B Disk Start            0000 (0)\n-65113D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65113F Ext File Attributes   00000000 (0)\n-651143 Local Header Offset   0005614B (352587)\n-651147 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651147: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65116D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65116F   Length              0005 (5)\n-651171   Flags               01 (1) 'Modification'\n-651172   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651176 CENTRAL HEADER #193   02014B50 (33639248)\n-65117A Created Zip Spec      14 (20) '2.0'\n-65117B Created OS            00 (0) 'MS-DOS'\n-65117C Extract Zip Spec      14 (20) '2.0'\n-65117D Extract OS            00 (0) 'MS-DOS'\n-65117E General Purpose Flag  0000 (0)\n-651180 Compression Method    0000 (0) 'Stored'\n-651182 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651186 CRC                   00000000 (0)\n-65118A Compressed Size       00000000 (0)\n-65118E Uncompressed Size     00000000 (0)\n-651192 Filename Length       002D (45)\n-651194 Extra Length          0009 (9)\n-651196 Comment Length        0000 (0)\n-651198 Disk Start            0000 (0)\n-65119A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65119C Ext File Attributes   00000000 (0)\n-6511A0 Local Header Offset   00056198 (352664)\n-6511A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6511A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6511D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6511D3   Length              0005 (5)\n-6511D5   Flags               01 (1) 'Modification'\n-6511D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6511DA CENTRAL HEADER #194   02014B50 (33639248)\n-6511DE Created Zip Spec      14 (20) '2.0'\n-6511DF Created OS            00 (0) 'MS-DOS'\n-6511E0 Extract Zip Spec      14 (20) '2.0'\n-6511E1 Extract OS            00 (0) 'MS-DOS'\n-6511E2 General Purpose Flag  0000 (0)\n-6511E4 Compression Method    0000 (0) 'Stored'\n-6511E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6511EA CRC                   00000000 (0)\n-6511EE Compressed Size       00000000 (0)\n-6511F2 Uncompressed Size     00000000 (0)\n-6511F6 Filename Length       005B (91)\n-6511F8 Extra Length          0009 (9)\n-6511FA Comment Length        0000 (0)\n-6511FC Disk Start            0000 (0)\n-6511FE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-651200 Ext File Attributes   00000000 (0)\n-651204 Local Header Offset   000561EC (352748)\n-651208 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651208: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-651263 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651265   Length              0005 (5)\n-651267   Flags               01 (1) 'Modification'\n-651268   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65126C CENTRAL HEADER #195   02014B50 (33639248)\n-651270 Created Zip Spec      14 (20) '2.0'\n-651271 Created OS            00 (0) 'MS-DOS'\n-651272 Extract Zip Spec      14 (20) '2.0'\n-651273 Extract OS            00 (0) 'MS-DOS'\n-651274 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-651276 Compression Method    0000 (0) 'Stored'\n-651278 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65127C CRC                   4C048087 (1275363463)\n-651280 Compressed Size       00000861 (2145)\n-651284 Uncompressed Size     00000861 (2145)\n-651288 Filename Length       0071 (113)\n-65128A Extra Length          0009 (9)\n-65128C Comment Length        0000 (0)\n-65128E Disk Start            0000 (0)\n-651290 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-651292 Ext File Attributes   00000000 (0)\n-651296 Local Header Offset   0005626E (352878)\n-65129A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65129A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65130B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65130D   Length              0005 (5)\n-65130F   Flags               01 (1) 'Modification'\n-651310   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651314 CENTRAL HEADER #196   02014B50 (33639248)\n-651318 Created Zip Spec      14 (20) '2.0'\n-651319 Created OS            00 (0) 'MS-DOS'\n-65131A Extract Zip Spec      14 (20) '2.0'\n-65131B Extract OS            00 (0) 'MS-DOS'\n-65131C General Purpose Flag  0000 (0)\n-65131E Compression Method    0000 (0) 'Stored'\n-651320 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651324 CRC                   00000000 (0)\n-651328 Compressed Size       00000000 (0)\n-65132C Uncompressed Size     00000000 (0)\n-651330 Filename Length       002D (45)\n-651332 Extra Length          0009 (9)\n-651334 Comment Length        0000 (0)\n-651336 Disk Start            0000 (0)\n-651338 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65133A Ext File Attributes   00000000 (0)\n-65133E Local Header Offset   00056B77 (355191)\n-651342 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651342: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65136F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651371   Length              0005 (5)\n-651373   Flags               01 (1) 'Modification'\n-651374   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651378 CENTRAL HEADER #197   02014B50 (33639248)\n-65137C Created Zip Spec      14 (20) '2.0'\n-65137D Created OS            00 (0) 'MS-DOS'\n-65137E Extract Zip Spec      14 (20) '2.0'\n-65137F Extract OS            00 (0) 'MS-DOS'\n-651380 General Purpose Flag  0000 (0)\n-651382 Compression Method    0000 (0) 'Stored'\n-651384 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651388 CRC                   00000000 (0)\n-65138C Compressed Size       00000000 (0)\n-651390 Uncompressed Size     00000000 (0)\n-651394 Filename Length       0034 (52)\n-651396 Extra Length          0009 (9)\n-651398 Comment Length        0000 (0)\n-65139A Disk Start            0000 (0)\n-65139C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65139E Ext File Attributes   00000000 (0)\n-6513A2 Local Header Offset   00056BCB (355275)\n-6513A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6513A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6513DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6513DC   Length              0005 (5)\n-6513DE   Flags               01 (1) 'Modification'\n-6513DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6513E3 CENTRAL HEADER #198   02014B50 (33639248)\n-6513E7 Created Zip Spec      14 (20) '2.0'\n-6513E8 Created OS            00 (0) 'MS-DOS'\n-6513E9 Extract Zip Spec      14 (20) '2.0'\n-6513EA Extract OS            00 (0) 'MS-DOS'\n-6513EB General Purpose Flag  0000 (0)\n-6513ED Compression Method    0000 (0) 'Stored'\n-6513EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6513F3 CRC                   00000000 (0)\n-6513F7 Compressed Size       00000000 (0)\n-6513FB Uncompressed Size     00000000 (0)\n-6513FF Filename Length       0068 (104)\n-651401 Extra Length          0009 (9)\n-651403 Comment Length        0000 (0)\n-651405 Disk Start            0000 (0)\n-651407 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-651409 Ext File Attributes   00000000 (0)\n-65140D Local Header Offset   00056C26 (355366)\n-651411 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651411: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-651479 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65147B   Length              0005 (5)\n-65147D   Flags               01 (1) 'Modification'\n-65147E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651482 CENTRAL HEADER #199   02014B50 (33639248)\n-651486 Created Zip Spec      14 (20) '2.0'\n-651487 Created OS            00 (0) 'MS-DOS'\n-651488 Extract Zip Spec      14 (20) '2.0'\n-651489 Extract OS            00 (0) 'MS-DOS'\n-65148A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65148C Compression Method    0000 (0) 'Stored'\n-65148E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651492 CRC                   877B2EE8 (2272997096)\n-651496 Compressed Size       0000215E (8542)\n-65149A Uncompressed Size     0000215E (8542)\n-65149E Filename Length       007E (126)\n-6514A0 Extra Length          0009 (9)\n-6514A2 Comment Length        0000 (0)\n-6514A4 Disk Start            0000 (0)\n-6514A6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6514A8 Ext File Attributes   00000000 (0)\n-6514AC Local Header Offset   00056CB5 (355509)\n-6514B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6514B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65152E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651530   Length              0005 (5)\n-651532   Flags               01 (1) 'Modification'\n-651533   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651537 CENTRAL HEADER #200   02014B50 (33639248)\n-65153B Created Zip Spec      14 (20) '2.0'\n-65153C Created OS            00 (0) 'MS-DOS'\n-65153D Extract Zip Spec      14 (20) '2.0'\n-65153E Extract OS            00 (0) 'MS-DOS'\n-65153F General Purpose Flag  0000 (0)\n-651541 Compression Method    0000 (0) 'Stored'\n-651543 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651547 CRC                   00000000 (0)\n-65154B Compressed Size       00000000 (0)\n-65154F Uncompressed Size     00000000 (0)\n-651553 Filename Length       006C (108)\n-651555 Extra Length          0009 (9)\n-651557 Comment Length        0000 (0)\n-651559 Disk Start            0000 (0)\n-65155B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65155D Ext File Attributes   00000000 (0)\n-651561 Local Header Offset   00058EC8 (364232)\n-651565 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651565: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6515D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6515D3   Length              0005 (5)\n-6515D5   Flags               01 (1) 'Modification'\n-6515D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6515DA CENTRAL HEADER #201   02014B50 (33639248)\n-6515DE Created Zip Spec      14 (20) '2.0'\n-6515DF Created OS            00 (0) 'MS-DOS'\n-6515E0 Extract Zip Spec      14 (20) '2.0'\n-6515E1 Extract OS            00 (0) 'MS-DOS'\n-6515E2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6515E4 Compression Method    0000 (0) 'Stored'\n-6515E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6515EA CRC                   E43D22D5 (3829211861)\n-6515EE Compressed Size       0000147F (5247)\n-6515F2 Uncompressed Size     0000147F (5247)\n-6515F6 Filename Length       0082 (130)\n-6515F8 Extra Length          0009 (9)\n-6515FA Comment Length        0000 (0)\n-6515FC Disk Start            0000 (0)\n-6515FE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-651600 Ext File Attributes   00000000 (0)\n-651604 Local Header Offset   00058F5B (364379)\n-651608 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651608: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65168A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65168C   Length              0005 (5)\n-65168E   Flags               01 (1) 'Modification'\n-65168F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651693 CENTRAL HEADER #202   02014B50 (33639248)\n-651697 Created Zip Spec      14 (20) '2.0'\n-651698 Created OS            00 (0) 'MS-DOS'\n-651699 Extract Zip Spec      14 (20) '2.0'\n-65169A Extract OS            00 (0) 'MS-DOS'\n-65169B General Purpose Flag  0000 (0)\n-65169D Compression Method    0000 (0) 'Stored'\n-65169F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6516A3 CRC                   00000000 (0)\n-6516A7 Compressed Size       00000000 (0)\n-6516AB Uncompressed Size     00000000 (0)\n-6516AF Filename Length       005E (94)\n-6516B1 Extra Length          0009 (9)\n-6516B3 Comment Length        0000 (0)\n-6516B5 Disk Start            0000 (0)\n-6516B7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6516B9 Ext File Attributes   00000000 (0)\n-6516BD Local Header Offset   0005A493 (369811)\n-6516C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6516C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65171F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651721   Length              0005 (5)\n-651723   Flags               01 (1) 'Modification'\n-651724   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651728 CENTRAL HEADER #203   02014B50 (33639248)\n-65172C Created Zip Spec      14 (20) '2.0'\n-65172D Created OS            00 (0) 'MS-DOS'\n-65172E Extract Zip Spec      14 (20) '2.0'\n-65172F Extract OS            00 (0) 'MS-DOS'\n-651730 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-651732 Compression Method    0000 (0) 'Stored'\n-651734 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651738 CRC                   D765846F (3613754479)\n-65173C Compressed Size       00001060 (4192)\n-651740 Uncompressed Size     00001060 (4192)\n-651744 Filename Length       0074 (116)\n-651746 Extra Length          0009 (9)\n-651748 Comment Length        0000 (0)\n-65174A Disk Start            0000 (0)\n-65174C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65174E Ext File Attributes   00000000 (0)\n-651752 Local Header Offset   0005A518 (369944)\n-651756 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651756: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6517CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6517CC   Length              0005 (5)\n-6517CE   Flags               01 (1) 'Modification'\n-6517CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6517D3 CENTRAL HEADER #204   02014B50 (33639248)\n-6517D7 Created Zip Spec      14 (20) '2.0'\n-6517D8 Created OS            00 (0) 'MS-DOS'\n-6517D9 Extract Zip Spec      14 (20) '2.0'\n-6517DA Extract OS            00 (0) 'MS-DOS'\n-6517DB General Purpose Flag  0000 (0)\n-6517DD Compression Method    0000 (0) 'Stored'\n-6517DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6517E3 CRC                   00000000 (0)\n-6517E7 Compressed Size       00000000 (0)\n-6517EB Uncompressed Size     00000000 (0)\n-6517EF Filename Length       005E (94)\n-6517F1 Extra Length          0009 (9)\n-6517F3 Comment Length        0000 (0)\n-6517F5 Disk Start            0000 (0)\n-6517F7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6517F9 Ext File Attributes   00000000 (0)\n-6517FD Local Header Offset   0005B623 (374307)\n-651801 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651801: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65185F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651861   Length              0005 (5)\n-651863   Flags               01 (1) 'Modification'\n-651864   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651868 CENTRAL HEADER #205   02014B50 (33639248)\n-65186C Created Zip Spec      14 (20) '2.0'\n-65186D Created OS            00 (0) 'MS-DOS'\n-65186E Extract Zip Spec      14 (20) '2.0'\n-65186F Extract OS            00 (0) 'MS-DOS'\n-651870 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-651872 Compression Method    0000 (0) 'Stored'\n-651874 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651878 CRC                   57E394F3 (1474532595)\n-65187C Compressed Size       0000115C (4444)\n-651880 Uncompressed Size     0000115C (4444)\n-651884 Filename Length       0074 (116)\n-651886 Extra Length          0009 (9)\n-651888 Comment Length        0000 (0)\n-65188A Disk Start            0000 (0)\n-65188C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65188E Ext File Attributes   00000000 (0)\n-651892 Local Header Offset   0005B6A8 (374440)\n-651896 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651896: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65190A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65190C   Length              0005 (5)\n-65190E   Flags               01 (1) 'Modification'\n-65190F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651913 CENTRAL HEADER #206   02014B50 (33639248)\n-651917 Created Zip Spec      14 (20) '2.0'\n-651918 Created OS            00 (0) 'MS-DOS'\n-651919 Extract Zip Spec      14 (20) '2.0'\n-65191A Extract OS            00 (0) 'MS-DOS'\n-65191B General Purpose Flag  0000 (0)\n-65191D Compression Method    0000 (0) 'Stored'\n-65191F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651923 CRC                   00000000 (0)\n-651927 Compressed Size       00000000 (0)\n-65192B Uncompressed Size     00000000 (0)\n-65192F Filename Length       0028 (40)\n-651931 Extra Length          0009 (9)\n-651933 Comment Length        0000 (0)\n-651935 Disk Start            0000 (0)\n-651937 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-651939 Ext File Attributes   00000000 (0)\n-65193D Local Header Offset   0005C8AF (379055)\n-651941 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651941: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-651969 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65196B   Length              0005 (5)\n-65196D   Flags               01 (1) 'Modification'\n-65196E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651972 CENTRAL HEADER #207   02014B50 (33639248)\n-651976 Created Zip Spec      14 (20) '2.0'\n-651977 Created OS            00 (0) 'MS-DOS'\n-651978 Extract Zip Spec      14 (20) '2.0'\n-651979 Extract OS            00 (0) 'MS-DOS'\n-65197A General Purpose Flag  0000 (0)\n-65197C Compression Method    0000 (0) 'Stored'\n-65197E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651982 CRC                   00000000 (0)\n-651986 Compressed Size       00000000 (0)\n-65198A Uncompressed Size     00000000 (0)\n-65198E Filename Length       002F (47)\n-651990 Extra Length          0009 (9)\n-651992 Comment Length        0000 (0)\n-651994 Disk Start            0000 (0)\n-651996 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-651998 Ext File Attributes   00000000 (0)\n-65199C Local Header Offset   0005C8FE (379134)\n-6519A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6519A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6519CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6519D1   Length              0005 (5)\n-6519D3   Flags               01 (1) 'Modification'\n-6519D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6519D8 CENTRAL HEADER #208   02014B50 (33639248)\n-6519DC Created Zip Spec      14 (20) '2.0'\n-6519DD Created OS            00 (0) 'MS-DOS'\n-6519DE Extract Zip Spec      14 (20) '2.0'\n-6519DF Extract OS            00 (0) 'MS-DOS'\n-6519E0 General Purpose Flag  0000 (0)\n-6519E2 Compression Method    0000 (0) 'Stored'\n-6519E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6519E8 CRC                   00000000 (0)\n-6519EC Compressed Size       00000000 (0)\n-6519F0 Uncompressed Size     00000000 (0)\n-6519F4 Filename Length       006E (110)\n-6519F6 Extra Length          0009 (9)\n-6519F8 Comment Length        0000 (0)\n-6519FA Disk Start            0000 (0)\n-6519FC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6519FE Ext File Attributes   00000000 (0)\n-651A02 Local Header Offset   0005C954 (379220)\n-651A06 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651A06: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-651A74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651A76   Length              0005 (5)\n-651A78   Flags               01 (1) 'Modification'\n-651A79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651A7D CENTRAL HEADER #209   02014B50 (33639248)\n-651A81 Created Zip Spec      14 (20) '2.0'\n-651A82 Created OS            00 (0) 'MS-DOS'\n-651A83 Extract Zip Spec      14 (20) '2.0'\n-651A84 Extract OS            00 (0) 'MS-DOS'\n-651A85 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-651A87 Compression Method    0000 (0) 'Stored'\n-651A89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651A8D CRC                   4293EC30 (1116990512)\n-651A91 Compressed Size       00001A2C (6700)\n-651A95 Uncompressed Size     00001A2C (6700)\n-651A99 Filename Length       0084 (132)\n-651A9B Extra Length          0009 (9)\n-651A9D Comment Length        0000 (0)\n-651A9F Disk Start            0000 (0)\n-651AA1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-651AA3 Ext File Attributes   00000000 (0)\n-651AA7 Local Header Offset   0005C9E9 (379369)\n-651AAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             '\n-#\n-# WARNING: Offset 0x651AAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6541E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-651B2F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651B31   Length              0005 (5)\n-651B33   Flags               01 (1) 'Modification'\n-651B34   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651B38 CENTRAL HEADER #210   02014B50 (33639248)\n-651B3C Created Zip Spec      14 (20) '2.0'\n-651B3D Created OS            00 (0) 'MS-DOS'\n-651B3E Extract Zip Spec      14 (20) '2.0'\n-651B3F Extract OS            00 (0) 'MS-DOS'\n-651B40 General Purpose Flag  0000 (0)\n-651B42 Compression Method    0000 (0) 'Stored'\n-651B44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651B48 CRC                   00000000 (0)\n-651B4C Compressed Size       00000000 (0)\n-651B50 Uncompressed Size     00000000 (0)\n-651B54 Filename Length       0068 (104)\n-651B56 Extra Length          0009 (9)\n-651B58 Comment Length        0000 (0)\n-651B5A Disk Start            0000 (0)\n-651B5C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-651B5E Ext File Attributes   00000000 (0)\n-651B62 Local Header Offset   0005E4D0 (386256)\n-651B66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651B66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-651BCE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651BD0   Length              0005 (5)\n-651BD2   Flags               01 (1) 'Modification'\n-651BD3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651BD7 CENTRAL HEADER #211   02014B50 (33639248)\n-651BDB Created Zip Spec      14 (20) '2.0'\n-651BDC Created OS            00 (0) 'MS-DOS'\n-651BDD Extract Zip Spec      14 (20) '2.0'\n-651BDE Extract OS            00 (0) 'MS-DOS'\n-651BDF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-651BE1 Compression Method    0000 (0) 'Stored'\n-651BE3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651BE7 CRC                   83659368 (2204472168)\n-651BEB Compressed Size       000019EF (6639)\n-651BEF Uncompressed Size     000019EF (6639)\n-651BF3 Filename Length       007E (126)\n-651BF5 Extra Length          0009 (9)\n-651BF7 Comment Length        0000 (0)\n-651BF9 Disk Start            0000 (0)\n-651BFB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-651BFD Ext File Attributes   00000000 (0)\n-651C01 Local Header Offset   0005E55F (386399)\n-651C05 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651C05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-651C83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651C85   Length              0005 (5)\n-651C87   Flags               01 (1) 'Modification'\n-651C88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651C8C CENTRAL HEADER #212   02014B50 (33639248)\n-651C90 Created Zip Spec      14 (20) '2.0'\n-651C91 Created OS            00 (0) 'MS-DOS'\n-651C92 Extract Zip Spec      14 (20) '2.0'\n-651C93 Extract OS            00 (0) 'MS-DOS'\n-651C94 General Purpose Flag  0000 (0)\n-651C96 Compression Method    0000 (0) 'Stored'\n-651C98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651C9C CRC                   00000000 (0)\n-651CA0 Compressed Size       00000000 (0)\n-651CA4 Uncompressed Size     00000000 (0)\n-651CA8 Filename Length       006E (110)\n-651CAA Extra Length          0009 (9)\n-651CAC Comment Length        0000 (0)\n-651CAE Disk Start            0000 (0)\n-651CB0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-651CB2 Ext File Attributes   00000000 (0)\n-651CB6 Local Header Offset   00060003 (393219)\n-651CBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651CBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-651D28 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651D2A   Length              0005 (5)\n-651D2C   Flags               01 (1) 'Modification'\n-651D2D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651D31 CENTRAL HEADER #213   02014B50 (33639248)\n-651D35 Created Zip Spec      14 (20) '2.0'\n-651D36 Created OS            00 (0) 'MS-DOS'\n-651D37 Extract Zip Spec      14 (20) '2.0'\n-651D38 Extract OS            00 (0) 'MS-DOS'\n-651D39 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-651D3B Compression Method    0000 (0) 'Stored'\n-651D3D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651D41 CRC                   73F3DBE5 (1945361381)\n-651D45 Compressed Size       00001AFA (6906)\n-651D49 Uncompressed Size     00001AFA (6906)\n-651D4D Filename Length       0084 (132)\n-651D4F Extra Length          0009 (9)\n-651D51 Comment Length        0000 (0)\n-651D53 Disk Start            0000 (0)\n-651D55 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-651D57 Ext File Attributes   00000000 (0)\n-651D5B Local Header Offset   00060098 (393368)\n-651D5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             '\n-#\n-# WARNING: Offset 0x651D5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-651DE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651DE5   Length              0005 (5)\n-651DE7   Flags               01 (1) 'Modification'\n-651DE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651DEC CENTRAL HEADER #214   02014B50 (33639248)\n-651DF0 Created Zip Spec      14 (20) '2.0'\n-651DF1 Created OS            00 (0) 'MS-DOS'\n-651DF2 Extract Zip Spec      14 (20) '2.0'\n-651DF3 Extract OS            00 (0) 'MS-DOS'\n-651DF4 General Purpose Flag  0000 (0)\n-651DF6 Compression Method    0000 (0) 'Stored'\n-651DF8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651DFC CRC                   00000000 (0)\n-651E00 Compressed Size       00000000 (0)\n-651E04 Uncompressed Size     00000000 (0)\n-651E08 Filename Length       0068 (104)\n-651E0A Extra Length          0009 (9)\n-651E0C Comment Length        0000 (0)\n-651E0E Disk Start            0000 (0)\n-651E10 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-651E12 Ext File Attributes   00000000 (0)\n-651E16 Local Header Offset   00061C4D (400461)\n-651E1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651E1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-651E82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651E84   Length              0005 (5)\n-651E86   Flags               01 (1) 'Modification'\n-651E87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651E8B CENTRAL HEADER #215   02014B50 (33639248)\n-651E8F Created Zip Spec      14 (20) '2.0'\n-651E90 Created OS            00 (0) 'MS-DOS'\n-651E91 Extract Zip Spec      14 (20) '2.0'\n-651E92 Extract OS            00 (0) 'MS-DOS'\n-651E93 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-651E95 Compression Method    0000 (0) 'Stored'\n-651E97 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651E9B CRC                   847E83D6 (2222883798)\n-651E9F Compressed Size       00001E83 (7811)\n-651EA3 Uncompressed Size     00001E83 (7811)\n-651EA7 Filename Length       007E (126)\n-651EA9 Extra Length          0009 (9)\n-651EAB Comment Length        0000 (0)\n-651EAD Disk Start            0000 (0)\n-651EAF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-651EB1 Ext File Attributes   00000000 (0)\n-651EB5 Local Header Offset   00061CDC (400604)\n-651EB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651EB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-651F37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651F39   Length              0005 (5)\n-651F3B   Flags               01 (1) 'Modification'\n-651F3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651F40 CENTRAL HEADER #216   02014B50 (33639248)\n-651F44 Created Zip Spec      14 (20) '2.0'\n-651F45 Created OS            00 (0) 'MS-DOS'\n-651F46 Extract Zip Spec      14 (20) '2.0'\n-651F47 Extract OS            00 (0) 'MS-DOS'\n-651F48 General Purpose Flag  0000 (0)\n-651F4A Compression Method    0000 (0) 'Stored'\n-651F4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651F50 CRC                   00000000 (0)\n-651F54 Compressed Size       00000000 (0)\n-651F58 Uncompressed Size     00000000 (0)\n-651F5C Filename Length       0028 (40)\n-651F5E Extra Length          0009 (9)\n-651F60 Comment Length        0000 (0)\n-651F62 Disk Start            0000 (0)\n-651F64 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-651F66 Ext File Attributes   00000000 (0)\n-651F6A Local Header Offset   00063C14 (408596)\n-651F6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651F6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-651F96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651F98   Length              0005 (5)\n-651F9A   Flags               01 (1) 'Modification'\n-651F9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-651F9F CENTRAL HEADER #217   02014B50 (33639248)\n-651FA3 Created Zip Spec      14 (20) '2.0'\n-651FA4 Created OS            00 (0) 'MS-DOS'\n-651FA5 Extract Zip Spec      14 (20) '2.0'\n-651FA6 Extract OS            00 (0) 'MS-DOS'\n-651FA7 General Purpose Flag  0000 (0)\n-651FA9 Compression Method    0000 (0) 'Stored'\n-651FAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-651FAF CRC                   00000000 (0)\n-651FB3 Compressed Size       00000000 (0)\n-651FB7 Uncompressed Size     00000000 (0)\n-651FBB Filename Length       002F (47)\n-651FBD Extra Length          0009 (9)\n-651FBF Comment Length        0000 (0)\n-651FC1 Disk Start            0000 (0)\n-651FC3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-651FC5 Ext File Attributes   00000000 (0)\n-651FC9 Local Header Offset   00063C63 (408675)\n-651FCD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x651FCD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-651FFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-651FFE   Length              0005 (5)\n-652000   Flags               01 (1) 'Modification'\n-652001   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652005 CENTRAL HEADER #218   02014B50 (33639248)\n-652009 Created Zip Spec      14 (20) '2.0'\n-65200A Created OS            00 (0) 'MS-DOS'\n-65200B Extract Zip Spec      14 (20) '2.0'\n-65200C Extract OS            00 (0) 'MS-DOS'\n-65200D General Purpose Flag  0000 (0)\n-65200F Compression Method    0000 (0) 'Stored'\n-652011 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652015 CRC                   00000000 (0)\n-652019 Compressed Size       00000000 (0)\n-65201D Uncompressed Size     00000000 (0)\n-652021 Filename Length       006E (110)\n-652023 Extra Length          0009 (9)\n-652025 Comment Length        0000 (0)\n-652027 Disk Start            0000 (0)\n-652029 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65202B Ext File Attributes   00000000 (0)\n-65202F Local Header Offset   00063CB9 (408761)\n-652033 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652033: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6520A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6520A3   Length              0005 (5)\n-6520A5   Flags               01 (1) 'Modification'\n-6520A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6520AA CENTRAL HEADER #219   02014B50 (33639248)\n-6520AE Created Zip Spec      14 (20) '2.0'\n-6520AF Created OS            00 (0) 'MS-DOS'\n-6520B0 Extract Zip Spec      14 (20) '2.0'\n-6520B1 Extract OS            00 (0) 'MS-DOS'\n-6520B2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6520B4 Compression Method    0000 (0) 'Stored'\n-6520B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6520BA CRC                   8DCDE743 (2379081539)\n-6520BE Compressed Size       00003DFB (15867)\n-6520C2 Uncompressed Size     00003DFB (15867)\n-6520C6 Filename Length       0084 (132)\n-6520C8 Extra Length          0009 (9)\n-6520CA Comment Length        0000 (0)\n-6520CC Disk Start            0000 (0)\n-6520CE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6520D0 Ext File Attributes   00000000 (0)\n-6520D4 Local Header Offset   00063D4E (408910)\n-6520D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             '\n-#\n-# WARNING: Offset 0x6520D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65215C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65215E   Length              0005 (5)\n-652160   Flags               01 (1) 'Modification'\n-652161   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652165 CENTRAL HEADER #220   02014B50 (33639248)\n-652169 Created Zip Spec      14 (20) '2.0'\n-65216A Created OS            00 (0) 'MS-DOS'\n-65216B Extract Zip Spec      14 (20) '2.0'\n-65216C Extract OS            00 (0) 'MS-DOS'\n-65216D General Purpose Flag  0000 (0)\n-65216F Compression Method    0000 (0) 'Stored'\n-652171 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652175 CRC                   00000000 (0)\n-652179 Compressed Size       00000000 (0)\n-65217D Uncompressed Size     00000000 (0)\n-652181 Filename Length       0068 (104)\n-652183 Extra Length          0009 (9)\n-652185 Comment Length        0000 (0)\n-652187 Disk Start            0000 (0)\n-652189 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65218B Ext File Attributes   00000000 (0)\n-65218F Local Header Offset   00067C04 (424964)\n-652193 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652193: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6521FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6521FD   Length              0005 (5)\n-6521FF   Flags               01 (1) 'Modification'\n-652200   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652204 CENTRAL HEADER #221   02014B50 (33639248)\n-652208 Created Zip Spec      14 (20) '2.0'\n-652209 Created OS            00 (0) 'MS-DOS'\n-65220A Extract Zip Spec      14 (20) '2.0'\n-65220B Extract OS            00 (0) 'MS-DOS'\n-65220C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65220E Compression Method    0000 (0) 'Stored'\n-652210 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652214 CRC                   46F84C94 (1190677652)\n-652218 Compressed Size       00003DB7 (15799)\n-65221C Uncompressed Size     00003DB7 (15799)\n-652220 Filename Length       007E (126)\n-652222 Extra Length          0009 (9)\n-652224 Comment Length        0000 (0)\n-652226 Disk Start            0000 (0)\n-652228 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65222A Ext File Attributes   00000000 (0)\n-65222E Local Header Offset   00067C93 (425107)\n-652232 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652232: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6522B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6522B2   Length              0005 (5)\n-6522B4   Flags               01 (1) 'Modification'\n-6522B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6522B9 CENTRAL HEADER #222   02014B50 (33639248)\n-6522BD Created Zip Spec      14 (20) '2.0'\n-6522BE Created OS            00 (0) 'MS-DOS'\n-6522BF Extract Zip Spec      14 (20) '2.0'\n-6522C0 Extract OS            00 (0) 'MS-DOS'\n-6522C1 General Purpose Flag  0000 (0)\n-6522C3 Compression Method    0000 (0) 'Stored'\n-6522C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6522C9 CRC                   00000000 (0)\n-6522CD Compressed Size       00000000 (0)\n-6522D1 Uncompressed Size     00000000 (0)\n-6522D5 Filename Length       006E (110)\n-6522D7 Extra Length          0009 (9)\n-6522D9 Comment Length        0000 (0)\n-6522DB Disk Start            0000 (0)\n-6522DD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6522DF Ext File Attributes   00000000 (0)\n-6522E3 Local Header Offset   0006BAFF (441087)\n-6522E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6522E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652355 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-652357   Length              0005 (5)\n-652359   Flags               01 (1) 'Modification'\n-65235A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65235E CENTRAL HEADER #223   02014B50 (33639248)\n-652362 Created Zip Spec      14 (20) '2.0'\n-652363 Created OS            00 (0) 'MS-DOS'\n-652364 Extract Zip Spec      14 (20) '2.0'\n-652365 Extract OS            00 (0) 'MS-DOS'\n-652366 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-652368 Compression Method    0000 (0) 'Stored'\n-65236A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65236E CRC                   96FAF425 (2533028901)\n-652372 Compressed Size       000028CF (10447)\n-652376 Uncompressed Size     000028CF (10447)\n-65237A Filename Length       0084 (132)\n-65237C Extra Length          0009 (9)\n-65237E Comment Length        0000 (0)\n-652380 Disk Start            0000 (0)\n-652382 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-652384 Ext File Attributes   00000000 (0)\n-652388 Local Header Offset   0006BB94 (441236)\n-65238C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             '\n-#\n-# WARNING: Offset 0x65238C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652410 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-652412   Length              0005 (5)\n-652414   Flags               01 (1) 'Modification'\n-652415   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652419 CENTRAL HEADER #224   02014B50 (33639248)\n-65241D Created Zip Spec      14 (20) '2.0'\n-65241E Created OS            00 (0) 'MS-DOS'\n-65241F Extract Zip Spec      14 (20) '2.0'\n-652420 Extract OS            00 (0) 'MS-DOS'\n-652421 General Purpose Flag  0000 (0)\n-652423 Compression Method    0000 (0) 'Stored'\n-652425 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652429 CRC                   00000000 (0)\n-65242D Compressed Size       00000000 (0)\n-652431 Uncompressed Size     00000000 (0)\n-652435 Filename Length       0068 (104)\n-652437 Extra Length          0009 (9)\n-652439 Comment Length        0000 (0)\n-65243B Disk Start            0000 (0)\n-65243D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65243F Ext File Attributes   00000000 (0)\n-652443 Local Header Offset   0006E51E (451870)\n-652447 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652447: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6524AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6524B1   Length              0005 (5)\n-6524B3   Flags               01 (1) 'Modification'\n-6524B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6524B8 CENTRAL HEADER #225   02014B50 (33639248)\n-6524BC Created Zip Spec      14 (20) '2.0'\n-6524BD Created OS            00 (0) 'MS-DOS'\n-6524BE Extract Zip Spec      14 (20) '2.0'\n-6524BF Extract OS            00 (0) 'MS-DOS'\n-6524C0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6524C2 Compression Method    0000 (0) 'Stored'\n-6524C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6524C8 CRC                   77DFCD97 (2011155863)\n-6524CC Compressed Size       00002C4A (11338)\n-6524D0 Uncompressed Size     00002C4A (11338)\n-6524D4 Filename Length       007E (126)\n-6524D6 Extra Length          0009 (9)\n-6524D8 Comment Length        0000 (0)\n-6524DA Disk Start            0000 (0)\n-6524DC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6524DE Ext File Attributes   00000000 (0)\n-6524E2 Local Header Offset   0006E5AD (452013)\n-6524E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6524E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652564 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-652566   Length              0005 (5)\n-652568   Flags               01 (1) 'Modification'\n-652569   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65256D CENTRAL HEADER #226   02014B50 (33639248)\n-652571 Created Zip Spec      14 (20) '2.0'\n-652572 Created OS            00 (0) 'MS-DOS'\n-652573 Extract Zip Spec      14 (20) '2.0'\n-652574 Extract OS            00 (0) 'MS-DOS'\n-652575 General Purpose Flag  0000 (0)\n-652577 Compression Method    0000 (0) 'Stored'\n-652579 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65257D CRC                   00000000 (0)\n-652581 Compressed Size       00000000 (0)\n-652585 Uncompressed Size     00000000 (0)\n-652589 Filename Length       0028 (40)\n-65258B Extra Length          0009 (9)\n-65258D Comment Length        0000 (0)\n-65258F Disk Start            0000 (0)\n-652591 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-652593 Ext File Attributes   00000000 (0)\n-652597 Local Header Offset   000712AC (463532)\n-65259B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65259B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6525C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6525C5   Length              0005 (5)\n-6525C7   Flags               01 (1) 'Modification'\n-6525C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6525CC CENTRAL HEADER #227   02014B50 (33639248)\n-6525D0 Created Zip Spec      14 (20) '2.0'\n-6525D1 Created OS            00 (0) 'MS-DOS'\n-6525D2 Extract Zip Spec      14 (20) '2.0'\n-6525D3 Extract OS            00 (0) 'MS-DOS'\n-6525D4 General Purpose Flag  0000 (0)\n-6525D6 Compression Method    0000 (0) 'Stored'\n-6525D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6525DC CRC                   00000000 (0)\n-6525E0 Compressed Size       00000000 (0)\n-6525E4 Uncompressed Size     00000000 (0)\n-6525E8 Filename Length       002F (47)\n-6525EA Extra Length          0009 (9)\n-6525EC Comment Length        0000 (0)\n-6525EE Disk Start            0000 (0)\n-6525F0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6525F2 Ext File Attributes   00000000 (0)\n-6525F6 Local Header Offset   000712FB (463611)\n-6525FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6525FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652629 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65262B   Length              0005 (5)\n-65262D   Flags               01 (1) 'Modification'\n-65262E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652632 CENTRAL HEADER #228   02014B50 (33639248)\n-652636 Created Zip Spec      14 (20) '2.0'\n-652637 Created OS            00 (0) 'MS-DOS'\n-652638 Extract Zip Spec      14 (20) '2.0'\n-652639 Extract OS            00 (0) 'MS-DOS'\n-65263A General Purpose Flag  0000 (0)\n-65263C Compression Method    0000 (0) 'Stored'\n-65263E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652642 CRC                   00000000 (0)\n-652646 Compressed Size       00000000 (0)\n-65264A Uncompressed Size     00000000 (0)\n-65264E Filename Length       006E (110)\n-652650 Extra Length          0009 (9)\n-652652 Comment Length        0000 (0)\n-652654 Disk Start            0000 (0)\n-652656 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-652658 Ext File Attributes   00000000 (0)\n-65265C Local Header Offset   00071351 (463697)\n-652660 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652660: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6526CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6526D0   Length              0005 (5)\n-6526D2   Flags               01 (1) 'Modification'\n-6526D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6526D7 CENTRAL HEADER #229   02014B50 (33639248)\n-6526DB Created Zip Spec      14 (20) '2.0'\n-6526DC Created OS            00 (0) 'MS-DOS'\n-6526DD Extract Zip Spec      14 (20) '2.0'\n-6526DE Extract OS            00 (0) 'MS-DOS'\n-6526DF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6526E1 Compression Method    0000 (0) 'Stored'\n-6526E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6526E7 CRC                   249CCFCD (614256589)\n-6526EB Compressed Size       00005101 (20737)\n-6526EF Uncompressed Size     00005101 (20737)\n-6526F3 Filename Length       0084 (132)\n-6526F5 Extra Length          0009 (9)\n-6526F7 Comment Length        0000 (0)\n-6526F9 Disk Start            0000 (0)\n-6526FB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6526FD Ext File Attributes   00000000 (0)\n-652701 Local Header Offset   000713E6 (463846)\n-652705 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             '\n-#\n-# WARNING: Offset 0x652705: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652789 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65278B   Length              0005 (5)\n-65278D   Flags               01 (1) 'Modification'\n-65278E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652792 CENTRAL HEADER #230   02014B50 (33639248)\n-652796 Created Zip Spec      14 (20) '2.0'\n-652797 Created OS            00 (0) 'MS-DOS'\n-652798 Extract Zip Spec      14 (20) '2.0'\n-652799 Extract OS            00 (0) 'MS-DOS'\n-65279A General Purpose Flag  0000 (0)\n-65279C Compression Method    0000 (0) 'Stored'\n-65279E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6527A2 CRC                   00000000 (0)\n-6527A6 Compressed Size       00000000 (0)\n-6527AA Uncompressed Size     00000000 (0)\n-6527AE Filename Length       0068 (104)\n-6527B0 Extra Length          0009 (9)\n-6527B2 Comment Length        0000 (0)\n-6527B4 Disk Start            0000 (0)\n-6527B6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6527B8 Ext File Attributes   00000000 (0)\n-6527BC Local Header Offset   000765A2 (484770)\n-6527C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6527C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652828 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65282A   Length              0005 (5)\n-65282C   Flags               01 (1) 'Modification'\n-65282D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652831 CENTRAL HEADER #231   02014B50 (33639248)\n-652835 Created Zip Spec      14 (20) '2.0'\n-652836 Created OS            00 (0) 'MS-DOS'\n-652837 Extract Zip Spec      14 (20) '2.0'\n-652838 Extract OS            00 (0) 'MS-DOS'\n-652839 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65283B Compression Method    0000 (0) 'Stored'\n-65283D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652841 CRC                   46DA6369 (1188717417)\n-652845 Compressed Size       00003DB7 (15799)\n-652849 Uncompressed Size     00003DB7 (15799)\n-65284D Filename Length       007E (126)\n-65284F Extra Length          0009 (9)\n-652851 Comment Length        0000 (0)\n-652853 Disk Start            0000 (0)\n-652855 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-652857 Ext File Attributes   00000000 (0)\n-65285B Local Header Offset   00076631 (484913)\n-65285F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65285F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6528DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6528DF   Length              0005 (5)\n-6528E1   Flags               01 (1) 'Modification'\n-6528E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6528E6 CENTRAL HEADER #232   02014B50 (33639248)\n-6528EA Created Zip Spec      14 (20) '2.0'\n-6528EB Created OS            00 (0) 'MS-DOS'\n-6528EC Extract Zip Spec      14 (20) '2.0'\n-6528ED Extract OS            00 (0) 'MS-DOS'\n-6528EE General Purpose Flag  0000 (0)\n-6528F0 Compression Method    0000 (0) 'Stored'\n-6528F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6528F6 CRC                   00000000 (0)\n-6528FA Compressed Size       00000000 (0)\n-6528FE Uncompressed Size     00000000 (0)\n-652902 Filename Length       006E (110)\n-652904 Extra Length          0009 (9)\n-652906 Comment Length        0000 (0)\n-652908 Disk Start            0000 (0)\n-65290A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65290C Ext File Attributes   00000000 (0)\n-652910 Local Header Offset   0007A49D (500893)\n-652914 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652914: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652982 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-652984   Length              0005 (5)\n-652986   Flags               01 (1) 'Modification'\n-652987   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65298B CENTRAL HEADER #233   02014B50 (33639248)\n-65298F Created Zip Spec      14 (20) '2.0'\n-652990 Created OS            00 (0) 'MS-DOS'\n-652991 Extract Zip Spec      14 (20) '2.0'\n-652992 Extract OS            00 (0) 'MS-DOS'\n-652993 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-652995 Compression Method    0000 (0) 'Stored'\n-652997 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65299B CRC                   6668C19E (1718141342)\n-65299F Compressed Size       00009C3B (39995)\n-6529A3 Uncompressed Size     00009C3B (39995)\n-6529A7 Filename Length       0084 (132)\n-6529A9 Extra Length          0009 (9)\n-6529AB Comment Length        0000 (0)\n-6529AD Disk Start            0000 (0)\n-6529AF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6529B1 Ext File Attributes   00000000 (0)\n-6529B5 Local Header Offset   0007A532 (501042)\n-6529B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             '\n-#\n-# WARNING: Offset 0x6529B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652A3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-652A3F   Length              0005 (5)\n-652A41   Flags               01 (1) 'Modification'\n-652A42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652A46 CENTRAL HEADER #234   02014B50 (33639248)\n-652A4A Created Zip Spec      14 (20) '2.0'\n-652A4B Created OS            00 (0) 'MS-DOS'\n-652A4C Extract Zip Spec      14 (20) '2.0'\n-652A4D Extract OS            00 (0) 'MS-DOS'\n-652A4E General Purpose Flag  0000 (0)\n-652A50 Compression Method    0000 (0) 'Stored'\n-652A52 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652A56 CRC                   00000000 (0)\n-652A5A Compressed Size       00000000 (0)\n-652A5E Uncompressed Size     00000000 (0)\n-652A62 Filename Length       0068 (104)\n-652A64 Extra Length          0009 (9)\n-652A66 Comment Length        0000 (0)\n-652A68 Disk Start            0000 (0)\n-652A6A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-652A6C Ext File Attributes   00000000 (0)\n-652A70 Local Header Offset   00084228 (541224)\n-652A74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652A74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652ADC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-652ADE   Length              0005 (5)\n-652AE0   Flags               01 (1) 'Modification'\n-652AE1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652AE5 CENTRAL HEADER #235   02014B50 (33639248)\n-652AE9 Created Zip Spec      14 (20) '2.0'\n-652AEA Created OS            00 (0) 'MS-DOS'\n-652AEB Extract Zip Spec      14 (20) '2.0'\n-652AEC Extract OS            00 (0) 'MS-DOS'\n-652AED General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-652AEF Compression Method    0000 (0) 'Stored'\n-652AF1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652AF5 CRC                   23E20FDA (602017754)\n-652AF9 Compressed Size       00002C4A (11338)\n-652AFD Uncompressed Size     00002C4A (11338)\n-652B01 Filename Length       007E (126)\n-652B03 Extra Length          0009 (9)\n-652B05 Comment Length        0000 (0)\n-652B07 Disk Start            0000 (0)\n-652B09 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-652B0B Ext File Attributes   00000000 (0)\n-652B0F Local Header Offset   000842B7 (541367)\n-652B13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652B13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652B91 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-652B93   Length              0005 (5)\n-652B95   Flags               01 (1) 'Modification'\n-652B96   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652B9A CENTRAL HEADER #236   02014B50 (33639248)\n-652B9E Created Zip Spec      14 (20) '2.0'\n-652B9F Created OS            00 (0) 'MS-DOS'\n-652BA0 Extract Zip Spec      14 (20) '2.0'\n-652BA1 Extract OS            00 (0) 'MS-DOS'\n-652BA2 General Purpose Flag  0000 (0)\n-652BA4 Compression Method    0000 (0) 'Stored'\n-652BA6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652BAA CRC                   00000000 (0)\n-652BAE Compressed Size       00000000 (0)\n-652BB2 Uncompressed Size     00000000 (0)\n-652BB6 Filename Length       0023 (35)\n-652BB8 Extra Length          0009 (9)\n-652BBA Comment Length        0000 (0)\n-652BBC Disk Start            0000 (0)\n-652BBE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-652BC0 Ext File Attributes   00000000 (0)\n-652BC4 Local Header Offset   00086FB6 (552886)\n-652BC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652BC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652BEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-652BED   Length              0005 (5)\n-652BEF   Flags               01 (1) 'Modification'\n-652BF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652BF4 CENTRAL HEADER #237   02014B50 (33639248)\n-652BF8 Created Zip Spec      14 (20) '2.0'\n-652BF9 Created OS            00 (0) 'MS-DOS'\n-652BFA Extract Zip Spec      14 (20) '2.0'\n-652BFB Extract OS            00 (0) 'MS-DOS'\n-652BFC General Purpose Flag  0000 (0)\n-652BFE Compression Method    0000 (0) 'Stored'\n-652C00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652C04 CRC                   00000000 (0)\n-652C08 Compressed Size       00000000 (0)\n-652C0C Uncompressed Size     00000000 (0)\n-652C10 Filename Length       002A (42)\n-652C12 Extra Length          0009 (9)\n-652C14 Comment Length        0000 (0)\n-652C16 Disk Start            0000 (0)\n-652C18 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-652C1A Ext File Attributes   00000000 (0)\n-652C1E Local Header Offset   00087000 (552960)\n-652C22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652C22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652C4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-652C4E   Length              0005 (5)\n-652C50   Flags               01 (1) 'Modification'\n-652C51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652C55 CENTRAL HEADER #238   02014B50 (33639248)\n-652C59 Created Zip Spec      14 (20) '2.0'\n-652C5A Created OS            00 (0) 'MS-DOS'\n-652C5B Extract Zip Spec      14 (20) '2.0'\n-652C5C Extract OS            00 (0) 'MS-DOS'\n-652C5D General Purpose Flag  0000 (0)\n-652C5F Compression Method    0000 (0) 'Stored'\n-652C61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652C65 CRC                   00000000 (0)\n-652C69 Compressed Size       00000000 (0)\n-652C6D Uncompressed Size     00000000 (0)\n-652C71 Filename Length       0052 (82)\n-652C73 Extra Length          0009 (9)\n-652C75 Comment Length        0000 (0)\n-652C77 Disk Start            0000 (0)\n-652C79 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-652C7B Ext File Attributes   00000000 (0)\n-652C7F Local Header Offset   00087051 (553041)\n-652C83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652C83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652CD5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-652CD7   Length              0005 (5)\n-652CD9   Flags               01 (1) 'Modification'\n-652CDA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652CDE CENTRAL HEADER #239   02014B50 (33639248)\n-652CE2 Created Zip Spec      14 (20) '2.0'\n-652CE3 Created OS            00 (0) 'MS-DOS'\n-652CE4 Extract Zip Spec      14 (20) '2.0'\n-652CE5 Extract OS            00 (0) 'MS-DOS'\n-652CE6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-652CE8 Compression Method    0000 (0) 'Stored'\n-652CEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652CEE CRC                   90D14EC3 (2429636291)\n-652CF2 Compressed Size       00001ABD (6845)\n-652CF6 Uncompressed Size     00001ABD (6845)\n-652CFA Filename Length       0068 (104)\n-652CFC Extra Length          0009 (9)\n-652CFE Comment Length        0000 (0)\n-652D00 Disk Start            0000 (0)\n-652D02 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-652D04 Ext File Attributes   00000000 (0)\n-652D08 Local Header Offset   000870CA (553162)\n-652D0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652D0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652D74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-652D76   Length              0005 (5)\n-652D78   Flags               01 (1) 'Modification'\n-652D79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652D7D CENTRAL HEADER #240   02014B50 (33639248)\n-652D81 Created Zip Spec      14 (20) '2.0'\n-652D82 Created OS            00 (0) 'MS-DOS'\n-652D83 Extract Zip Spec      14 (20) '2.0'\n-652D84 Extract OS            00 (0) 'MS-DOS'\n-652D85 General Purpose Flag  0000 (0)\n-652D87 Compression Method    0000 (0) 'Stored'\n-652D89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652D8D CRC                   00000000 (0)\n-652D91 Compressed Size       00000000 (0)\n-652D95 Uncompressed Size     00000000 (0)\n-652D99 Filename Length       002E (46)\n-652D9B Extra Length          0009 (9)\n-652D9D Comment Length        0000 (0)\n-652D9F Disk Start            0000 (0)\n-652DA1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-652DA3 Ext File Attributes   00000000 (0)\n-652DA7 Local Header Offset   00088C26 (560166)\n-652DAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652DAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652DD9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-652DDB   Length              0005 (5)\n-652DDD   Flags               01 (1) 'Modification'\n-652DDE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652DE2 CENTRAL HEADER #241   02014B50 (33639248)\n-652DE6 Created Zip Spec      14 (20) '2.0'\n-652DE7 Created OS            00 (0) 'MS-DOS'\n-652DE8 Extract Zip Spec      14 (20) '2.0'\n-652DE9 Extract OS            00 (0) 'MS-DOS'\n-652DEA General Purpose Flag  0000 (0)\n-652DEC Compression Method    0000 (0) 'Stored'\n-652DEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652DF2 CRC                   00000000 (0)\n-652DF6 Compressed Size       00000000 (0)\n-652DFA Uncompressed Size     00000000 (0)\n-652DFE Filename Length       0035 (53)\n-652E00 Extra Length          0009 (9)\n-652E02 Comment Length        0000 (0)\n-652E04 Disk Start            0000 (0)\n-652E06 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-652E08 Ext File Attributes   00000000 (0)\n-652E0C Local Header Offset   00088C7B (560251)\n-652E10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652E10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652E45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-652E47   Length              0005 (5)\n-652E49   Flags               01 (1) 'Modification'\n-652E4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652E4E CENTRAL HEADER #242   02014B50 (33639248)\n-652E52 Created Zip Spec      14 (20) '2.0'\n-652E53 Created OS            00 (0) 'MS-DOS'\n-652E54 Extract Zip Spec      14 (20) '2.0'\n-652E55 Extract OS            00 (0) 'MS-DOS'\n-652E56 General Purpose Flag  0000 (0)\n-652E58 Compression Method    0000 (0) 'Stored'\n-652E5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652E5E CRC                   00000000 (0)\n-652E62 Compressed Size       00000000 (0)\n-652E66 Uncompressed Size     00000000 (0)\n-652E6A Filename Length       005E (94)\n-652E6C Extra Length          0009 (9)\n-652E6E Comment Length        0000 (0)\n-652E70 Disk Start            0000 (0)\n-652E72 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-652E74 Ext File Attributes   00000000 (0)\n-652E78 Local Header Offset   00088CD7 (560343)\n-652E7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652E7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652EDA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-652EDC   Length              0005 (5)\n-652EDE   Flags               01 (1) 'Modification'\n-652EDF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652EE3 CENTRAL HEADER #243   02014B50 (33639248)\n-652EE7 Created Zip Spec      14 (20) '2.0'\n-652EE8 Created OS            00 (0) 'MS-DOS'\n-652EE9 Extract Zip Spec      14 (20) '2.0'\n-652EEA Extract OS            00 (0) 'MS-DOS'\n-652EEB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-652EED Compression Method    0000 (0) 'Stored'\n-652EEF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652EF3 CRC                   F19E6303 (4053689091)\n-652EF7 Compressed Size       00000ED8 (3800)\n-652EFB Uncompressed Size     00000ED8 (3800)\n-652EFF Filename Length       0074 (116)\n-652F01 Extra Length          0009 (9)\n-652F03 Comment Length        0000 (0)\n-652F05 Disk Start            0000 (0)\n-652F07 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-652F09 Ext File Attributes   00000000 (0)\n-652F0D Local Header Offset   00088D5C (560476)\n-652F11 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652F11: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-652F85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-652F87   Length              0005 (5)\n-652F89   Flags               01 (1) 'Modification'\n-652F8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-652F8E CENTRAL HEADER #244   02014B50 (33639248)\n-652F92 Created Zip Spec      14 (20) '2.0'\n-652F93 Created OS            00 (0) 'MS-DOS'\n-652F94 Extract Zip Spec      14 (20) '2.0'\n-652F95 Extract OS            00 (0) 'MS-DOS'\n-652F96 General Purpose Flag  0000 (0)\n-652F98 Compression Method    0000 (0) 'Stored'\n-652F9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-652F9E CRC                   00000000 (0)\n-652FA2 Compressed Size       00000000 (0)\n-652FA6 Uncompressed Size     00000000 (0)\n-652FAA Filename Length       0064 (100)\n-652FAC Extra Length          0009 (9)\n-652FAE Comment Length        0000 (0)\n-652FB0 Disk Start            0000 (0)\n-652FB2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-652FB4 Ext File Attributes   00000000 (0)\n-652FB8 Local Header Offset   00089CDF (564447)\n-652FBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x652FBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653020 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653022   Length              0005 (5)\n-653024   Flags               01 (1) 'Modification'\n-653025   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653029 CENTRAL HEADER #245   02014B50 (33639248)\n-65302D Created Zip Spec      14 (20) '2.0'\n-65302E Created OS            00 (0) 'MS-DOS'\n-65302F Extract Zip Spec      14 (20) '2.0'\n-653030 Extract OS            00 (0) 'MS-DOS'\n-653031 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-653033 Compression Method    0000 (0) 'Stored'\n-653035 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653039 CRC                   51B4F745 (1370814277)\n-65303D Compressed Size       000016D7 (5847)\n-653041 Uncompressed Size     000016D7 (5847)\n-653045 Filename Length       007A (122)\n-653047 Extra Length          0009 (9)\n-653049 Comment Length        0000 (0)\n-65304B Disk Start            0000 (0)\n-65304D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65304F Ext File Attributes   00000000 (0)\n-653053 Local Header Offset   00089D6A (564586)\n-653057 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653057: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6530D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6530D3   Length              0005 (5)\n-6530D5   Flags               01 (1) 'Modification'\n-6530D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6530DA CENTRAL HEADER #246   02014B50 (33639248)\n-6530DE Created Zip Spec      14 (20) '2.0'\n-6530DF Created OS            00 (0) 'MS-DOS'\n-6530E0 Extract Zip Spec      14 (20) '2.0'\n-6530E1 Extract OS            00 (0) 'MS-DOS'\n-6530E2 General Purpose Flag  0000 (0)\n-6530E4 Compression Method    0000 (0) 'Stored'\n-6530E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6530EA CRC                   00000000 (0)\n-6530EE Compressed Size       00000000 (0)\n-6530F2 Uncompressed Size     00000000 (0)\n-6530F6 Filename Length       0026 (38)\n-6530F8 Extra Length          0009 (9)\n-6530FA Comment Length        0000 (0)\n-6530FC Disk Start            0000 (0)\n-6530FE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653100 Ext File Attributes   00000000 (0)\n-653104 Local Header Offset   0008B4F2 (570610)\n-653108 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653108: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65312E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653130   Length              0005 (5)\n-653132   Flags               01 (1) 'Modification'\n-653133   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653137 CENTRAL HEADER #247   02014B50 (33639248)\n-65313B Created Zip Spec      14 (20) '2.0'\n-65313C Created OS            00 (0) 'MS-DOS'\n-65313D Extract Zip Spec      14 (20) '2.0'\n-65313E Extract OS            00 (0) 'MS-DOS'\n-65313F General Purpose Flag  0000 (0)\n-653141 Compression Method    0000 (0) 'Stored'\n-653143 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653147 CRC                   00000000 (0)\n-65314B Compressed Size       00000000 (0)\n-65314F Uncompressed Size     00000000 (0)\n-653153 Filename Length       002D (45)\n-653155 Extra Length          0009 (9)\n-653157 Comment Length        0000 (0)\n-653159 Disk Start            0000 (0)\n-65315B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65315D Ext File Attributes   00000000 (0)\n-653161 Local Header Offset   0008B53F (570687)\n-653165 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653165: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653192 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653194   Length              0005 (5)\n-653196   Flags               01 (1) 'Modification'\n-653197   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65319B CENTRAL HEADER #248   02014B50 (33639248)\n-65319F Created Zip Spec      14 (20) '2.0'\n-6531A0 Created OS            00 (0) 'MS-DOS'\n-6531A1 Extract Zip Spec      14 (20) '2.0'\n-6531A2 Extract OS            00 (0) 'MS-DOS'\n-6531A3 General Purpose Flag  0000 (0)\n-6531A5 Compression Method    0000 (0) 'Stored'\n-6531A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6531AB CRC                   00000000 (0)\n-6531AF Compressed Size       00000000 (0)\n-6531B3 Uncompressed Size     00000000 (0)\n-6531B7 Filename Length       005C (92)\n-6531B9 Extra Length          0009 (9)\n-6531BB Comment Length        0000 (0)\n-6531BD Disk Start            0000 (0)\n-6531BF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6531C1 Ext File Attributes   00000000 (0)\n-6531C5 Local Header Offset   0008B593 (570771)\n-6531C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6531C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653225 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653227   Length              0005 (5)\n-653229   Flags               01 (1) 'Modification'\n-65322A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65322E CENTRAL HEADER #249   02014B50 (33639248)\n-653232 Created Zip Spec      14 (20) '2.0'\n-653233 Created OS            00 (0) 'MS-DOS'\n-653234 Extract Zip Spec      14 (20) '2.0'\n-653235 Extract OS            00 (0) 'MS-DOS'\n-653236 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-653238 Compression Method    0000 (0) 'Stored'\n-65323A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65323E CRC                   357DA477 (897426551)\n-653242 Compressed Size       000006C6 (1734)\n-653246 Uncompressed Size     000006C6 (1734)\n-65324A Filename Length       0072 (114)\n-65324C Extra Length          0009 (9)\n-65324E Comment Length        0000 (0)\n-653250 Disk Start            0000 (0)\n-653252 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653254 Ext File Attributes   00000000 (0)\n-653258 Local Header Offset   0008B616 (570902)\n-65325C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65325C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6532CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6532D0   Length              0005 (5)\n-6532D2   Flags               01 (1) 'Modification'\n-6532D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6532D7 CENTRAL HEADER #250   02014B50 (33639248)\n-6532DB Created Zip Spec      14 (20) '2.0'\n-6532DC Created OS            00 (0) 'MS-DOS'\n-6532DD Extract Zip Spec      14 (20) '2.0'\n-6532DE Extract OS            00 (0) 'MS-DOS'\n-6532DF General Purpose Flag  0000 (0)\n-6532E1 Compression Method    0000 (0) 'Stored'\n-6532E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6532E7 CRC                   00000000 (0)\n-6532EB Compressed Size       00000000 (0)\n-6532EF Uncompressed Size     00000000 (0)\n-6532F3 Filename Length       0059 (89)\n-6532F5 Extra Length          0009 (9)\n-6532F7 Comment Length        0000 (0)\n-6532F9 Disk Start            0000 (0)\n-6532FB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6532FD Ext File Attributes   00000000 (0)\n-653301 Local Header Offset   0008BD85 (572805)\n-653305 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653305: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65335E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653360   Length              0005 (5)\n-653362   Flags               01 (1) 'Modification'\n-653363   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653367 CENTRAL HEADER #251   02014B50 (33639248)\n-65336B Created Zip Spec      14 (20) '2.0'\n-65336C Created OS            00 (0) 'MS-DOS'\n-65336D Extract Zip Spec      14 (20) '2.0'\n-65336E Extract OS            00 (0) 'MS-DOS'\n-65336F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-653371 Compression Method    0000 (0) 'Stored'\n-653373 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653377 CRC                   F9CAC97B (4190816635)\n-65337B Compressed Size       000009BC (2492)\n-65337F Uncompressed Size     000009BC (2492)\n-653383 Filename Length       006F (111)\n-653385 Extra Length          0009 (9)\n-653387 Comment Length        0000 (0)\n-653389 Disk Start            0000 (0)\n-65338B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65338D Ext File Attributes   00000000 (0)\n-653391 Local Header Offset   0008BE05 (572933)\n-653395 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653395: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653404 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653406   Length              0005 (5)\n-653408   Flags               01 (1) 'Modification'\n-653409   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65340D CENTRAL HEADER #252   02014B50 (33639248)\n-653411 Created Zip Spec      14 (20) '2.0'\n-653412 Created OS            00 (0) 'MS-DOS'\n-653413 Extract Zip Spec      14 (20) '2.0'\n-653414 Extract OS            00 (0) 'MS-DOS'\n-653415 General Purpose Flag  0000 (0)\n-653417 Compression Method    0000 (0) 'Stored'\n-653419 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65341D CRC                   00000000 (0)\n-653421 Compressed Size       00000000 (0)\n-653425 Uncompressed Size     00000000 (0)\n-653429 Filename Length       005F (95)\n-65342B Extra Length          0009 (9)\n-65342D Comment Length        0000 (0)\n-65342F Disk Start            0000 (0)\n-653431 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653433 Ext File Attributes   00000000 (0)\n-653437 Local Header Offset   0008C867 (575591)\n-65343B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65343B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65349A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65349C   Length              0005 (5)\n-65349E   Flags               01 (1) 'Modification'\n-65349F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6534A3 CENTRAL HEADER #253   02014B50 (33639248)\n-6534A7 Created Zip Spec      14 (20) '2.0'\n-6534A8 Created OS            00 (0) 'MS-DOS'\n-6534A9 Extract Zip Spec      14 (20) '2.0'\n-6534AA Extract OS            00 (0) 'MS-DOS'\n-6534AB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6534AD Compression Method    0000 (0) 'Stored'\n-6534AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6534B3 CRC                   9DEB8C8B (2649459851)\n-6534B7 Compressed Size       00000A07 (2567)\n-6534BB Uncompressed Size     00000A07 (2567)\n-6534BF Filename Length       0075 (117)\n-6534C1 Extra Length          0009 (9)\n-6534C3 Comment Length        0000 (0)\n-6534C5 Disk Start            0000 (0)\n-6534C7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6534C9 Ext File Attributes   00000000 (0)\n-6534CD Local Header Offset   0008C8ED (575725)\n-6534D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6534D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653546 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653548   Length              0005 (5)\n-65354A   Flags               01 (1) 'Modification'\n-65354B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65354F CENTRAL HEADER #254   02014B50 (33639248)\n-653553 Created Zip Spec      14 (20) '2.0'\n-653554 Created OS            00 (0) 'MS-DOS'\n-653555 Extract Zip Spec      14 (20) '2.0'\n-653556 Extract OS            00 (0) 'MS-DOS'\n-653557 General Purpose Flag  0000 (0)\n-653559 Compression Method    0000 (0) 'Stored'\n-65355B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65355F CRC                   00000000 (0)\n-653563 Compressed Size       00000000 (0)\n-653567 Uncompressed Size     00000000 (0)\n-65356B Filename Length       0059 (89)\n-65356D Extra Length          0009 (9)\n-65356F Comment Length        0000 (0)\n-653571 Disk Start            0000 (0)\n-653573 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653575 Ext File Attributes   00000000 (0)\n-653579 Local Header Offset   0008D3A0 (578464)\n-65357D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65357D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6535D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6535D8   Length              0005 (5)\n-6535DA   Flags               01 (1) 'Modification'\n-6535DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6535DF CENTRAL HEADER #255   02014B50 (33639248)\n-6535E3 Created Zip Spec      14 (20) '2.0'\n-6535E4 Created OS            00 (0) 'MS-DOS'\n-6535E5 Extract Zip Spec      14 (20) '2.0'\n-6535E6 Extract OS            00 (0) 'MS-DOS'\n-6535E7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6535E9 Compression Method    0000 (0) 'Stored'\n-6535EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6535EF CRC                   85B17459 (2242999385)\n-6535F3 Compressed Size       00000DDE (3550)\n-6535F7 Uncompressed Size     00000DDE (3550)\n-6535FB Filename Length       006F (111)\n-6535FD Extra Length          0009 (9)\n-6535FF Comment Length        0000 (0)\n-653601 Disk Start            0000 (0)\n-653603 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653605 Ext File Attributes   00000000 (0)\n-653609 Local Header Offset   0008D420 (578592)\n-65360D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65360D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65367C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65367E   Length              0005 (5)\n-653680   Flags               01 (1) 'Modification'\n-653681   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653685 CENTRAL HEADER #256   02014B50 (33639248)\n-653689 Created Zip Spec      14 (20) '2.0'\n-65368A Created OS            00 (0) 'MS-DOS'\n-65368B Extract Zip Spec      14 (20) '2.0'\n-65368C Extract OS            00 (0) 'MS-DOS'\n-65368D General Purpose Flag  0000 (0)\n-65368F Compression Method    0000 (0) 'Stored'\n-653691 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653695 CRC                   00000000 (0)\n-653699 Compressed Size       00000000 (0)\n-65369D Uncompressed Size     00000000 (0)\n-6536A1 Filename Length       0064 (100)\n-6536A3 Extra Length          0009 (9)\n-6536A5 Comment Length        0000 (0)\n-6536A7 Disk Start            0000 (0)\n-6536A9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6536AB Ext File Attributes   00000000 (0)\n-6536AF Local Header Offset   0008E2A4 (582308)\n-6536B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6536B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653717 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653719   Length              0005 (5)\n-65371B   Flags               01 (1) 'Modification'\n-65371C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653720 CENTRAL HEADER #257   02014B50 (33639248)\n-653724 Created Zip Spec      14 (20) '2.0'\n-653725 Created OS            00 (0) 'MS-DOS'\n-653726 Extract Zip Spec      14 (20) '2.0'\n-653727 Extract OS            00 (0) 'MS-DOS'\n-653728 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65372A Compression Method    0000 (0) 'Stored'\n-65372C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653730 CRC                   9C229073 (2619510899)\n-653734 Compressed Size       000005CF (1487)\n-653738 Uncompressed Size     000005CF (1487)\n-65373C Filename Length       007A (122)\n-65373E Extra Length          0009 (9)\n-653740 Comment Length        0000 (0)\n-653742 Disk Start            0000 (0)\n-653744 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653746 Ext File Attributes   00000000 (0)\n-65374A Local Header Offset   0008E32F (582447)\n-65374E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65374E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6537C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6537CA   Length              0005 (5)\n-6537CC   Flags               01 (1) 'Modification'\n-6537CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6537D1 CENTRAL HEADER #258   02014B50 (33639248)\n-6537D5 Created Zip Spec      14 (20) '2.0'\n-6537D6 Created OS            00 (0) 'MS-DOS'\n-6537D7 Extract Zip Spec      14 (20) '2.0'\n-6537D8 Extract OS            00 (0) 'MS-DOS'\n-6537D9 General Purpose Flag  0000 (0)\n-6537DB Compression Method    0000 (0) 'Stored'\n-6537DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6537E1 CRC                   00000000 (0)\n-6537E5 Compressed Size       00000000 (0)\n-6537E9 Uncompressed Size     00000000 (0)\n-6537ED Filename Length       0064 (100)\n-6537EF Extra Length          0009 (9)\n-6537F1 Comment Length        0000 (0)\n-6537F3 Disk Start            0000 (0)\n-6537F5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6537F7 Ext File Attributes   00000000 (0)\n-6537FB Local Header Offset   0008E9AF (584111)\n-6537FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6537FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653863 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653865   Length              0005 (5)\n-653867   Flags               01 (1) 'Modification'\n-653868   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65386C CENTRAL HEADER #259   02014B50 (33639248)\n-653870 Created Zip Spec      14 (20) '2.0'\n-653871 Created OS            00 (0) 'MS-DOS'\n-653872 Extract Zip Spec      14 (20) '2.0'\n-653873 Extract OS            00 (0) 'MS-DOS'\n-653874 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-653876 Compression Method    0000 (0) 'Stored'\n-653878 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65387C CRC                   A57691CD (2776011213)\n-653880 Compressed Size       000005C2 (1474)\n-653884 Uncompressed Size     000005C2 (1474)\n-653888 Filename Length       007A (122)\n-65388A Extra Length          0009 (9)\n-65388C Comment Length        0000 (0)\n-65388E Disk Start            0000 (0)\n-653890 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653892 Ext File Attributes   00000000 (0)\n-653896 Local Header Offset   0008EA3A (584250)\n-65389A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65389A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653914 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653916   Length              0005 (5)\n-653918   Flags               01 (1) 'Modification'\n-653919   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65391D CENTRAL HEADER #260   02014B50 (33639248)\n-653921 Created Zip Spec      14 (20) '2.0'\n-653922 Created OS            00 (0) 'MS-DOS'\n-653923 Extract Zip Spec      14 (20) '2.0'\n-653924 Extract OS            00 (0) 'MS-DOS'\n-653925 General Purpose Flag  0000 (0)\n-653927 Compression Method    0000 (0) 'Stored'\n-653929 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65392D CRC                   00000000 (0)\n-653931 Compressed Size       00000000 (0)\n-653935 Uncompressed Size     00000000 (0)\n-653939 Filename Length       0063 (99)\n-65393B Extra Length          0009 (9)\n-65393D Comment Length        0000 (0)\n-65393F Disk Start            0000 (0)\n-653941 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653943 Ext File Attributes   00000000 (0)\n-653947 Local Header Offset   0008F0AD (585901)\n-65394B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65394B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6539AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6539B0   Length              0005 (5)\n-6539B2   Flags               01 (1) 'Modification'\n-6539B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6539B7 CENTRAL HEADER #261   02014B50 (33639248)\n-6539BB Created Zip Spec      14 (20) '2.0'\n-6539BC Created OS            00 (0) 'MS-DOS'\n-6539BD Extract Zip Spec      14 (20) '2.0'\n-6539BE Extract OS            00 (0) 'MS-DOS'\n-6539BF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6539C1 Compression Method    0000 (0) 'Stored'\n-6539C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6539C7 CRC                   6CD31445 (1825772613)\n-6539CB Compressed Size       0000073A (1850)\n-6539CF Uncompressed Size     0000073A (1850)\n-6539D3 Filename Length       0079 (121)\n-6539D5 Extra Length          0009 (9)\n-6539D7 Comment Length        0000 (0)\n-6539D9 Disk Start            0000 (0)\n-6539DB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6539DD Ext File Attributes   00000000 (0)\n-6539E1 Local Header Offset   0008F137 (586039)\n-6539E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6539E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653A5E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653A60   Length              0005 (5)\n-653A62   Flags               01 (1) 'Modification'\n-653A63   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653A67 CENTRAL HEADER #262   02014B50 (33639248)\n-653A6B Created Zip Spec      14 (20) '2.0'\n-653A6C Created OS            00 (0) 'MS-DOS'\n-653A6D Extract Zip Spec      14 (20) '2.0'\n-653A6E Extract OS            00 (0) 'MS-DOS'\n-653A6F General Purpose Flag  0000 (0)\n-653A71 Compression Method    0000 (0) 'Stored'\n-653A73 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653A77 CRC                   00000000 (0)\n-653A7B Compressed Size       00000000 (0)\n-653A7F Uncompressed Size     00000000 (0)\n-653A83 Filename Length       0061 (97)\n-653A85 Extra Length          0009 (9)\n-653A87 Comment Length        0000 (0)\n-653A89 Disk Start            0000 (0)\n-653A8B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653A8D Ext File Attributes   00000000 (0)\n-653A91 Local Header Offset   0008F921 (588065)\n-653A95 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653A95: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653AF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653AF8   Length              0005 (5)\n-653AFA   Flags               01 (1) 'Modification'\n-653AFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653AFF CENTRAL HEADER #263   02014B50 (33639248)\n-653B03 Created Zip Spec      14 (20) '2.0'\n-653B04 Created OS            00 (0) 'MS-DOS'\n-653B05 Extract Zip Spec      14 (20) '2.0'\n-653B06 Extract OS            00 (0) 'MS-DOS'\n-653B07 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-653B09 Compression Method    0000 (0) 'Stored'\n-653B0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653B0F CRC                   C97DF8D6 (3380476118)\n-653B13 Compressed Size       00000A92 (2706)\n-653B17 Uncompressed Size     00000A92 (2706)\n-653B1B Filename Length       0077 (119)\n-653B1D Extra Length          0009 (9)\n-653B1F Comment Length        0000 (0)\n-653B21 Disk Start            0000 (0)\n-653B23 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653B25 Ext File Attributes   00000000 (0)\n-653B29 Local Header Offset   0008F9A9 (588201)\n-653B2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653B2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653BA4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653BA6   Length              0005 (5)\n-653BA8   Flags               01 (1) 'Modification'\n-653BA9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653BAD CENTRAL HEADER #264   02014B50 (33639248)\n-653BB1 Created Zip Spec      14 (20) '2.0'\n-653BB2 Created OS            00 (0) 'MS-DOS'\n-653BB3 Extract Zip Spec      14 (20) '2.0'\n-653BB4 Extract OS            00 (0) 'MS-DOS'\n-653BB5 General Purpose Flag  0000 (0)\n-653BB7 Compression Method    0000 (0) 'Stored'\n-653BB9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653BBD CRC                   00000000 (0)\n-653BC1 Compressed Size       00000000 (0)\n-653BC5 Uncompressed Size     00000000 (0)\n-653BC9 Filename Length       0023 (35)\n-653BCB Extra Length          0009 (9)\n-653BCD Comment Length        0000 (0)\n-653BCF Disk Start            0000 (0)\n-653BD1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653BD3 Ext File Attributes   00000000 (0)\n-653BD7 Local Header Offset   000904E9 (591081)\n-653BDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653BDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653BFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653C00   Length              0005 (5)\n-653C02   Flags               01 (1) 'Modification'\n-653C03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653C07 CENTRAL HEADER #265   02014B50 (33639248)\n-653C0B Created Zip Spec      14 (20) '2.0'\n-653C0C Created OS            00 (0) 'MS-DOS'\n-653C0D Extract Zip Spec      14 (20) '2.0'\n-653C0E Extract OS            00 (0) 'MS-DOS'\n-653C0F General Purpose Flag  0000 (0)\n-653C11 Compression Method    0000 (0) 'Stored'\n-653C13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653C17 CRC                   00000000 (0)\n-653C1B Compressed Size       00000000 (0)\n-653C1F Uncompressed Size     00000000 (0)\n-653C23 Filename Length       002A (42)\n-653C25 Extra Length          0009 (9)\n-653C27 Comment Length        0000 (0)\n-653C29 Disk Start            0000 (0)\n-653C2B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653C2D Ext File Attributes   00000000 (0)\n-653C31 Local Header Offset   00090533 (591155)\n-653C35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653C35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653C5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653C61   Length              0005 (5)\n-653C63   Flags               01 (1) 'Modification'\n-653C64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653C68 CENTRAL HEADER #266   02014B50 (33639248)\n-653C6C Created Zip Spec      14 (20) '2.0'\n-653C6D Created OS            00 (0) 'MS-DOS'\n-653C6E Extract Zip Spec      14 (20) '2.0'\n-653C6F Extract OS            00 (0) 'MS-DOS'\n-653C70 General Purpose Flag  0000 (0)\n-653C72 Compression Method    0000 (0) 'Stored'\n-653C74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653C78 CRC                   00000000 (0)\n-653C7C Compressed Size       00000000 (0)\n-653C80 Uncompressed Size     00000000 (0)\n-653C84 Filename Length       0056 (86)\n-653C86 Extra Length          0009 (9)\n-653C88 Comment Length        0000 (0)\n-653C8A Disk Start            0000 (0)\n-653C8C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653C8E Ext File Attributes   00000000 (0)\n-653C92 Local Header Offset   00090584 (591236)\n-653C96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653C96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653CEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653CEE   Length              0005 (5)\n-653CF0   Flags               01 (1) 'Modification'\n-653CF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653CF5 CENTRAL HEADER #267   02014B50 (33639248)\n-653CF9 Created Zip Spec      14 (20) '2.0'\n-653CFA Created OS            00 (0) 'MS-DOS'\n-653CFB Extract Zip Spec      14 (20) '2.0'\n-653CFC Extract OS            00 (0) 'MS-DOS'\n-653CFD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-653CFF Compression Method    0000 (0) 'Stored'\n-653D01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653D05 CRC                   0B04A112 (184852754)\n-653D09 Compressed Size       00000795 (1941)\n-653D0D Uncompressed Size     00000795 (1941)\n-653D11 Filename Length       006C (108)\n-653D13 Extra Length          0009 (9)\n-653D15 Comment Length        0000 (0)\n-653D17 Disk Start            0000 (0)\n-653D19 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653D1B Ext File Attributes   00000000 (0)\n-653D1F Local Header Offset   00090601 (591361)\n-653D23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653D23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653D8F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653D91   Length              0005 (5)\n-653D93   Flags               01 (1) 'Modification'\n-653D94   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653D98 CENTRAL HEADER #268   02014B50 (33639248)\n-653D9C Created Zip Spec      14 (20) '2.0'\n-653D9D Created OS            00 (0) 'MS-DOS'\n-653D9E Extract Zip Spec      14 (20) '2.0'\n-653D9F Extract OS            00 (0) 'MS-DOS'\n-653DA0 General Purpose Flag  0000 (0)\n-653DA2 Compression Method    0000 (0) 'Stored'\n-653DA4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653DA8 CRC                   00000000 (0)\n-653DAC Compressed Size       00000000 (0)\n-653DB0 Uncompressed Size     00000000 (0)\n-653DB4 Filename Length       0031 (49)\n-653DB6 Extra Length          0009 (9)\n-653DB8 Comment Length        0000 (0)\n-653DBA Disk Start            0000 (0)\n-653DBC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653DBE Ext File Attributes   00000000 (0)\n-653DC2 Local Header Offset   00090E39 (593465)\n-653DC6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653DC6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653DF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653DF9   Length              0005 (5)\n-653DFB   Flags               01 (1) 'Modification'\n-653DFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653E00 CENTRAL HEADER #269   02014B50 (33639248)\n-653E04 Created Zip Spec      14 (20) '2.0'\n-653E05 Created OS            00 (0) 'MS-DOS'\n-653E06 Extract Zip Spec      14 (20) '2.0'\n-653E07 Extract OS            00 (0) 'MS-DOS'\n-653E08 General Purpose Flag  0000 (0)\n-653E0A Compression Method    0000 (0) 'Stored'\n-653E0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653E10 CRC                   00000000 (0)\n-653E14 Compressed Size       00000000 (0)\n-653E18 Uncompressed Size     00000000 (0)\n-653E1C Filename Length       0038 (56)\n-653E1E Extra Length          0009 (9)\n-653E20 Comment Length        0000 (0)\n-653E22 Disk Start            0000 (0)\n-653E24 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653E26 Ext File Attributes   00000000 (0)\n-653E2A Local Header Offset   00090E91 (593553)\n-653E2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653E2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653E66 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653E68   Length              0005 (5)\n-653E6A   Flags               01 (1) 'Modification'\n-653E6B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653E6F CENTRAL HEADER #270   02014B50 (33639248)\n-653E73 Created Zip Spec      14 (20) '2.0'\n-653E74 Created OS            00 (0) 'MS-DOS'\n-653E75 Extract Zip Spec      14 (20) '2.0'\n-653E76 Extract OS            00 (0) 'MS-DOS'\n-653E77 General Purpose Flag  0000 (0)\n-653E79 Compression Method    0000 (0) 'Stored'\n-653E7B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653E7F CRC                   00000000 (0)\n-653E83 Compressed Size       00000000 (0)\n-653E87 Uncompressed Size     00000000 (0)\n-653E8B Filename Length       006A (106)\n-653E8D Extra Length          0009 (9)\n-653E8F Comment Length        0000 (0)\n-653E91 Disk Start            0000 (0)\n-653E93 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653E95 Ext File Attributes   00000000 (0)\n-653E99 Local Header Offset   00090EF0 (593648)\n-653E9D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653E9D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653F07 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653F09   Length              0005 (5)\n-653F0B   Flags               01 (1) 'Modification'\n-653F0C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653F10 CENTRAL HEADER #271   02014B50 (33639248)\n-653F14 Created Zip Spec      14 (20) '2.0'\n-653F15 Created OS            00 (0) 'MS-DOS'\n-653F16 Extract Zip Spec      14 (20) '2.0'\n-653F17 Extract OS            00 (0) 'MS-DOS'\n-653F18 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-653F1A Compression Method    0000 (0) 'Stored'\n-653F1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653F20 CRC                   9A51A289 (2589041289)\n-653F24 Compressed Size       000008AB (2219)\n-653F28 Uncompressed Size     000008AB (2219)\n-653F2C Filename Length       0080 (128)\n-653F2E Extra Length          0009 (9)\n-653F30 Comment Length        0000 (0)\n-653F32 Disk Start            0000 (0)\n-653F34 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653F36 Ext File Attributes   00000000 (0)\n-653F3A Local Header Offset   00090F81 (593793)\n-653F3E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653F3E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-653FBE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-653FC0   Length              0005 (5)\n-653FC2   Flags               01 (1) 'Modification'\n-653FC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-653FC7 CENTRAL HEADER #272   02014B50 (33639248)\n-653FCB Created Zip Spec      14 (20) '2.0'\n-653FCC Created OS            00 (0) 'MS-DOS'\n-653FCD Extract Zip Spec      14 (20) '2.0'\n-653FCE Extract OS            00 (0) 'MS-DOS'\n-653FCF General Purpose Flag  0000 (0)\n-653FD1 Compression Method    0000 (0) 'Stored'\n-653FD3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-653FD7 CRC                   00000000 (0)\n-653FDB Compressed Size       00000000 (0)\n-653FDF Uncompressed Size     00000000 (0)\n-653FE3 Filename Length       0022 (34)\n-653FE5 Extra Length          0009 (9)\n-653FE7 Comment Length        0000 (0)\n-653FE9 Disk Start            0000 (0)\n-653FEB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-653FED Ext File Attributes   00000000 (0)\n-653FF1 Local Header Offset   000918E3 (596195)\n-653FF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x653FF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654017 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654019   Length              0005 (5)\n-65401B   Flags               01 (1) 'Modification'\n-65401C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654020 CENTRAL HEADER #273   02014B50 (33639248)\n-654024 Created Zip Spec      14 (20) '2.0'\n-654025 Created OS            00 (0) 'MS-DOS'\n-654026 Extract Zip Spec      14 (20) '2.0'\n-654027 Extract OS            00 (0) 'MS-DOS'\n-654028 General Purpose Flag  0000 (0)\n-65402A Compression Method    0000 (0) 'Stored'\n-65402C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654030 CRC                   00000000 (0)\n-654034 Compressed Size       00000000 (0)\n-654038 Uncompressed Size     00000000 (0)\n-65403C Filename Length       0029 (41)\n-65403E Extra Length          0009 (9)\n-654040 Comment Length        0000 (0)\n-654042 Disk Start            0000 (0)\n-654044 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654046 Ext File Attributes   00000000 (0)\n-65404A Local Header Offset   0009192C (596268)\n-65404E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65404E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654077 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654079   Length              0005 (5)\n-65407B   Flags               01 (1) 'Modification'\n-65407C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654080 CENTRAL HEADER #274   02014B50 (33639248)\n-654084 Created Zip Spec      14 (20) '2.0'\n-654085 Created OS            00 (0) 'MS-DOS'\n-654086 Extract Zip Spec      14 (20) '2.0'\n-654087 Extract OS            00 (0) 'MS-DOS'\n-654088 General Purpose Flag  0000 (0)\n-65408A Compression Method    0000 (0) 'Stored'\n-65408C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654090 CRC                   00000000 (0)\n-654094 Compressed Size       00000000 (0)\n-654098 Uncompressed Size     00000000 (0)\n-65409C Filename Length       004B (75)\n-65409E Extra Length          0009 (9)\n-6540A0 Comment Length        0000 (0)\n-6540A2 Disk Start            0000 (0)\n-6540A4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6540A6 Ext File Attributes   00000000 (0)\n-6540AA Local Header Offset   0009197C (596348)\n-6540AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6540AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6540F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6540FB   Length              0005 (5)\n-6540FD   Flags               01 (1) 'Modification'\n-6540FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654102 CENTRAL HEADER #275   02014B50 (33639248)\n-654106 Created Zip Spec      14 (20) '2.0'\n-654107 Created OS            00 (0) 'MS-DOS'\n-654108 Extract Zip Spec      14 (20) '2.0'\n-654109 Extract OS            00 (0) 'MS-DOS'\n-65410A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65410C Compression Method    0000 (0) 'Stored'\n-65410E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654112 CRC                   BEAE3D9C (3199090076)\n-654116 Compressed Size       0000396F (14703)\n-65411A Uncompressed Size     0000396F (14703)\n-65411E Filename Length       0061 (97)\n-654120 Extra Length          0009 (9)\n-654122 Comment Length        0000 (0)\n-654124 Disk Start            0000 (0)\n-654126 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654128 Ext File Attributes   00000000 (0)\n-65412C Local Header Offset   000919EE (596462)\n-654130 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x654130: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654191 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654193   Length              0005 (5)\n-654195   Flags               01 (1) 'Modification'\n-654196   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65419A CENTRAL HEADER #276   02014B50 (33639248)\n-65419E Created Zip Spec      14 (20) '2.0'\n-65419F Created OS            00 (0) 'MS-DOS'\n-6541A0 Extract Zip Spec      14 (20) '2.0'\n-6541A1 Extract OS            00 (0) 'MS-DOS'\n-6541A2 General Purpose Flag  0000 (0)\n-6541A4 Compression Method    0000 (0) 'Stored'\n-6541A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6541AA CRC                   00000000 (0)\n-6541AE Compressed Size       00000000 (0)\n-6541B2 Uncompressed Size     00000000 (0)\n-6541B6 Filename Length       0063 (99)\n-6541B8 Extra Length          0009 (9)\n-6541BA Comment Length        0000 (0)\n-6541BC Disk Start            0000 (0)\n-6541BE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6541C0 Ext File Attributes   00000000 (0)\n-6541C4 Local Header Offset   000953F5 (611317)\n-6541C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6541C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65422B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65422D   Length              0005 (5)\n-65422F   Flags               01 (1) 'Modification'\n-654230   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654234 CENTRAL HEADER #277   02014B50 (33639248)\n-654238 Created Zip Spec      14 (20) '2.0'\n-654239 Created OS            00 (0) 'MS-DOS'\n-65423A Extract Zip Spec      14 (20) '2.0'\n-65423B Extract OS            00 (0) 'MS-DOS'\n-65423C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65423E Compression Method    0000 (0) 'Stored'\n-654240 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654244 CRC                   28034B81 (671304577)\n-654248 Compressed Size       00000E44 (3652)\n-65424C Uncompressed Size     00000E44 (3652)\n-654250 Filename Length       0079 (121)\n-654252 Extra Length          0009 (9)\n-654254 Comment Length        0000 (0)\n-654256 Disk Start            0000 (0)\n-654258 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65425A Ext File Attributes   00000000 (0)\n-65425E Local Header Offset   0009547F (611455)\n-654262 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+654273 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654275   Length              0005 (5)\n+654277   Flags               01 (1) 'Modification'\n+654278   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65427C CENTRAL HEADER #174   02014B50 (33639248)\n+654280 Created Zip Spec      14 (20) '2.0'\n+654281 Created OS            00 (0) 'MS-DOS'\n+654282 Extract Zip Spec      14 (20) '2.0'\n+654283 Extract OS            00 (0) 'MS-DOS'\n+654284 General Purpose Flag  0000 (0)\n+654286 Compression Method    0000 (0) 'Stored'\n+654288 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65428C CRC                   00000000 (0)\n+654290 Compressed Size       00000000 (0)\n+654294 Uncompressed Size     00000000 (0)\n+654298 Filename Length       0031 (49)\n+65429A Extra Length          0009 (9)\n+65429C Comment Length        0000 (0)\n+65429E Disk Start            0000 (0)\n+6542A0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6542A2 Ext File Attributes   00000000 (0)\n+6542A6 Local Header Offset   00054A38 (346680)\n+6542AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x654262: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6542AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 6542DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 6542DD   Length              0005 (5)\n 6542DF   Flags               01 (1) 'Modification'\n 6542E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n \n-6542E4 CENTRAL HEADER #278   02014B50 (33639248)\n+6542E4 CENTRAL HEADER #175   02014B50 (33639248)\n 6542E8 Created Zip Spec      14 (20) '2.0'\n 6542E9 Created OS            00 (0) 'MS-DOS'\n 6542EA Extract Zip Spec      14 (20) '2.0'\n 6542EB Extract OS            00 (0) 'MS-DOS'\n 6542EC General Purpose Flag  0000 (0)\n 6542EE Compression Method    0000 (0) 'Stored'\n 6542F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n 6542F4 CRC                   00000000 (0)\n 6542F8 Compressed Size       00000000 (0)\n 6542FC Uncompressed Size     00000000 (0)\n-654300 Filename Length       0030 (48)\n+654300 Filename Length       0038 (56)\n 654302 Extra Length          0009 (9)\n 654304 Comment Length        0000 (0)\n 654306 Disk Start            0000 (0)\n 654308 Int File Attributes   0000 (0)\n        [Bit 0]               0 'Binary Data'\n 65430A Ext File Attributes   00000000 (0)\n-65430E Local Header Offset   00096373 (615283)\n-654312 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+65430E Local Header Offset   00054A90 (346768)\n+654312 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x654312: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x654312: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-654342 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654344   Length              0005 (5)\n-654346   Flags               01 (1) 'Modification'\n-654347   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65434B CENTRAL HEADER #279   02014B50 (33639248)\n-65434F Created Zip Spec      14 (20) '2.0'\n-654350 Created OS            00 (0) 'MS-DOS'\n-654351 Extract Zip Spec      14 (20) '2.0'\n-654352 Extract OS            00 (0) 'MS-DOS'\n-654353 General Purpose Flag  0000 (0)\n-654355 Compression Method    0000 (0) 'Stored'\n-654357 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65435B CRC                   00000000 (0)\n-65435F Compressed Size       00000000 (0)\n-654363 Uncompressed Size     00000000 (0)\n-654367 Filename Length       0037 (55)\n-654369 Extra Length          0009 (9)\n-65436B Comment Length        0000 (0)\n-65436D Disk Start            0000 (0)\n-65436F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654371 Ext File Attributes   00000000 (0)\n-654375 Local Header Offset   000963CA (615370)\n-654379 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x654379: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6543B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6543B2   Length              0005 (5)\n-6543B4   Flags               01 (1) 'Modification'\n-6543B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6543B9 CENTRAL HEADER #280   02014B50 (33639248)\n-6543BD Created Zip Spec      14 (20) '2.0'\n-6543BE Created OS            00 (0) 'MS-DOS'\n-6543BF Extract Zip Spec      14 (20) '2.0'\n-6543C0 Extract OS            00 (0) 'MS-DOS'\n-6543C1 General Purpose Flag  0000 (0)\n-6543C3 Compression Method    0000 (0) 'Stored'\n-6543C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6543C9 CRC                   00000000 (0)\n-6543CD Compressed Size       00000000 (0)\n-6543D1 Uncompressed Size     00000000 (0)\n-6543D5 Filename Length       0068 (104)\n-6543D7 Extra Length          0009 (9)\n-6543D9 Comment Length        0000 (0)\n-6543DB Disk Start            0000 (0)\n-6543DD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6543DF Ext File Attributes   00000000 (0)\n-6543E3 Local Header Offset   00096428 (615464)\n-6543E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6543E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65444F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654451   Length              0005 (5)\n-654453   Flags               01 (1) 'Modification'\n-654454   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654458 CENTRAL HEADER #281   02014B50 (33639248)\n-65445C Created Zip Spec      14 (20) '2.0'\n-65445D Created OS            00 (0) 'MS-DOS'\n-65445E Extract Zip Spec      14 (20) '2.0'\n-65445F Extract OS            00 (0) 'MS-DOS'\n-654460 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-654462 Compression Method    0000 (0) 'Stored'\n-654464 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654468 CRC                   29D620BA (701898938)\n-65446C Compressed Size       00002421 (9249)\n-654470 Uncompressed Size     00002421 (9249)\n-654474 Filename Length       007E (126)\n-654476 Extra Length          0009 (9)\n-654478 Comment Length        0000 (0)\n-65447A Disk Start            0000 (0)\n-65447C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65447E Ext File Attributes   00000000 (0)\n-654482 Local Header Offset   000964B7 (615607)\n-654486 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x654486: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654504 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654506   Length              0005 (5)\n-654508   Flags               01 (1) 'Modification'\n-654509   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65450D CENTRAL HEADER #282   02014B50 (33639248)\n-654511 Created Zip Spec      14 (20) '2.0'\n-654512 Created OS            00 (0) 'MS-DOS'\n-654513 Extract Zip Spec      14 (20) '2.0'\n-654514 Extract OS            00 (0) 'MS-DOS'\n-654515 General Purpose Flag  0000 (0)\n-654517 Compression Method    0000 (0) 'Stored'\n-654519 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65451D CRC                   00000000 (0)\n-654521 Compressed Size       00000000 (0)\n-654525 Uncompressed Size     00000000 (0)\n-654529 Filename Length       003C (60)\n-65452B Extra Length          0009 (9)\n-65452D Comment Length        0000 (0)\n-65452F Disk Start            0000 (0)\n-654531 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654533 Ext File Attributes   00000000 (0)\n-654537 Local Header Offset   0009898D (625037)\n-65453B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65453B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654577 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654579   Length              0005 (5)\n-65457B   Flags               01 (1) 'Modification'\n-65457C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654580 CENTRAL HEADER #283   02014B50 (33639248)\n-654584 Created Zip Spec      14 (20) '2.0'\n-654585 Created OS            00 (0) 'MS-DOS'\n-654586 Extract Zip Spec      14 (20) '2.0'\n-654587 Extract OS            00 (0) 'MS-DOS'\n-654588 General Purpose Flag  0000 (0)\n-65458A Compression Method    0000 (0) 'Stored'\n-65458C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654590 CRC                   00000000 (0)\n-654594 Compressed Size       00000000 (0)\n-654598 Uncompressed Size     00000000 (0)\n-65459C Filename Length       0043 (67)\n-65459E Extra Length          0009 (9)\n-6545A0 Comment Length        0000 (0)\n-6545A2 Disk Start            0000 (0)\n-6545A4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6545A6 Ext File Attributes   00000000 (0)\n-6545AA Local Header Offset   000989F0 (625136)\n-6545AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6545AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6545F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6545F3   Length              0005 (5)\n-6545F5   Flags               01 (1) 'Modification'\n-6545F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6545FA CENTRAL HEADER #284   02014B50 (33639248)\n-6545FE Created Zip Spec      14 (20) '2.0'\n-6545FF Created OS            00 (0) 'MS-DOS'\n-654600 Extract Zip Spec      14 (20) '2.0'\n-654601 Extract OS            00 (0) 'MS-DOS'\n-654602 General Purpose Flag  0000 (0)\n-654604 Compression Method    0000 (0) 'Stored'\n-654606 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65460A CRC                   00000000 (0)\n-65460E Compressed Size       00000000 (0)\n-654612 Uncompressed Size     00000000 (0)\n-654616 Filename Length       0061 (97)\n-654618 Extra Length          0009 (9)\n-65461A Comment Length        0000 (0)\n-65461C Disk Start            0000 (0)\n-65461E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654620 Ext File Attributes   00000000 (0)\n-654624 Local Header Offset   00098A5A (625242)\n-654628 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x654628: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654689 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65468B   Length              0005 (5)\n-65468D   Flags               01 (1) 'Modification'\n-65468E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654692 CENTRAL HEADER #285   02014B50 (33639248)\n-654696 Created Zip Spec      14 (20) '2.0'\n-654697 Created OS            00 (0) 'MS-DOS'\n-654698 Extract Zip Spec      14 (20) '2.0'\n-654699 Extract OS            00 (0) 'MS-DOS'\n-65469A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65469C Compression Method    0000 (0) 'Stored'\n-65469E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6546A2 CRC                   9ED7BE90 (2664939152)\n-6546A6 Compressed Size       000036E7 (14055)\n-6546AA Uncompressed Size     000036E7 (14055)\n-6546AE Filename Length       0077 (119)\n-6546B0 Extra Length          0009 (9)\n-6546B2 Comment Length        0000 (0)\n-6546B4 Disk Start            0000 (0)\n-6546B6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6546B8 Ext File Attributes   00000000 (0)\n-6546BC Local Header Offset   00098AE2 (625378)\n-6546C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6546C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654737 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654739   Length              0005 (5)\n-65473B   Flags               01 (1) 'Modification'\n-65473C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654740 CENTRAL HEADER #286   02014B50 (33639248)\n-654744 Created Zip Spec      14 (20) '2.0'\n-654745 Created OS            00 (0) 'MS-DOS'\n-654746 Extract Zip Spec      14 (20) '2.0'\n-654747 Extract OS            00 (0) 'MS-DOS'\n-654748 General Purpose Flag  0000 (0)\n-65474A Compression Method    0000 (0) 'Stored'\n-65474C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654750 CRC                   00000000 (0)\n-654754 Compressed Size       00000000 (0)\n-654758 Uncompressed Size     00000000 (0)\n-65475C Filename Length       0061 (97)\n-65475E Extra Length          0009 (9)\n-654760 Comment Length        0000 (0)\n-654762 Disk Start            0000 (0)\n-654764 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654766 Ext File Attributes   00000000 (0)\n-65476A Local Header Offset   0009C277 (639607)\n-65476E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65476E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6547CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6547D1   Length              0005 (5)\n-6547D3   Flags               01 (1) 'Modification'\n-6547D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6547D8 CENTRAL HEADER #287   02014B50 (33639248)\n-6547DC Created Zip Spec      14 (20) '2.0'\n-6547DD Created OS            00 (0) 'MS-DOS'\n-6547DE Extract Zip Spec      14 (20) '2.0'\n-6547DF Extract OS            00 (0) 'MS-DOS'\n-6547E0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6547E2 Compression Method    0000 (0) 'Stored'\n-6547E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6547E8 CRC                   B51FDD91 (3038764433)\n-6547EC Compressed Size       00004792 (18322)\n-6547F0 Uncompressed Size     00004792 (18322)\n-6547F4 Filename Length       0077 (119)\n-6547F6 Extra Length          0009 (9)\n-6547F8 Comment Length        0000 (0)\n-6547FA Disk Start            0000 (0)\n-6547FC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6547FE Ext File Attributes   00000000 (0)\n-654802 Local Header Offset   0009C2FF (639743)\n-654806 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x654806: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65487D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65487F   Length              0005 (5)\n-654881   Flags               01 (1) 'Modification'\n-654882   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654886 CENTRAL HEADER #288   02014B50 (33639248)\n-65488A Created Zip Spec      14 (20) '2.0'\n-65488B Created OS            00 (0) 'MS-DOS'\n-65488C Extract Zip Spec      14 (20) '2.0'\n-65488D Extract OS            00 (0) 'MS-DOS'\n-65488E General Purpose Flag  0000 (0)\n-654890 Compression Method    0000 (0) 'Stored'\n-654892 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654896 CRC                   00000000 (0)\n-65489A Compressed Size       00000000 (0)\n-65489E Uncompressed Size     00000000 (0)\n-6548A2 Filename Length       0063 (99)\n-6548A4 Extra Length          0009 (9)\n-6548A6 Comment Length        0000 (0)\n-6548A8 Disk Start            0000 (0)\n-6548AA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6548AC Ext File Attributes   00000000 (0)\n-6548B0 Local Header Offset   000A0B3F (658239)\n-6548B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6548B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654917 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654919   Length              0005 (5)\n-65491B   Flags               01 (1) 'Modification'\n-65491C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654920 CENTRAL HEADER #289   02014B50 (33639248)\n-654924 Created Zip Spec      14 (20) '2.0'\n-654925 Created OS            00 (0) 'MS-DOS'\n-654926 Extract Zip Spec      14 (20) '2.0'\n-654927 Extract OS            00 (0) 'MS-DOS'\n-654928 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65492A Compression Method    0000 (0) 'Stored'\n-65492C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654930 CRC                   27CFA48B (667919499)\n-654934 Compressed Size       00005DDC (24028)\n-654938 Uncompressed Size     00005DDC (24028)\n-65493C Filename Length       0079 (121)\n-65493E Extra Length          0009 (9)\n-654940 Comment Length        0000 (0)\n-654942 Disk Start            0000 (0)\n-654944 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654946 Ext File Attributes   00000000 (0)\n-65494A Local Header Offset   000A0BC9 (658377)\n-65494E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65494E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6549C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6549C9   Length              0005 (5)\n-6549CB   Flags               01 (1) 'Modification'\n-6549CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6549D0 CENTRAL HEADER #290   02014B50 (33639248)\n-6549D4 Created Zip Spec      14 (20) '2.0'\n-6549D5 Created OS            00 (0) 'MS-DOS'\n-6549D6 Extract Zip Spec      14 (20) '2.0'\n-6549D7 Extract OS            00 (0) 'MS-DOS'\n-6549D8 General Purpose Flag  0000 (0)\n-6549DA Compression Method    0000 (0) 'Stored'\n-6549DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6549E0 CRC                   00000000 (0)\n-6549E4 Compressed Size       00000000 (0)\n-6549E8 Uncompressed Size     00000000 (0)\n-6549EC Filename Length       0067 (103)\n-6549EE Extra Length          0009 (9)\n-6549F0 Comment Length        0000 (0)\n-6549F2 Disk Start            0000 (0)\n-6549F4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6549F6 Ext File Attributes   00000000 (0)\n-6549FA Local Header Offset   000A6A55 (682581)\n-6549FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6549FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654A65 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654A67   Length              0005 (5)\n-654A69   Flags               01 (1) 'Modification'\n-654A6A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654A6E CENTRAL HEADER #291   02014B50 (33639248)\n-654A72 Created Zip Spec      14 (20) '2.0'\n-654A73 Created OS            00 (0) 'MS-DOS'\n-654A74 Extract Zip Spec      14 (20) '2.0'\n-654A75 Extract OS            00 (0) 'MS-DOS'\n-654A76 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-654A78 Compression Method    0000 (0) 'Stored'\n-654A7A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654A7E CRC                   620AB78F (1644869519)\n-654A82 Compressed Size       00003B3A (15162)\n-654A86 Uncompressed Size     00003B3A (15162)\n-654A8A Filename Length       007D (125)\n-654A8C Extra Length          0009 (9)\n-654A8E Comment Length        0000 (0)\n-654A90 Disk Start            0000 (0)\n-654A92 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654A94 Ext File Attributes   00000000 (0)\n-654A98 Local Header Offset   000A6AE3 (682723)\n-654A9C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x654A9C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654B19 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654B1B   Length              0005 (5)\n-654B1D   Flags               01 (1) 'Modification'\n-654B1E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654B22 CENTRAL HEADER #292   02014B50 (33639248)\n-654B26 Created Zip Spec      14 (20) '2.0'\n-654B27 Created OS            00 (0) 'MS-DOS'\n-654B28 Extract Zip Spec      14 (20) '2.0'\n-654B29 Extract OS            00 (0) 'MS-DOS'\n-654B2A General Purpose Flag  0000 (0)\n-654B2C Compression Method    0000 (0) 'Stored'\n-654B2E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654B32 CRC                   00000000 (0)\n-654B36 Compressed Size       00000000 (0)\n-654B3A Uncompressed Size     00000000 (0)\n-654B3E Filename Length       0067 (103)\n-654B40 Extra Length          0009 (9)\n-654B42 Comment Length        0000 (0)\n-654B44 Disk Start            0000 (0)\n-654B46 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654B48 Ext File Attributes   00000000 (0)\n-654B4C Local Header Offset   000AA6D1 (698065)\n-654B50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x654B50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654BB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654BB9   Length              0005 (5)\n-654BBB   Flags               01 (1) 'Modification'\n-654BBC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654BC0 CENTRAL HEADER #293   02014B50 (33639248)\n-654BC4 Created Zip Spec      14 (20) '2.0'\n-654BC5 Created OS            00 (0) 'MS-DOS'\n-654BC6 Extract Zip Spec      14 (20) '2.0'\n-654BC7 Extract OS            00 (0) 'MS-DOS'\n-654BC8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-654BCA Compression Method    0000 (0) 'Stored'\n-654BCC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654BD0 CRC                   937A07E6 (2474248166)\n-654BD4 Compressed Size       00004869 (18537)\n-654BD8 Uncompressed Size     00004869 (18537)\n-654BDC Filename Length       007D (125)\n-654BDE Extra Length          0009 (9)\n-654BE0 Comment Length        0000 (0)\n-654BE2 Disk Start            0000 (0)\n-654BE4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654BE6 Ext File Attributes   00000000 (0)\n-654BEA Local Header Offset   000AA75F (698207)\n-654BEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x654BEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654C6B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654C6D   Length              0005 (5)\n-654C6F   Flags               01 (1) 'Modification'\n-654C70   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654C74 CENTRAL HEADER #294   02014B50 (33639248)\n-654C78 Created Zip Spec      14 (20) '2.0'\n-654C79 Created OS            00 (0) 'MS-DOS'\n-654C7A Extract Zip Spec      14 (20) '2.0'\n-654C7B Extract OS            00 (0) 'MS-DOS'\n-654C7C General Purpose Flag  0000 (0)\n-654C7E Compression Method    0000 (0) 'Stored'\n-654C80 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654C84 CRC                   00000000 (0)\n-654C88 Compressed Size       00000000 (0)\n-654C8C Uncompressed Size     00000000 (0)\n-654C90 Filename Length       006B (107)\n-654C92 Extra Length          0009 (9)\n-654C94 Comment Length        0000 (0)\n-654C96 Disk Start            0000 (0)\n-654C98 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654C9A Ext File Attributes   00000000 (0)\n-654C9E Local Header Offset   000AF07C (716924)\n-654CA2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x654CA2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654D0D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654D0F   Length              0005 (5)\n-654D11   Flags               01 (1) 'Modification'\n-654D12   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654D16 CENTRAL HEADER #295   02014B50 (33639248)\n-654D1A Created Zip Spec      14 (20) '2.0'\n-654D1B Created OS            00 (0) 'MS-DOS'\n-654D1C Extract Zip Spec      14 (20) '2.0'\n-654D1D Extract OS            00 (0) 'MS-DOS'\n-654D1E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-654D20 Compression Method    0000 (0) 'Stored'\n-654D22 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654D26 CRC                   53DFF1D7 (1407185367)\n-654D2A Compressed Size       00000ADF (2783)\n-654D2E Uncompressed Size     00000ADF (2783)\n-654D32 Filename Length       0081 (129)\n-654D34 Extra Length          0009 (9)\n-654D36 Comment Length        0000 (0)\n-654D38 Disk Start            0000 (0)\n-654D3A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654D3C Ext File Attributes   00000000 (0)\n-654D40 Local Header Offset   000AF10E (717070)\n-654D44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x654D44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654DC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654DC7   Length              0005 (5)\n-654DC9   Flags               01 (1) 'Modification'\n-654DCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654DCE CENTRAL HEADER #296   02014B50 (33639248)\n-654DD2 Created Zip Spec      14 (20) '2.0'\n-654DD3 Created OS            00 (0) 'MS-DOS'\n-654DD4 Extract Zip Spec      14 (20) '2.0'\n-654DD5 Extract OS            00 (0) 'MS-DOS'\n-654DD6 General Purpose Flag  0000 (0)\n-654DD8 Compression Method    0000 (0) 'Stored'\n-654DDA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654DDE CRC                   00000000 (0)\n-654DE2 Compressed Size       00000000 (0)\n-654DE6 Uncompressed Size     00000000 (0)\n-654DEA Filename Length       0067 (103)\n-654DEC Extra Length          0009 (9)\n-654DEE Comment Length        0000 (0)\n-654DF0 Disk Start            0000 (0)\n-654DF2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654DF4 Ext File Attributes   00000000 (0)\n-654DF8 Local Header Offset   000AFCA5 (720037)\n-654DFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x654DFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654E63 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654E65   Length              0005 (5)\n-654E67   Flags               01 (1) 'Modification'\n-654E68   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654E6C CENTRAL HEADER #297   02014B50 (33639248)\n-654E70 Created Zip Spec      14 (20) '2.0'\n-654E71 Created OS            00 (0) 'MS-DOS'\n-654E72 Extract Zip Spec      14 (20) '2.0'\n-654E73 Extract OS            00 (0) 'MS-DOS'\n-654E74 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-654E76 Compression Method    0000 (0) 'Stored'\n-654E78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654E7C CRC                   6D3A5445 (1832539205)\n-654E80 Compressed Size       00000939 (2361)\n-654E84 Uncompressed Size     00000939 (2361)\n-654E88 Filename Length       007D (125)\n-654E8A Extra Length          0009 (9)\n-654E8C Comment Length        0000 (0)\n-654E8E Disk Start            0000 (0)\n-654E90 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654E92 Ext File Attributes   00000000 (0)\n-654E96 Local Header Offset   000AFD33 (720179)\n-654E9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x654E9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654F17 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654F19   Length              0005 (5)\n-654F1B   Flags               01 (1) 'Modification'\n-654F1C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654F20 CENTRAL HEADER #298   02014B50 (33639248)\n-654F24 Created Zip Spec      14 (20) '2.0'\n-654F25 Created OS            00 (0) 'MS-DOS'\n-654F26 Extract Zip Spec      14 (20) '2.0'\n-654F27 Extract OS            00 (0) 'MS-DOS'\n-654F28 General Purpose Flag  0000 (0)\n-654F2A Compression Method    0000 (0) 'Stored'\n-654F2C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654F30 CRC                   00000000 (0)\n-654F34 Compressed Size       00000000 (0)\n-654F38 Uncompressed Size     00000000 (0)\n-654F3C Filename Length       0076 (118)\n-654F3E Extra Length          0009 (9)\n-654F40 Comment Length        0000 (0)\n-654F42 Disk Start            0000 (0)\n-654F44 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654F46 Ext File Attributes   00000000 (0)\n-654F4A Local Header Offset   000B0720 (722720)\n-654F4E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x654F4E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-654FC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-654FC6   Length              0005 (5)\n-654FC8   Flags               01 (1) 'Modification'\n-654FC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-654FCD CENTRAL HEADER #299   02014B50 (33639248)\n-654FD1 Created Zip Spec      14 (20) '2.0'\n-654FD2 Created OS            00 (0) 'MS-DOS'\n-654FD3 Extract Zip Spec      14 (20) '2.0'\n-654FD4 Extract OS            00 (0) 'MS-DOS'\n-654FD5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-654FD7 Compression Method    0000 (0) 'Stored'\n-654FD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-654FDD CRC                   5C6B1924 (1550522660)\n-654FE1 Compressed Size       00000DDD (3549)\n-654FE5 Uncompressed Size     00000DDD (3549)\n-654FE9 Filename Length       008C (140)\n-654FEB Extra Length          0009 (9)\n-654FED Comment Length        0000 (0)\n-654FEF Disk Start            0000 (0)\n-654FF1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-654FF3 Ext File Attributes   00000000 (0)\n-654FF7 Local Header Offset   000B07BD (722877)\n-654FFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXX'\n+65434A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65434C   Length              0005 (5)\n+65434E   Flags               01 (1) 'Modification'\n+65434F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654353 CENTRAL HEADER #176   02014B50 (33639248)\n+654357 Created Zip Spec      14 (20) '2.0'\n+654358 Created OS            00 (0) 'MS-DOS'\n+654359 Extract Zip Spec      14 (20) '2.0'\n+65435A Extract OS            00 (0) 'MS-DOS'\n+65435B General Purpose Flag  0000 (0)\n+65435D Compression Method    0000 (0) 'Stored'\n+65435F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654363 CRC                   00000000 (0)\n+654367 Compressed Size       00000000 (0)\n+65436B Uncompressed Size     00000000 (0)\n+65436F Filename Length       007F (127)\n+654371 Extra Length          0009 (9)\n+654373 Comment Length        0000 (0)\n+654375 Disk Start            0000 (0)\n+654377 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654379 Ext File Attributes   00000000 (0)\n+65437D Local Header Offset   00054AEF (346863)\n+654381 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654381: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654400 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654402   Length              0005 (5)\n+654404   Flags               01 (1) 'Modification'\n+654405   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654409 CENTRAL HEADER #177   02014B50 (33639248)\n+65440D Created Zip Spec      14 (20) '2.0'\n+65440E Created OS            00 (0) 'MS-DOS'\n+65440F Extract Zip Spec      14 (20) '2.0'\n+654410 Extract OS            00 (0) 'MS-DOS'\n+654411 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+654413 Compression Method    0000 (0) 'Stored'\n+654415 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654419 CRC                   726CFBF2 (1919745010)\n+65441D Compressed Size       00000886 (2182)\n+654421 Uncompressed Size     00000886 (2182)\n+654425 Filename Length       0095 (149)\n+654427 Extra Length          0009 (9)\n+654429 Comment Length        0000 (0)\n+65442B Disk Start            0000 (0)\n+65442D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65442F Ext File Attributes   00000000 (0)\n+654433 Local Header Offset   00054B95 (347029)\n+654437 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654437: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6544CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6544CE   Length              0005 (5)\n+6544D0   Flags               01 (1) 'Modification'\n+6544D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6544D5 CENTRAL HEADER #178   02014B50 (33639248)\n+6544D9 Created Zip Spec      14 (20) '2.0'\n+6544DA Created OS            00 (0) 'MS-DOS'\n+6544DB Extract Zip Spec      14 (20) '2.0'\n+6544DC Extract OS            00 (0) 'MS-DOS'\n+6544DD General Purpose Flag  0000 (0)\n+6544DF Compression Method    0000 (0) 'Stored'\n+6544E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6544E5 CRC                   00000000 (0)\n+6544E9 Compressed Size       00000000 (0)\n+6544ED Uncompressed Size     00000000 (0)\n+6544F1 Filename Length       0086 (134)\n+6544F3 Extra Length          0009 (9)\n+6544F5 Comment Length        0000 (0)\n+6544F7 Disk Start            0000 (0)\n+6544F9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6544FB Ext File Attributes   00000000 (0)\n+6544FF Local Header Offset   000554E7 (349415)\n+654503 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XX'\n+#\n+# WARNING: Offset 0x654503: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654589 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65458B   Length              0005 (5)\n+65458D   Flags               01 (1) 'Modification'\n+65458E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654592 CENTRAL HEADER #179   02014B50 (33639248)\n+654596 Created Zip Spec      14 (20) '2.0'\n+654597 Created OS            00 (0) 'MS-DOS'\n+654598 Extract Zip Spec      14 (20) '2.0'\n+654599 Extract OS            00 (0) 'MS-DOS'\n+65459A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65459C Compression Method    0000 (0) 'Stored'\n+65459E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6545A2 CRC                   0124A640 (19179072)\n+6545A6 Compressed Size       00001071 (4209)\n+6545AA Uncompressed Size     00001071 (4209)\n+6545AE Filename Length       009C (156)\n+6545B0 Extra Length          0009 (9)\n+6545B2 Comment Length        0000 (0)\n+6545B4 Disk Start            0000 (0)\n+6545B6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6545B8 Ext File Attributes   00000000 (0)\n+6545BC Local Header Offset   00055594 (349588)\n+6545C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x654FFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6545C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-655087 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655089   Length              0005 (5)\n-65508B   Flags               01 (1) 'Modification'\n-65508C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655090 CENTRAL HEADER #300   02014B50 (33639248)\n-655094 Created Zip Spec      14 (20) '2.0'\n-655095 Created OS            00 (0) 'MS-DOS'\n-655096 Extract Zip Spec      14 (20) '2.0'\n-655097 Extract OS            00 (0) 'MS-DOS'\n-655098 General Purpose Flag  0000 (0)\n-65509A Compression Method    0000 (0) 'Stored'\n-65509C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6550A0 CRC                   00000000 (0)\n-6550A4 Compressed Size       00000000 (0)\n-6550A8 Uncompressed Size     00000000 (0)\n-6550AC Filename Length       0061 (97)\n-6550AE Extra Length          0009 (9)\n-6550B0 Comment Length        0000 (0)\n-6550B2 Disk Start            0000 (0)\n-6550B4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6550B6 Ext File Attributes   00000000 (0)\n-6550BA Local Header Offset   000B165D (726621)\n-6550BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6550BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65511F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655121   Length              0005 (5)\n-655123   Flags               01 (1) 'Modification'\n-655124   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655128 CENTRAL HEADER #301   02014B50 (33639248)\n-65512C Created Zip Spec      14 (20) '2.0'\n-65512D Created OS            00 (0) 'MS-DOS'\n-65512E Extract Zip Spec      14 (20) '2.0'\n-65512F Extract OS            00 (0) 'MS-DOS'\n-655130 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-655132 Compression Method    0000 (0) 'Stored'\n-655134 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655138 CRC                   C7DF88BB (3353315515)\n-65513C Compressed Size       00009335 (37685)\n-655140 Uncompressed Size     00009335 (37685)\n-655144 Filename Length       0077 (119)\n-655146 Extra Length          0009 (9)\n-655148 Comment Length        0000 (0)\n-65514A Disk Start            0000 (0)\n-65514C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65514E Ext File Attributes   00000000 (0)\n-655152 Local Header Offset   000B16E5 (726757)\n-655156 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655156: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6551CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6551CF   Length              0005 (5)\n-6551D1   Flags               01 (1) 'Modification'\n-6551D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6551D6 CENTRAL HEADER #302   02014B50 (33639248)\n-6551DA Created Zip Spec      14 (20) '2.0'\n-6551DB Created OS            00 (0) 'MS-DOS'\n-6551DC Extract Zip Spec      14 (20) '2.0'\n-6551DD Extract OS            00 (0) 'MS-DOS'\n-6551DE General Purpose Flag  0000 (0)\n-6551E0 Compression Method    0000 (0) 'Stored'\n-6551E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6551E6 CRC                   00000000 (0)\n-6551EA Compressed Size       00000000 (0)\n-6551EE Uncompressed Size     00000000 (0)\n-6551F2 Filename Length       006A (106)\n-6551F4 Extra Length          0009 (9)\n-6551F6 Comment Length        0000 (0)\n-6551F8 Disk Start            0000 (0)\n-6551FA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6551FC Ext File Attributes   00000000 (0)\n-655200 Local Header Offset   000BAAC8 (764616)\n-655204 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655204: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65526E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655270   Length              0005 (5)\n-655272   Flags               01 (1) 'Modification'\n-655273   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655277 CENTRAL HEADER #303   02014B50 (33639248)\n-65527B Created Zip Spec      14 (20) '2.0'\n-65527C Created OS            00 (0) 'MS-DOS'\n-65527D Extract Zip Spec      14 (20) '2.0'\n-65527E Extract OS            00 (0) 'MS-DOS'\n-65527F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-655281 Compression Method    0000 (0) 'Stored'\n-655283 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655287 CRC                   217BBE0B (561757707)\n-65528B Compressed Size       00001BB1 (7089)\n-65528F Uncompressed Size     00001BB1 (7089)\n-655293 Filename Length       0080 (128)\n-655295 Extra Length          0009 (9)\n-655297 Comment Length        0000 (0)\n-655299 Disk Start            0000 (0)\n-65529B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65529D Ext File Attributes   00000000 (0)\n-6552A1 Local Header Offset   000BAB59 (764761)\n-6552A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6552A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-655325 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655327   Length              0005 (5)\n-655329   Flags               01 (1) 'Modification'\n-65532A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65532E CENTRAL HEADER #304   02014B50 (33639248)\n-655332 Created Zip Spec      14 (20) '2.0'\n-655333 Created OS            00 (0) 'MS-DOS'\n-655334 Extract Zip Spec      14 (20) '2.0'\n-655335 Extract OS            00 (0) 'MS-DOS'\n-655336 General Purpose Flag  0000 (0)\n-655338 Compression Method    0000 (0) 'Stored'\n-65533A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65533E CRC                   00000000 (0)\n-655342 Compressed Size       00000000 (0)\n-655346 Uncompressed Size     00000000 (0)\n-65534A Filename Length       0067 (103)\n-65534C Extra Length          0009 (9)\n-65534E Comment Length        0000 (0)\n-655350 Disk Start            0000 (0)\n-655352 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-655354 Ext File Attributes   00000000 (0)\n-655358 Local Header Offset   000BC7C1 (772033)\n-65535C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65535C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6553C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6553C5   Length              0005 (5)\n-6553C7   Flags               01 (1) 'Modification'\n-6553C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6553CC CENTRAL HEADER #305   02014B50 (33639248)\n-6553D0 Created Zip Spec      14 (20) '2.0'\n-6553D1 Created OS            00 (0) 'MS-DOS'\n-6553D2 Extract Zip Spec      14 (20) '2.0'\n-6553D3 Extract OS            00 (0) 'MS-DOS'\n-6553D4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6553D6 Compression Method    0000 (0) 'Stored'\n-6553D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6553DC CRC                   CF72F6D0 (3480418000)\n-6553E0 Compressed Size       00004A6A (19050)\n-6553E4 Uncompressed Size     00004A6A (19050)\n-6553E8 Filename Length       007D (125)\n-6553EA Extra Length          0009 (9)\n-6553EC Comment Length        0000 (0)\n-6553EE Disk Start            0000 (0)\n-6553F0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6553F2 Ext File Attributes   00000000 (0)\n-6553F6 Local Header Offset   000BC84F (772175)\n-6553FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6553FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-655477 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655479   Length              0005 (5)\n-65547B   Flags               01 (1) 'Modification'\n-65547C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655480 CENTRAL HEADER #306   02014B50 (33639248)\n-655484 Created Zip Spec      14 (20) '2.0'\n-655485 Created OS            00 (0) 'MS-DOS'\n-655486 Extract Zip Spec      14 (20) '2.0'\n-655487 Extract OS            00 (0) 'MS-DOS'\n-655488 General Purpose Flag  0000 (0)\n-65548A Compression Method    0000 (0) 'Stored'\n-65548C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655490 CRC                   00000000 (0)\n-655494 Compressed Size       00000000 (0)\n-655498 Uncompressed Size     00000000 (0)\n-65549C Filename Length       0029 (41)\n-65549E Extra Length          0009 (9)\n-6554A0 Comment Length        0000 (0)\n-6554A2 Disk Start            0000 (0)\n-6554A4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6554A6 Ext File Attributes   00000000 (0)\n-6554AA Local Header Offset   000C136D (791405)\n-6554AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6554AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6554D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6554D9   Length              0005 (5)\n-6554DB   Flags               01 (1) 'Modification'\n-6554DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6554E0 CENTRAL HEADER #307   02014B50 (33639248)\n-6554E4 Created Zip Spec      14 (20) '2.0'\n-6554E5 Created OS            00 (0) 'MS-DOS'\n-6554E6 Extract Zip Spec      14 (20) '2.0'\n-6554E7 Extract OS            00 (0) 'MS-DOS'\n-6554E8 General Purpose Flag  0000 (0)\n-6554EA Compression Method    0000 (0) 'Stored'\n-6554EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6554F0 CRC                   00000000 (0)\n-6554F4 Compressed Size       00000000 (0)\n-6554F8 Uncompressed Size     00000000 (0)\n-6554FC Filename Length       0030 (48)\n-6554FE Extra Length          0009 (9)\n-655500 Comment Length        0000 (0)\n-655502 Disk Start            0000 (0)\n-655504 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-655506 Ext File Attributes   00000000 (0)\n-65550A Local Header Offset   000C13BD (791485)\n-65550E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65550E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65553E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655540   Length              0005 (5)\n-655542   Flags               01 (1) 'Modification'\n-655543   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655547 CENTRAL HEADER #308   02014B50 (33639248)\n-65554B Created Zip Spec      14 (20) '2.0'\n-65554C Created OS            00 (0) 'MS-DOS'\n-65554D Extract Zip Spec      14 (20) '2.0'\n-65554E Extract OS            00 (0) 'MS-DOS'\n-65554F General Purpose Flag  0000 (0)\n-655551 Compression Method    0000 (0) 'Stored'\n-655553 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655557 CRC                   00000000 (0)\n-65555B Compressed Size       00000000 (0)\n-65555F Uncompressed Size     00000000 (0)\n-655563 Filename Length       006A (106)\n-655565 Extra Length          0009 (9)\n-655567 Comment Length        0000 (0)\n-655569 Disk Start            0000 (0)\n-65556B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65556D Ext File Attributes   00000000 (0)\n-655571 Local Header Offset   000C1414 (791572)\n-655575 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655575: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6555DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6555E1   Length              0005 (5)\n-6555E3   Flags               01 (1) 'Modification'\n-6555E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6555E8 CENTRAL HEADER #309   02014B50 (33639248)\n-6555EC Created Zip Spec      14 (20) '2.0'\n-6555ED Created OS            00 (0) 'MS-DOS'\n-6555EE Extract Zip Spec      14 (20) '2.0'\n-6555EF Extract OS            00 (0) 'MS-DOS'\n-6555F0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6555F2 Compression Method    0000 (0) 'Stored'\n-6555F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6555F8 CRC                   DCEFA272 (3706692210)\n-6555FC Compressed Size       000009D3 (2515)\n-655600 Uncompressed Size     000009D3 (2515)\n-655604 Filename Length       0080 (128)\n-655606 Extra Length          0009 (9)\n-655608 Comment Length        0000 (0)\n-65560A Disk Start            0000 (0)\n-65560C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65560E Ext File Attributes   00000000 (0)\n-655612 Local Header Offset   000C14A5 (791717)\n-655616 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655616: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-655696 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655698   Length              0005 (5)\n-65569A   Flags               01 (1) 'Modification'\n-65569B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65569F CENTRAL HEADER #310   02014B50 (33639248)\n-6556A3 Created Zip Spec      14 (20) '2.0'\n-6556A4 Created OS            00 (0) 'MS-DOS'\n-6556A5 Extract Zip Spec      14 (20) '2.0'\n-6556A6 Extract OS            00 (0) 'MS-DOS'\n-6556A7 General Purpose Flag  0000 (0)\n-6556A9 Compression Method    0000 (0) 'Stored'\n-6556AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6556AF CRC                   00000000 (0)\n-6556B3 Compressed Size       00000000 (0)\n-6556B7 Uncompressed Size     00000000 (0)\n-6556BB Filename Length       006C (108)\n-6556BD Extra Length          0009 (9)\n-6556BF Comment Length        0000 (0)\n-6556C1 Disk Start            0000 (0)\n-6556C3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6556C5 Ext File Attributes   00000000 (0)\n-6556C9 Local Header Offset   000C1F2F (794415)\n-6556CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6556CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-655739 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65573B   Length              0005 (5)\n-65573D   Flags               01 (1) 'Modification'\n-65573E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655742 CENTRAL HEADER #311   02014B50 (33639248)\n-655746 Created Zip Spec      14 (20) '2.0'\n-655747 Created OS            00 (0) 'MS-DOS'\n-655748 Extract Zip Spec      14 (20) '2.0'\n-655749 Extract OS            00 (0) 'MS-DOS'\n-65574A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65574C Compression Method    0000 (0) 'Stored'\n-65574E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655752 CRC                   26E963FE (652829694)\n-655756 Compressed Size       00001276 (4726)\n-65575A Uncompressed Size     00001276 (4726)\n-65575E Filename Length       0082 (130)\n-655760 Extra Length          0009 (9)\n-655762 Comment Length        0000 (0)\n-655764 Disk Start            0000 (0)\n-655766 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-655768 Ext File Attributes   00000000 (0)\n-65576C Local Header Offset   000C1FC2 (794562)\n-655770 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655770: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6557F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6557F4   Length              0005 (5)\n-6557F6   Flags               01 (1) 'Modification'\n-6557F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6557FB CENTRAL HEADER #312   02014B50 (33639248)\n-6557FF Created Zip Spec      14 (20) '2.0'\n-655800 Created OS            00 (0) 'MS-DOS'\n-655801 Extract Zip Spec      14 (20) '2.0'\n-655802 Extract OS            00 (0) 'MS-DOS'\n-655803 General Purpose Flag  0000 (0)\n-655805 Compression Method    0000 (0) 'Stored'\n-655807 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65580B CRC                   00000000 (0)\n-65580F Compressed Size       00000000 (0)\n-655813 Uncompressed Size     00000000 (0)\n-655817 Filename Length       0028 (40)\n-655819 Extra Length          0009 (9)\n-65581B Comment Length        0000 (0)\n-65581D Disk Start            0000 (0)\n-65581F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-655821 Ext File Attributes   00000000 (0)\n-655825 Local Header Offset   000C32F1 (799473)\n-655829 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655829: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-655851 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655853   Length              0005 (5)\n-655855   Flags               01 (1) 'Modification'\n-655856   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65585A CENTRAL HEADER #313   02014B50 (33639248)\n-65585E Created Zip Spec      14 (20) '2.0'\n-65585F Created OS            00 (0) 'MS-DOS'\n-655860 Extract Zip Spec      14 (20) '2.0'\n-655861 Extract OS            00 (0) 'MS-DOS'\n-655862 General Purpose Flag  0000 (0)\n-655864 Compression Method    0000 (0) 'Stored'\n-655866 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65586A CRC                   00000000 (0)\n-65586E Compressed Size       00000000 (0)\n-655872 Uncompressed Size     00000000 (0)\n-655876 Filename Length       002F (47)\n-655878 Extra Length          0009 (9)\n-65587A Comment Length        0000 (0)\n-65587C Disk Start            0000 (0)\n-65587E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-655880 Ext File Attributes   00000000 (0)\n-655884 Local Header Offset   000C3340 (799552)\n-655888 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655888: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6558B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6558B9   Length              0005 (5)\n-6558BB   Flags               01 (1) 'Modification'\n-6558BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6558C0 CENTRAL HEADER #314   02014B50 (33639248)\n-6558C4 Created Zip Spec      14 (20) '2.0'\n-6558C5 Created OS            00 (0) 'MS-DOS'\n-6558C6 Extract Zip Spec      14 (20) '2.0'\n-6558C7 Extract OS            00 (0) 'MS-DOS'\n-6558C8 General Purpose Flag  0000 (0)\n-6558CA Compression Method    0000 (0) 'Stored'\n-6558CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6558D0 CRC                   00000000 (0)\n-6558D4 Compressed Size       00000000 (0)\n-6558D8 Uncompressed Size     00000000 (0)\n-6558DC Filename Length       005F (95)\n-6558DE Extra Length          0009 (9)\n-6558E0 Comment Length        0000 (0)\n-6558E2 Disk Start            0000 (0)\n-6558E4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6558E6 Ext File Attributes   00000000 (0)\n-6558EA Local Header Offset   000C3396 (799638)\n-6558EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+65465C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65465E   Length              0005 (5)\n+654660   Flags               01 (1) 'Modification'\n+654661   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654665 CENTRAL HEADER #180   02014B50 (33639248)\n+654669 Created Zip Spec      14 (20) '2.0'\n+65466A Created OS            00 (0) 'MS-DOS'\n+65466B Extract Zip Spec      14 (20) '2.0'\n+65466C Extract OS            00 (0) 'MS-DOS'\n+65466D General Purpose Flag  0000 (0)\n+65466F Compression Method    0000 (0) 'Stored'\n+654671 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654675 CRC                   00000000 (0)\n+654679 Compressed Size       00000000 (0)\n+65467D Uncompressed Size     00000000 (0)\n+654681 Filename Length       0086 (134)\n+654683 Extra Length          0009 (9)\n+654685 Comment Length        0000 (0)\n+654687 Disk Start            0000 (0)\n+654689 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65468B Ext File Attributes   00000000 (0)\n+65468F Local Header Offset   000566D8 (354008)\n+654693 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XX'\n #\n-# WARNING: Offset 0x6558EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x654693: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654719 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65471B   Length              0005 (5)\n+65471D   Flags               01 (1) 'Modification'\n+65471E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654722 CENTRAL HEADER #181   02014B50 (33639248)\n+654726 Created Zip Spec      14 (20) '2.0'\n+654727 Created OS            00 (0) 'MS-DOS'\n+654728 Extract Zip Spec      14 (20) '2.0'\n+654729 Extract OS            00 (0) 'MS-DOS'\n+65472A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65472C Compression Method    0000 (0) 'Stored'\n+65472E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654732 CRC                   7E793C9C (2121874588)\n+654736 Compressed Size       000008CC (2252)\n+65473A Uncompressed Size     000008CC (2252)\n+65473E Filename Length       009C (156)\n+654740 Extra Length          0009 (9)\n+654742 Comment Length        0000 (0)\n+654744 Disk Start            0000 (0)\n+654746 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654748 Ext File Attributes   00000000 (0)\n+65474C Local Header Offset   00056785 (354181)\n+654750 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654750: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6547EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6547EE   Length              0005 (5)\n+6547F0   Flags               01 (1) 'Modification'\n+6547F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6547F5 CENTRAL HEADER #182   02014B50 (33639248)\n+6547F9 Created Zip Spec      14 (20) '2.0'\n+6547FA Created OS            00 (0) 'MS-DOS'\n+6547FB Extract Zip Spec      14 (20) '2.0'\n+6547FC Extract OS            00 (0) 'MS-DOS'\n+6547FD General Purpose Flag  0000 (0)\n+6547FF Compression Method    0000 (0) 'Stored'\n+654801 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654805 CRC                   00000000 (0)\n+654809 Compressed Size       00000000 (0)\n+65480D Uncompressed Size     00000000 (0)\n+654811 Filename Length       0024 (36)\n+654813 Extra Length          0009 (9)\n+654815 Comment Length        0000 (0)\n+654817 Disk Start            0000 (0)\n+654819 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65481B Ext File Attributes   00000000 (0)\n+65481F Local Header Offset   00057124 (356644)\n+654823 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654823: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654847 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654849   Length              0005 (5)\n+65484B   Flags               01 (1) 'Modification'\n+65484C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654850 CENTRAL HEADER #183   02014B50 (33639248)\n+654854 Created Zip Spec      14 (20) '2.0'\n+654855 Created OS            00 (0) 'MS-DOS'\n+654856 Extract Zip Spec      14 (20) '2.0'\n+654857 Extract OS            00 (0) 'MS-DOS'\n+654858 General Purpose Flag  0000 (0)\n+65485A Compression Method    0000 (0) 'Stored'\n+65485C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654860 CRC                   00000000 (0)\n+654864 Compressed Size       00000000 (0)\n+654868 Uncompressed Size     00000000 (0)\n+65486C Filename Length       002B (43)\n+65486E Extra Length          0009 (9)\n+654870 Comment Length        0000 (0)\n+654872 Disk Start            0000 (0)\n+654874 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654876 Ext File Attributes   00000000 (0)\n+65487A Local Header Offset   0005716F (356719)\n+65487E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65487E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6548A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6548AB   Length              0005 (5)\n+6548AD   Flags               01 (1) 'Modification'\n+6548AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6548B2 CENTRAL HEADER #184   02014B50 (33639248)\n+6548B6 Created Zip Spec      14 (20) '2.0'\n+6548B7 Created OS            00 (0) 'MS-DOS'\n+6548B8 Extract Zip Spec      14 (20) '2.0'\n+6548B9 Extract OS            00 (0) 'MS-DOS'\n+6548BA General Purpose Flag  0000 (0)\n+6548BC Compression Method    0000 (0) 'Stored'\n+6548BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6548C2 CRC                   00000000 (0)\n+6548C6 Compressed Size       00000000 (0)\n+6548CA Uncompressed Size     00000000 (0)\n+6548CE Filename Length       0052 (82)\n+6548D0 Extra Length          0009 (9)\n+6548D2 Comment Length        0000 (0)\n+6548D4 Disk Start            0000 (0)\n+6548D6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6548D8 Ext File Attributes   00000000 (0)\n+6548DC Local Header Offset   000571C1 (356801)\n+6548E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6548E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654932 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654934   Length              0005 (5)\n+654936   Flags               01 (1) 'Modification'\n+654937   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65493B CENTRAL HEADER #185   02014B50 (33639248)\n+65493F Created Zip Spec      14 (20) '2.0'\n+654940 Created OS            00 (0) 'MS-DOS'\n+654941 Extract Zip Spec      14 (20) '2.0'\n+654942 Extract OS            00 (0) 'MS-DOS'\n+654943 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+654945 Compression Method    0000 (0) 'Stored'\n+654947 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65494B CRC                   A8584B88 (2824358792)\n+65494F Compressed Size       0000070D (1805)\n+654953 Uncompressed Size     0000070D (1805)\n+654957 Filename Length       0068 (104)\n+654959 Extra Length          0009 (9)\n+65495B Comment Length        0000 (0)\n+65495D Disk Start            0000 (0)\n+65495F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654961 Ext File Attributes   00000000 (0)\n+654965 Local Header Offset   0005723A (356922)\n+654969 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654969: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6549D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6549D3   Length              0005 (5)\n+6549D5   Flags               01 (1) 'Modification'\n+6549D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6549DA CENTRAL HEADER #186   02014B50 (33639248)\n+6549DE Created Zip Spec      14 (20) '2.0'\n+6549DF Created OS            00 (0) 'MS-DOS'\n+6549E0 Extract Zip Spec      14 (20) '2.0'\n+6549E1 Extract OS            00 (0) 'MS-DOS'\n+6549E2 General Purpose Flag  0000 (0)\n+6549E4 Compression Method    0000 (0) 'Stored'\n+6549E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6549EA CRC                   00000000 (0)\n+6549EE Compressed Size       00000000 (0)\n+6549F2 Uncompressed Size     00000000 (0)\n+6549F6 Filename Length       004E (78)\n+6549F8 Extra Length          0009 (9)\n+6549FA Comment Length        0000 (0)\n+6549FC Disk Start            0000 (0)\n+6549FE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654A00 Ext File Attributes   00000000 (0)\n+654A04 Local Header Offset   000579E6 (358886)\n+654A08 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654A08: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654A56 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654A58   Length              0005 (5)\n+654A5A   Flags               01 (1) 'Modification'\n+654A5B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654A5F CENTRAL HEADER #187   02014B50 (33639248)\n+654A63 Created Zip Spec      14 (20) '2.0'\n+654A64 Created OS            00 (0) 'MS-DOS'\n+654A65 Extract Zip Spec      14 (20) '2.0'\n+654A66 Extract OS            00 (0) 'MS-DOS'\n+654A67 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+654A69 Compression Method    0000 (0) 'Stored'\n+654A6B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654A6F CRC                   A8336B4A (2821942090)\n+654A73 Compressed Size       00000760 (1888)\n+654A77 Uncompressed Size     00000760 (1888)\n+654A7B Filename Length       0064 (100)\n+654A7D Extra Length          0009 (9)\n+654A7F Comment Length        0000 (0)\n+654A81 Disk Start            0000 (0)\n+654A83 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654A85 Ext File Attributes   00000000 (0)\n+654A89 Local Header Offset   00057A5B (359003)\n+654A8D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654A8D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654AF1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654AF3   Length              0005 (5)\n+654AF5   Flags               01 (1) 'Modification'\n+654AF6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654AFA CENTRAL HEADER #188   02014B50 (33639248)\n+654AFE Created Zip Spec      14 (20) '2.0'\n+654AFF Created OS            00 (0) 'MS-DOS'\n+654B00 Extract Zip Spec      14 (20) '2.0'\n+654B01 Extract OS            00 (0) 'MS-DOS'\n+654B02 General Purpose Flag  0000 (0)\n+654B04 Compression Method    0000 (0) 'Stored'\n+654B06 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654B0A CRC                   00000000 (0)\n+654B0E Compressed Size       00000000 (0)\n+654B12 Uncompressed Size     00000000 (0)\n+654B16 Filename Length       004E (78)\n+654B18 Extra Length          0009 (9)\n+654B1A Comment Length        0000 (0)\n+654B1C Disk Start            0000 (0)\n+654B1E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654B20 Ext File Attributes   00000000 (0)\n+654B24 Local Header Offset   00058256 (361046)\n+654B28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654B28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654B76 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654B78   Length              0005 (5)\n+654B7A   Flags               01 (1) 'Modification'\n+654B7B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654B7F CENTRAL HEADER #189   02014B50 (33639248)\n+654B83 Created Zip Spec      14 (20) '2.0'\n+654B84 Created OS            00 (0) 'MS-DOS'\n+654B85 Extract Zip Spec      14 (20) '2.0'\n+654B86 Extract OS            00 (0) 'MS-DOS'\n+654B87 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+654B89 Compression Method    0000 (0) 'Stored'\n+654B8B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654B8F CRC                   7559BE1A (1968815642)\n+654B93 Compressed Size       00000764 (1892)\n+654B97 Uncompressed Size     00000764 (1892)\n+654B9B Filename Length       0064 (100)\n+654B9D Extra Length          0009 (9)\n+654B9F Comment Length        0000 (0)\n+654BA1 Disk Start            0000 (0)\n+654BA3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654BA5 Ext File Attributes   00000000 (0)\n+654BA9 Local Header Offset   000582CB (361163)\n+654BAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654BAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654C11 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654C13   Length              0005 (5)\n+654C15   Flags               01 (1) 'Modification'\n+654C16   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654C1A CENTRAL HEADER #190   02014B50 (33639248)\n+654C1E Created Zip Spec      14 (20) '2.0'\n+654C1F Created OS            00 (0) 'MS-DOS'\n+654C20 Extract Zip Spec      14 (20) '2.0'\n+654C21 Extract OS            00 (0) 'MS-DOS'\n+654C22 General Purpose Flag  0000 (0)\n+654C24 Compression Method    0000 (0) 'Stored'\n+654C26 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654C2A CRC                   00000000 (0)\n+654C2E Compressed Size       00000000 (0)\n+654C32 Uncompressed Size     00000000 (0)\n+654C36 Filename Length       0050 (80)\n+654C38 Extra Length          0009 (9)\n+654C3A Comment Length        0000 (0)\n+654C3C Disk Start            0000 (0)\n+654C3E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654C40 Ext File Attributes   00000000 (0)\n+654C44 Local Header Offset   00058ACA (363210)\n+654C48 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654C48: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654C98 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654C9A   Length              0005 (5)\n+654C9C   Flags               01 (1) 'Modification'\n+654C9D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654CA1 CENTRAL HEADER #191   02014B50 (33639248)\n+654CA5 Created Zip Spec      14 (20) '2.0'\n+654CA6 Created OS            00 (0) 'MS-DOS'\n+654CA7 Extract Zip Spec      14 (20) '2.0'\n+654CA8 Extract OS            00 (0) 'MS-DOS'\n+654CA9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+654CAB Compression Method    0000 (0) 'Stored'\n+654CAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654CB1 CRC                   F2039839 (4060321849)\n+654CB5 Compressed Size       00000F35 (3893)\n+654CB9 Uncompressed Size     00000F35 (3893)\n+654CBD Filename Length       0066 (102)\n+654CBF Extra Length          0009 (9)\n+654CC1 Comment Length        0000 (0)\n+654CC3 Disk Start            0000 (0)\n+654CC5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654CC7 Ext File Attributes   00000000 (0)\n+654CCB Local Header Offset   00058B41 (363329)\n+654CCF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654CCF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654D35 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654D37   Length              0005 (5)\n+654D39   Flags               01 (1) 'Modification'\n+654D3A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654D3E CENTRAL HEADER #192   02014B50 (33639248)\n+654D42 Created Zip Spec      14 (20) '2.0'\n+654D43 Created OS            00 (0) 'MS-DOS'\n+654D44 Extract Zip Spec      14 (20) '2.0'\n+654D45 Extract OS            00 (0) 'MS-DOS'\n+654D46 General Purpose Flag  0000 (0)\n+654D48 Compression Method    0000 (0) 'Stored'\n+654D4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654D4E CRC                   00000000 (0)\n+654D52 Compressed Size       00000000 (0)\n+654D56 Uncompressed Size     00000000 (0)\n+654D5A Filename Length       0026 (38)\n+654D5C Extra Length          0009 (9)\n+654D5E Comment Length        0000 (0)\n+654D60 Disk Start            0000 (0)\n+654D62 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654D64 Ext File Attributes   00000000 (0)\n+654D68 Local Header Offset   00059B13 (367379)\n+654D6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654D6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654D92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654D94   Length              0005 (5)\n+654D96   Flags               01 (1) 'Modification'\n+654D97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654D9B CENTRAL HEADER #193   02014B50 (33639248)\n+654D9F Created Zip Spec      14 (20) '2.0'\n+654DA0 Created OS            00 (0) 'MS-DOS'\n+654DA1 Extract Zip Spec      14 (20) '2.0'\n+654DA2 Extract OS            00 (0) 'MS-DOS'\n+654DA3 General Purpose Flag  0000 (0)\n+654DA5 Compression Method    0000 (0) 'Stored'\n+654DA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654DAB CRC                   00000000 (0)\n+654DAF Compressed Size       00000000 (0)\n+654DB3 Uncompressed Size     00000000 (0)\n+654DB7 Filename Length       002D (45)\n+654DB9 Extra Length          0009 (9)\n+654DBB Comment Length        0000 (0)\n+654DBD Disk Start            0000 (0)\n+654DBF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654DC1 Ext File Attributes   00000000 (0)\n+654DC5 Local Header Offset   00059B60 (367456)\n+654DC9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654DC9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654DF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654DF8   Length              0005 (5)\n+654DFA   Flags               01 (1) 'Modification'\n+654DFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654DFF CENTRAL HEADER #194   02014B50 (33639248)\n+654E03 Created Zip Spec      14 (20) '2.0'\n+654E04 Created OS            00 (0) 'MS-DOS'\n+654E05 Extract Zip Spec      14 (20) '2.0'\n+654E06 Extract OS            00 (0) 'MS-DOS'\n+654E07 General Purpose Flag  0000 (0)\n+654E09 Compression Method    0000 (0) 'Stored'\n+654E0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654E0F CRC                   00000000 (0)\n+654E13 Compressed Size       00000000 (0)\n+654E17 Uncompressed Size     00000000 (0)\n+654E1B Filename Length       005B (91)\n+654E1D Extra Length          0009 (9)\n+654E1F Comment Length        0000 (0)\n+654E21 Disk Start            0000 (0)\n+654E23 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654E25 Ext File Attributes   00000000 (0)\n+654E29 Local Header Offset   00059BB4 (367540)\n+654E2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654E2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654E88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654E8A   Length              0005 (5)\n+654E8C   Flags               01 (1) 'Modification'\n+654E8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654E91 CENTRAL HEADER #195   02014B50 (33639248)\n+654E95 Created Zip Spec      14 (20) '2.0'\n+654E96 Created OS            00 (0) 'MS-DOS'\n+654E97 Extract Zip Spec      14 (20) '2.0'\n+654E98 Extract OS            00 (0) 'MS-DOS'\n+654E99 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+654E9B Compression Method    0000 (0) 'Stored'\n+654E9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654EA1 CRC                   4C048087 (1275363463)\n+654EA5 Compressed Size       00000861 (2145)\n+654EA9 Uncompressed Size     00000861 (2145)\n+654EAD Filename Length       0071 (113)\n+654EAF Extra Length          0009 (9)\n+654EB1 Comment Length        0000 (0)\n+654EB3 Disk Start            0000 (0)\n+654EB5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654EB7 Ext File Attributes   00000000 (0)\n+654EBB Local Header Offset   00059C36 (367670)\n+654EBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654EBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654F30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654F32   Length              0005 (5)\n+654F34   Flags               01 (1) 'Modification'\n+654F35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654F39 CENTRAL HEADER #196   02014B50 (33639248)\n+654F3D Created Zip Spec      14 (20) '2.0'\n+654F3E Created OS            00 (0) 'MS-DOS'\n+654F3F Extract Zip Spec      14 (20) '2.0'\n+654F40 Extract OS            00 (0) 'MS-DOS'\n+654F41 General Purpose Flag  0000 (0)\n+654F43 Compression Method    0000 (0) 'Stored'\n+654F45 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654F49 CRC                   00000000 (0)\n+654F4D Compressed Size       00000000 (0)\n+654F51 Uncompressed Size     00000000 (0)\n+654F55 Filename Length       002D (45)\n+654F57 Extra Length          0009 (9)\n+654F59 Comment Length        0000 (0)\n+654F5B Disk Start            0000 (0)\n+654F5D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654F5F Ext File Attributes   00000000 (0)\n+654F63 Local Header Offset   0005A53F (369983)\n+654F67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654F67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654F94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654F96   Length              0005 (5)\n+654F98   Flags               01 (1) 'Modification'\n+654F99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654F9D CENTRAL HEADER #197   02014B50 (33639248)\n+654FA1 Created Zip Spec      14 (20) '2.0'\n+654FA2 Created OS            00 (0) 'MS-DOS'\n+654FA3 Extract Zip Spec      14 (20) '2.0'\n+654FA4 Extract OS            00 (0) 'MS-DOS'\n+654FA5 General Purpose Flag  0000 (0)\n+654FA7 Compression Method    0000 (0) 'Stored'\n+654FA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654FAD CRC                   00000000 (0)\n+654FB1 Compressed Size       00000000 (0)\n+654FB5 Uncompressed Size     00000000 (0)\n+654FB9 Filename Length       0034 (52)\n+654FBB Extra Length          0009 (9)\n+654FBD Comment Length        0000 (0)\n+654FBF Disk Start            0000 (0)\n+654FC1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+654FC3 Ext File Attributes   00000000 (0)\n+654FC7 Local Header Offset   0005A593 (370067)\n+654FCB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654FCB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654FFF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655001   Length              0005 (5)\n+655003   Flags               01 (1) 'Modification'\n+655004   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+655008 CENTRAL HEADER #198   02014B50 (33639248)\n+65500C Created Zip Spec      14 (20) '2.0'\n+65500D Created OS            00 (0) 'MS-DOS'\n+65500E Extract Zip Spec      14 (20) '2.0'\n+65500F Extract OS            00 (0) 'MS-DOS'\n+655010 General Purpose Flag  0000 (0)\n+655012 Compression Method    0000 (0) 'Stored'\n+655014 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+655018 CRC                   00000000 (0)\n+65501C Compressed Size       00000000 (0)\n+655020 Uncompressed Size     00000000 (0)\n+655024 Filename Length       0068 (104)\n+655026 Extra Length          0009 (9)\n+655028 Comment Length        0000 (0)\n+65502A Disk Start            0000 (0)\n+65502C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65502E Ext File Attributes   00000000 (0)\n+655032 Local Header Offset   0005A5EE (370158)\n+655036 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x655036: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65509E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6550A0   Length              0005 (5)\n+6550A2   Flags               01 (1) 'Modification'\n+6550A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6550A7 CENTRAL HEADER #199   02014B50 (33639248)\n+6550AB Created Zip Spec      14 (20) '2.0'\n+6550AC Created OS            00 (0) 'MS-DOS'\n+6550AD Extract Zip Spec      14 (20) '2.0'\n+6550AE Extract OS            00 (0) 'MS-DOS'\n+6550AF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6550B1 Compression Method    0000 (0) 'Stored'\n+6550B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6550B7 CRC                   877B2EE8 (2272997096)\n+6550BB Compressed Size       0000215E (8542)\n+6550BF Uncompressed Size     0000215E (8542)\n+6550C3 Filename Length       007E (126)\n+6550C5 Extra Length          0009 (9)\n+6550C7 Comment Length        0000 (0)\n+6550C9 Disk Start            0000 (0)\n+6550CB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6550CD Ext File Attributes   00000000 (0)\n+6550D1 Local Header Offset   0005A67D (370301)\n+6550D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6550D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+655153 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655155   Length              0005 (5)\n+655157   Flags               01 (1) 'Modification'\n+655158   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65515C CENTRAL HEADER #200   02014B50 (33639248)\n+655160 Created Zip Spec      14 (20) '2.0'\n+655161 Created OS            00 (0) 'MS-DOS'\n+655162 Extract Zip Spec      14 (20) '2.0'\n+655163 Extract OS            00 (0) 'MS-DOS'\n+655164 General Purpose Flag  0000 (0)\n+655166 Compression Method    0000 (0) 'Stored'\n+655168 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65516C CRC                   00000000 (0)\n+655170 Compressed Size       00000000 (0)\n+655174 Uncompressed Size     00000000 (0)\n+655178 Filename Length       006C (108)\n+65517A Extra Length          0009 (9)\n+65517C Comment Length        0000 (0)\n+65517E Disk Start            0000 (0)\n+655180 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655182 Ext File Attributes   00000000 (0)\n+655186 Local Header Offset   0005C890 (379024)\n+65518A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65518A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6551F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6551F8   Length              0005 (5)\n+6551FA   Flags               01 (1) 'Modification'\n+6551FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6551FF CENTRAL HEADER #201   02014B50 (33639248)\n+655203 Created Zip Spec      14 (20) '2.0'\n+655204 Created OS            00 (0) 'MS-DOS'\n+655205 Extract Zip Spec      14 (20) '2.0'\n+655206 Extract OS            00 (0) 'MS-DOS'\n+655207 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+655209 Compression Method    0000 (0) 'Stored'\n+65520B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65520F CRC                   E43D22D5 (3829211861)\n+655213 Compressed Size       0000147F (5247)\n+655217 Uncompressed Size     0000147F (5247)\n+65521B Filename Length       0082 (130)\n+65521D Extra Length          0009 (9)\n+65521F Comment Length        0000 (0)\n+655221 Disk Start            0000 (0)\n+655223 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655225 Ext File Attributes   00000000 (0)\n+655229 Local Header Offset   0005C923 (379171)\n+65522D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65522D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6552AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6552B1   Length              0005 (5)\n+6552B3   Flags               01 (1) 'Modification'\n+6552B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6552B8 CENTRAL HEADER #202   02014B50 (33639248)\n+6552BC Created Zip Spec      14 (20) '2.0'\n+6552BD Created OS            00 (0) 'MS-DOS'\n+6552BE Extract Zip Spec      14 (20) '2.0'\n+6552BF Extract OS            00 (0) 'MS-DOS'\n+6552C0 General Purpose Flag  0000 (0)\n+6552C2 Compression Method    0000 (0) 'Stored'\n+6552C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6552C8 CRC                   00000000 (0)\n+6552CC Compressed Size       00000000 (0)\n+6552D0 Uncompressed Size     00000000 (0)\n+6552D4 Filename Length       005E (94)\n+6552D6 Extra Length          0009 (9)\n+6552D8 Comment Length        0000 (0)\n+6552DA Disk Start            0000 (0)\n+6552DC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6552DE Ext File Attributes   00000000 (0)\n+6552E2 Local Header Offset   0005DE5B (384603)\n+6552E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6552E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+655344 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655346   Length              0005 (5)\n+655348   Flags               01 (1) 'Modification'\n+655349   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65534D CENTRAL HEADER #203   02014B50 (33639248)\n+655351 Created Zip Spec      14 (20) '2.0'\n+655352 Created OS            00 (0) 'MS-DOS'\n+655353 Extract Zip Spec      14 (20) '2.0'\n+655354 Extract OS            00 (0) 'MS-DOS'\n+655355 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+655357 Compression Method    0000 (0) 'Stored'\n+655359 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65535D CRC                   D765846F (3613754479)\n+655361 Compressed Size       00001060 (4192)\n+655365 Uncompressed Size     00001060 (4192)\n+655369 Filename Length       0074 (116)\n+65536B Extra Length          0009 (9)\n+65536D Comment Length        0000 (0)\n+65536F Disk Start            0000 (0)\n+655371 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655373 Ext File Attributes   00000000 (0)\n+655377 Local Header Offset   0005DEE0 (384736)\n+65537B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65537B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6553EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6553F1   Length              0005 (5)\n+6553F3   Flags               01 (1) 'Modification'\n+6553F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6553F8 CENTRAL HEADER #204   02014B50 (33639248)\n+6553FC Created Zip Spec      14 (20) '2.0'\n+6553FD Created OS            00 (0) 'MS-DOS'\n+6553FE Extract Zip Spec      14 (20) '2.0'\n+6553FF Extract OS            00 (0) 'MS-DOS'\n+655400 General Purpose Flag  0000 (0)\n+655402 Compression Method    0000 (0) 'Stored'\n+655404 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+655408 CRC                   00000000 (0)\n+65540C Compressed Size       00000000 (0)\n+655410 Uncompressed Size     00000000 (0)\n+655414 Filename Length       005E (94)\n+655416 Extra Length          0009 (9)\n+655418 Comment Length        0000 (0)\n+65541A Disk Start            0000 (0)\n+65541C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65541E Ext File Attributes   00000000 (0)\n+655422 Local Header Offset   0005EFEB (389099)\n+655426 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x655426: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+655484 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655486   Length              0005 (5)\n+655488   Flags               01 (1) 'Modification'\n+655489   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65548D CENTRAL HEADER #205   02014B50 (33639248)\n+655491 Created Zip Spec      14 (20) '2.0'\n+655492 Created OS            00 (0) 'MS-DOS'\n+655493 Extract Zip Spec      14 (20) '2.0'\n+655494 Extract OS            00 (0) 'MS-DOS'\n+655495 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+655497 Compression Method    0000 (0) 'Stored'\n+655499 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65549D CRC                   57E394F3 (1474532595)\n+6554A1 Compressed Size       0000115C (4444)\n+6554A5 Uncompressed Size     0000115C (4444)\n+6554A9 Filename Length       0074 (116)\n+6554AB Extra Length          0009 (9)\n+6554AD Comment Length        0000 (0)\n+6554AF Disk Start            0000 (0)\n+6554B1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6554B3 Ext File Attributes   00000000 (0)\n+6554B7 Local Header Offset   0005F070 (389232)\n+6554BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6554BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65552F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655531   Length              0005 (5)\n+655533   Flags               01 (1) 'Modification'\n+655534   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+655538 CENTRAL HEADER #206   02014B50 (33639248)\n+65553C Created Zip Spec      14 (20) '2.0'\n+65553D Created OS            00 (0) 'MS-DOS'\n+65553E Extract Zip Spec      14 (20) '2.0'\n+65553F Extract OS            00 (0) 'MS-DOS'\n+655540 General Purpose Flag  0000 (0)\n+655542 Compression Method    0000 (0) 'Stored'\n+655544 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+655548 CRC                   00000000 (0)\n+65554C Compressed Size       00000000 (0)\n+655550 Uncompressed Size     00000000 (0)\n+655554 Filename Length       0028 (40)\n+655556 Extra Length          0009 (9)\n+655558 Comment Length        0000 (0)\n+65555A Disk Start            0000 (0)\n+65555C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65555E Ext File Attributes   00000000 (0)\n+655562 Local Header Offset   00060277 (393847)\n+655566 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x655566: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65558E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655590   Length              0005 (5)\n+655592   Flags               01 (1) 'Modification'\n+655593   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+655597 CENTRAL HEADER #207   02014B50 (33639248)\n+65559B Created Zip Spec      14 (20) '2.0'\n+65559C Created OS            00 (0) 'MS-DOS'\n+65559D Extract Zip Spec      14 (20) '2.0'\n+65559E Extract OS            00 (0) 'MS-DOS'\n+65559F General Purpose Flag  0000 (0)\n+6555A1 Compression Method    0000 (0) 'Stored'\n+6555A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6555A7 CRC                   00000000 (0)\n+6555AB Compressed Size       00000000 (0)\n+6555AF Uncompressed Size     00000000 (0)\n+6555B3 Filename Length       002F (47)\n+6555B5 Extra Length          0009 (9)\n+6555B7 Comment Length        0000 (0)\n+6555B9 Disk Start            0000 (0)\n+6555BB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6555BD Ext File Attributes   00000000 (0)\n+6555C1 Local Header Offset   000602C6 (393926)\n+6555C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6555C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6555F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6555F6   Length              0005 (5)\n+6555F8   Flags               01 (1) 'Modification'\n+6555F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6555FD CENTRAL HEADER #208   02014B50 (33639248)\n+655601 Created Zip Spec      14 (20) '2.0'\n+655602 Created OS            00 (0) 'MS-DOS'\n+655603 Extract Zip Spec      14 (20) '2.0'\n+655604 Extract OS            00 (0) 'MS-DOS'\n+655605 General Purpose Flag  0000 (0)\n+655607 Compression Method    0000 (0) 'Stored'\n+655609 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65560D CRC                   00000000 (0)\n+655611 Compressed Size       00000000 (0)\n+655615 Uncompressed Size     00000000 (0)\n+655619 Filename Length       006E (110)\n+65561B Extra Length          0009 (9)\n+65561D Comment Length        0000 (0)\n+65561F Disk Start            0000 (0)\n+655621 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655623 Ext File Attributes   00000000 (0)\n+655627 Local Header Offset   0006031C (394012)\n+65562B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65562B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+655699 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65569B   Length              0005 (5)\n+65569D   Flags               01 (1) 'Modification'\n+65569E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6556A2 CENTRAL HEADER #209   02014B50 (33639248)\n+6556A6 Created Zip Spec      14 (20) '2.0'\n+6556A7 Created OS            00 (0) 'MS-DOS'\n+6556A8 Extract Zip Spec      14 (20) '2.0'\n+6556A9 Extract OS            00 (0) 'MS-DOS'\n+6556AA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6556AC Compression Method    0000 (0) 'Stored'\n+6556AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6556B2 CRC                   4293EC30 (1116990512)\n+6556B6 Compressed Size       00001A2C (6700)\n+6556BA Uncompressed Size     00001A2C (6700)\n+6556BE Filename Length       0084 (132)\n+6556C0 Extra Length          0009 (9)\n+6556C2 Comment Length        0000 (0)\n+6556C4 Disk Start            0000 (0)\n+6556C6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6556C8 Ext File Attributes   00000000 (0)\n+6556CC Local Header Offset   000603B1 (394161)\n+6556D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             '\n+#\n+# WARNING: Offset 0x6556D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+655754 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655756   Length              0005 (5)\n+655758   Flags               01 (1) 'Modification'\n+655759   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65575D CENTRAL HEADER #210   02014B50 (33639248)\n+655761 Created Zip Spec      14 (20) '2.0'\n+655762 Created OS            00 (0) 'MS-DOS'\n+655763 Extract Zip Spec      14 (20) '2.0'\n+655764 Extract OS            00 (0) 'MS-DOS'\n+655765 General Purpose Flag  0000 (0)\n+655767 Compression Method    0000 (0) 'Stored'\n+655769 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65576D CRC                   00000000 (0)\n+655771 Compressed Size       00000000 (0)\n+655775 Uncompressed Size     00000000 (0)\n+655779 Filename Length       0068 (104)\n+65577B Extra Length          0009 (9)\n+65577D Comment Length        0000 (0)\n+65577F Disk Start            0000 (0)\n+655781 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655783 Ext File Attributes   00000000 (0)\n+655787 Local Header Offset   00061E98 (401048)\n+65578B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65578B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6557F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6557F5   Length              0005 (5)\n+6557F7   Flags               01 (1) 'Modification'\n+6557F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6557FC CENTRAL HEADER #211   02014B50 (33639248)\n+655800 Created Zip Spec      14 (20) '2.0'\n+655801 Created OS            00 (0) 'MS-DOS'\n+655802 Extract Zip Spec      14 (20) '2.0'\n+655803 Extract OS            00 (0) 'MS-DOS'\n+655804 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+655806 Compression Method    0000 (0) 'Stored'\n+655808 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65580C CRC                   83659368 (2204472168)\n+655810 Compressed Size       000019EF (6639)\n+655814 Uncompressed Size     000019EF (6639)\n+655818 Filename Length       007E (126)\n+65581A Extra Length          0009 (9)\n+65581C Comment Length        0000 (0)\n+65581E Disk Start            0000 (0)\n+655820 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655822 Ext File Attributes   00000000 (0)\n+655826 Local Header Offset   00061F27 (401191)\n+65582A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65582A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6558A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6558AA   Length              0005 (5)\n+6558AC   Flags               01 (1) 'Modification'\n+6558AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6558B1 CENTRAL HEADER #212   02014B50 (33639248)\n+6558B5 Created Zip Spec      14 (20) '2.0'\n+6558B6 Created OS            00 (0) 'MS-DOS'\n+6558B7 Extract Zip Spec      14 (20) '2.0'\n+6558B8 Extract OS            00 (0) 'MS-DOS'\n+6558B9 General Purpose Flag  0000 (0)\n+6558BB Compression Method    0000 (0) 'Stored'\n+6558BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6558C1 CRC                   00000000 (0)\n+6558C5 Compressed Size       00000000 (0)\n+6558C9 Uncompressed Size     00000000 (0)\n+6558CD Filename Length       006E (110)\n+6558CF Extra Length          0009 (9)\n+6558D1 Comment Length        0000 (0)\n+6558D3 Disk Start            0000 (0)\n+6558D5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6558D7 Ext File Attributes   00000000 (0)\n+6558DB Local Header Offset   000639CB (408011)\n+6558DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6558DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 65594D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 65594F   Length              0005 (5)\n 655951   Flags               01 (1) 'Modification'\n 655952   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n \n-655956 CENTRAL HEADER #315   02014B50 (33639248)\n+655956 CENTRAL HEADER #213   02014B50 (33639248)\n 65595A Created Zip Spec      14 (20) '2.0'\n 65595B Created OS            00 (0) 'MS-DOS'\n 65595C Extract Zip Spec      14 (20) '2.0'\n 65595D Extract OS            00 (0) 'MS-DOS'\n 65595E General Purpose Flag  0008 (8)\n        [Bit  3]              1 'Streamed'\n 655960 Compression Method    0000 (0) 'Stored'\n 655962 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655966 CRC                   6B96B8CE (1805039822)\n-65596A Compressed Size       00008944 (35140)\n-65596E Uncompressed Size     00008944 (35140)\n-655972 Filename Length       0075 (117)\n+655966 CRC                   73F3DBE5 (1945361381)\n+65596A Compressed Size       00001AFA (6906)\n+65596E Uncompressed Size     00001AFA (6906)\n+655972 Filename Length       0084 (132)\n 655974 Extra Length          0009 (9)\n 655976 Comment Length        0000 (0)\n 655978 Disk Start            0000 (0)\n 65597A Int File Attributes   0000 (0)\n        [Bit 0]               0 'Binary Data'\n 65597C Ext File Attributes   00000000 (0)\n-655980 Local Header Offset   000C341C (799772)\n-655984 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+655980 Local Header Offset   00063A60 (408160)\n+655984 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             '\n #\n-# WARNING: Offset 0x655984: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x655984: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-6559F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6559FB   Length              0005 (5)\n-6559FD   Flags               01 (1) 'Modification'\n-6559FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655A02 CENTRAL HEADER #316   02014B50 (33639248)\n-655A06 Created Zip Spec      14 (20) '2.0'\n-655A07 Created OS            00 (0) 'MS-DOS'\n-655A08 Extract Zip Spec      14 (20) '2.0'\n-655A09 Extract OS            00 (0) 'MS-DOS'\n-655A0A General Purpose Flag  0000 (0)\n-655A0C Compression Method    0000 (0) 'Stored'\n-655A0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655A12 CRC                   00000000 (0)\n-655A16 Compressed Size       00000000 (0)\n-655A1A Uncompressed Size     00000000 (0)\n-655A1E Filename Length       0066 (102)\n-655A20 Extra Length          0009 (9)\n-655A22 Comment Length        0000 (0)\n-655A24 Disk Start            0000 (0)\n-655A26 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-655A28 Ext File Attributes   00000000 (0)\n-655A2C Local Header Offset   000CBE0C (835084)\n-655A30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655A30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-655A96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655A98   Length              0005 (5)\n-655A9A   Flags               01 (1) 'Modification'\n-655A9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655A9F CENTRAL HEADER #317   02014B50 (33639248)\n-655AA3 Created Zip Spec      14 (20) '2.0'\n-655AA4 Created OS            00 (0) 'MS-DOS'\n-655AA5 Extract Zip Spec      14 (20) '2.0'\n-655AA6 Extract OS            00 (0) 'MS-DOS'\n-655AA7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-655AA9 Compression Method    0000 (0) 'Stored'\n-655AAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655AAF CRC                   DB2A8543 (3676996931)\n-655AB3 Compressed Size       00001C3A (7226)\n-655AB7 Uncompressed Size     00001C3A (7226)\n-655ABB Filename Length       007C (124)\n-655ABD Extra Length          0009 (9)\n-655ABF Comment Length        0000 (0)\n-655AC1 Disk Start            0000 (0)\n-655AC3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-655AC5 Ext File Attributes   00000000 (0)\n-655AC9 Local Header Offset   000CBE99 (835225)\n-655ACD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655ACD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-655B49 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655B4B   Length              0005 (5)\n-655B4D   Flags               01 (1) 'Modification'\n-655B4E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655B52 CENTRAL HEADER #318   02014B50 (33639248)\n-655B56 Created Zip Spec      14 (20) '2.0'\n-655B57 Created OS            00 (0) 'MS-DOS'\n-655B58 Extract Zip Spec      14 (20) '2.0'\n-655B59 Extract OS            00 (0) 'MS-DOS'\n-655B5A General Purpose Flag  0000 (0)\n-655B5C Compression Method    0000 (0) 'Stored'\n-655B5E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655B62 CRC                   00000000 (0)\n-655B66 Compressed Size       00000000 (0)\n-655B6A Uncompressed Size     00000000 (0)\n-655B6E Filename Length       0069 (105)\n-655B70 Extra Length          0009 (9)\n-655B72 Comment Length        0000 (0)\n-655B74 Disk Start            0000 (0)\n-655B76 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-655B78 Ext File Attributes   00000000 (0)\n-655B7C Local Header Offset   000CDB86 (842630)\n-655B80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655B80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-655BE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655BEB   Length              0005 (5)\n-655BED   Flags               01 (1) 'Modification'\n-655BEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655BF2 CENTRAL HEADER #319   02014B50 (33639248)\n-655BF6 Created Zip Spec      14 (20) '2.0'\n-655BF7 Created OS            00 (0) 'MS-DOS'\n-655BF8 Extract Zip Spec      14 (20) '2.0'\n-655BF9 Extract OS            00 (0) 'MS-DOS'\n-655BFA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-655BFC Compression Method    0000 (0) 'Stored'\n-655BFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655C02 CRC                   FF5BC4DC (4284204252)\n-655C06 Compressed Size       00001552 (5458)\n-655C0A Uncompressed Size     00001552 (5458)\n-655C0E Filename Length       007F (127)\n-655C10 Extra Length          0009 (9)\n-655C12 Comment Length        0000 (0)\n-655C14 Disk Start            0000 (0)\n-655C16 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-655C18 Ext File Attributes   00000000 (0)\n-655C1C Local Header Offset   000CDC16 (842774)\n-655C20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655C20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-655C9F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655CA1   Length              0005 (5)\n-655CA3   Flags               01 (1) 'Modification'\n-655CA4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655CA8 CENTRAL HEADER #320   02014B50 (33639248)\n-655CAC Created Zip Spec      14 (20) '2.0'\n-655CAD Created OS            00 (0) 'MS-DOS'\n-655CAE Extract Zip Spec      14 (20) '2.0'\n-655CAF Extract OS            00 (0) 'MS-DOS'\n-655CB0 General Purpose Flag  0000 (0)\n-655CB2 Compression Method    0000 (0) 'Stored'\n-655CB4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655CB8 CRC                   00000000 (0)\n-655CBC Compressed Size       00000000 (0)\n-655CC0 Uncompressed Size     00000000 (0)\n-655CC4 Filename Length       0069 (105)\n-655CC6 Extra Length          0009 (9)\n-655CC8 Comment Length        0000 (0)\n-655CCA Disk Start            0000 (0)\n-655CCC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-655CCE Ext File Attributes   00000000 (0)\n-655CD2 Local Header Offset   000CF21E (848414)\n-655CD6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655CD6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-655D3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655D41   Length              0005 (5)\n-655D43   Flags               01 (1) 'Modification'\n-655D44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655D48 CENTRAL HEADER #321   02014B50 (33639248)\n-655D4C Created Zip Spec      14 (20) '2.0'\n-655D4D Created OS            00 (0) 'MS-DOS'\n-655D4E Extract Zip Spec      14 (20) '2.0'\n-655D4F Extract OS            00 (0) 'MS-DOS'\n-655D50 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-655D52 Compression Method    0000 (0) 'Stored'\n-655D54 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655D58 CRC                   D6140D51 (3591638353)\n-655D5C Compressed Size       00003C2C (15404)\n-655D60 Uncompressed Size     00003C2C (15404)\n-655D64 Filename Length       007F (127)\n-655D66 Extra Length          0009 (9)\n-655D68 Comment Length        0000 (0)\n-655D6A Disk Start            0000 (0)\n-655D6C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-655D6E Ext File Attributes   00000000 (0)\n-655D72 Local Header Offset   000CF2AE (848558)\n-655D76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655D76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-655DF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655DF7   Length              0005 (5)\n-655DF9   Flags               01 (1) 'Modification'\n-655DFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655DFE CENTRAL HEADER #322   02014B50 (33639248)\n-655E02 Created Zip Spec      14 (20) '2.0'\n-655E03 Created OS            00 (0) 'MS-DOS'\n-655E04 Extract Zip Spec      14 (20) '2.0'\n-655E05 Extract OS            00 (0) 'MS-DOS'\n-655E06 General Purpose Flag  0000 (0)\n-655E08 Compression Method    0000 (0) 'Stored'\n-655E0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655E0E CRC                   00000000 (0)\n-655E12 Compressed Size       00000000 (0)\n-655E16 Uncompressed Size     00000000 (0)\n-655E1A Filename Length       0068 (104)\n-655E1C Extra Length          0009 (9)\n-655E1E Comment Length        0000 (0)\n-655E20 Disk Start            0000 (0)\n-655E22 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-655E24 Ext File Attributes   00000000 (0)\n-655E28 Local Header Offset   000D2F90 (864144)\n-655E2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655E2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-655E94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655E96   Length              0005 (5)\n-655E98   Flags               01 (1) 'Modification'\n-655E99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655E9D CENTRAL HEADER #323   02014B50 (33639248)\n-655EA1 Created Zip Spec      14 (20) '2.0'\n-655EA2 Created OS            00 (0) 'MS-DOS'\n-655EA3 Extract Zip Spec      14 (20) '2.0'\n-655EA4 Extract OS            00 (0) 'MS-DOS'\n-655EA5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-655EA7 Compression Method    0000 (0) 'Stored'\n-655EA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655EAD CRC                   86CE2079 (2261655673)\n-655EB1 Compressed Size       00002162 (8546)\n-655EB5 Uncompressed Size     00002162 (8546)\n-655EB9 Filename Length       007E (126)\n-655EBB Extra Length          0009 (9)\n-655EBD Comment Length        0000 (0)\n-655EBF Disk Start            0000 (0)\n-655EC1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-655EC3 Ext File Attributes   00000000 (0)\n-655EC7 Local Header Offset   000D301F (864287)\n-655ECB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655ECB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-655F49 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655F4B   Length              0005 (5)\n-655F4D   Flags               01 (1) 'Modification'\n-655F4E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655F52 CENTRAL HEADER #324   02014B50 (33639248)\n-655F56 Created Zip Spec      14 (20) '2.0'\n-655F57 Created OS            00 (0) 'MS-DOS'\n-655F58 Extract Zip Spec      14 (20) '2.0'\n-655F59 Extract OS            00 (0) 'MS-DOS'\n-655F5A General Purpose Flag  0000 (0)\n-655F5C Compression Method    0000 (0) 'Stored'\n-655F5E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655F62 CRC                   00000000 (0)\n-655F66 Compressed Size       00000000 (0)\n-655F6A Uncompressed Size     00000000 (0)\n-655F6E Filename Length       0026 (38)\n-655F70 Extra Length          0009 (9)\n-655F72 Comment Length        0000 (0)\n-655F74 Disk Start            0000 (0)\n-655F76 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-655F78 Ext File Attributes   00000000 (0)\n-655F7C Local Header Offset   000D5236 (873014)\n-655F80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655F80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-655FA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-655FA8   Length              0005 (5)\n-655FAA   Flags               01 (1) 'Modification'\n-655FAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-655FAF CENTRAL HEADER #325   02014B50 (33639248)\n-655FB3 Created Zip Spec      14 (20) '2.0'\n-655FB4 Created OS            00 (0) 'MS-DOS'\n-655FB5 Extract Zip Spec      14 (20) '2.0'\n-655FB6 Extract OS            00 (0) 'MS-DOS'\n-655FB7 General Purpose Flag  0000 (0)\n-655FB9 Compression Method    0000 (0) 'Stored'\n-655FBB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-655FBF CRC                   00000000 (0)\n-655FC3 Compressed Size       00000000 (0)\n-655FC7 Uncompressed Size     00000000 (0)\n-655FCB Filename Length       002D (45)\n-655FCD Extra Length          0009 (9)\n-655FCF Comment Length        0000 (0)\n-655FD1 Disk Start            0000 (0)\n-655FD3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-655FD5 Ext File Attributes   00000000 (0)\n-655FD9 Local Header Offset   000D5283 (873091)\n-655FDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x655FDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65600A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65600C   Length              0005 (5)\n-65600E   Flags               01 (1) 'Modification'\n-65600F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656013 CENTRAL HEADER #326   02014B50 (33639248)\n-656017 Created Zip Spec      14 (20) '2.0'\n-656018 Created OS            00 (0) 'MS-DOS'\n-656019 Extract Zip Spec      14 (20) '2.0'\n-65601A Extract OS            00 (0) 'MS-DOS'\n-65601B General Purpose Flag  0000 (0)\n-65601D Compression Method    0000 (0) 'Stored'\n-65601F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656023 CRC                   00000000 (0)\n-656027 Compressed Size       00000000 (0)\n-65602B Uncompressed Size     00000000 (0)\n-65602F Filename Length       005B (91)\n-656031 Extra Length          0009 (9)\n-656033 Comment Length        0000 (0)\n-656035 Disk Start            0000 (0)\n-656037 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-656039 Ext File Attributes   00000000 (0)\n-65603D Local Header Offset   000D52D7 (873175)\n-656041 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656041: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65609C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65609E   Length              0005 (5)\n-6560A0   Flags               01 (1) 'Modification'\n-6560A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6560A5 CENTRAL HEADER #327   02014B50 (33639248)\n-6560A9 Created Zip Spec      14 (20) '2.0'\n-6560AA Created OS            00 (0) 'MS-DOS'\n-6560AB Extract Zip Spec      14 (20) '2.0'\n-6560AC Extract OS            00 (0) 'MS-DOS'\n-6560AD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6560AF Compression Method    0000 (0) 'Stored'\n-6560B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6560B5 CRC                   B12610E6 (2972061926)\n-6560B9 Compressed Size       00000A5B (2651)\n-6560BD Uncompressed Size     00000A5B (2651)\n-6560C1 Filename Length       0071 (113)\n-6560C3 Extra Length          0009 (9)\n-6560C5 Comment Length        0000 (0)\n-6560C7 Disk Start            0000 (0)\n-6560C9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6560CB Ext File Attributes   00000000 (0)\n-6560CF Local Header Offset   000D5359 (873305)\n-6560D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6560D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-656144 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656146   Length              0005 (5)\n-656148   Flags               01 (1) 'Modification'\n-656149   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65614D CENTRAL HEADER #328   02014B50 (33639248)\n-656151 Created Zip Spec      14 (20) '2.0'\n-656152 Created OS            00 (0) 'MS-DOS'\n-656153 Extract Zip Spec      14 (20) '2.0'\n-656154 Extract OS            00 (0) 'MS-DOS'\n-656155 General Purpose Flag  0000 (0)\n-656157 Compression Method    0000 (0) 'Stored'\n-656159 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65615D CRC                   00000000 (0)\n-656161 Compressed Size       00000000 (0)\n-656165 Uncompressed Size     00000000 (0)\n-656169 Filename Length       0035 (53)\n-65616B Extra Length          0009 (9)\n-65616D Comment Length        0000 (0)\n-65616F Disk Start            0000 (0)\n-656171 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-656173 Ext File Attributes   00000000 (0)\n-656177 Local Header Offset   000D5E5C (876124)\n-65617B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65617B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6561B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6561B2   Length              0005 (5)\n-6561B4   Flags               01 (1) 'Modification'\n-6561B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6561B9 CENTRAL HEADER #329   02014B50 (33639248)\n-6561BD Created Zip Spec      14 (20) '2.0'\n-6561BE Created OS            00 (0) 'MS-DOS'\n-6561BF Extract Zip Spec      14 (20) '2.0'\n-6561C0 Extract OS            00 (0) 'MS-DOS'\n-6561C1 General Purpose Flag  0000 (0)\n-6561C3 Compression Method    0000 (0) 'Stored'\n-6561C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6561C9 CRC                   00000000 (0)\n-6561CD Compressed Size       00000000 (0)\n-6561D1 Uncompressed Size     00000000 (0)\n-6561D5 Filename Length       003C (60)\n-6561D7 Extra Length          0009 (9)\n-6561D9 Comment Length        0000 (0)\n-6561DB Disk Start            0000 (0)\n-6561DD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6561DF Ext File Attributes   00000000 (0)\n-6561E3 Local Header Offset   000D5EB8 (876216)\n-6561E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6561E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-656223 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656225   Length              0005 (5)\n-656227   Flags               01 (1) 'Modification'\n-656228   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65622C CENTRAL HEADER #330   02014B50 (33639248)\n-656230 Created Zip Spec      14 (20) '2.0'\n-656231 Created OS            00 (0) 'MS-DOS'\n-656232 Extract Zip Spec      14 (20) '2.0'\n-656233 Extract OS            00 (0) 'MS-DOS'\n-656234 General Purpose Flag  0000 (0)\n-656236 Compression Method    0000 (0) 'Stored'\n-656238 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65623C CRC                   00000000 (0)\n-656240 Compressed Size       00000000 (0)\n-656244 Uncompressed Size     00000000 (0)\n-656248 Filename Length       0076 (118)\n-65624A Extra Length          0009 (9)\n-65624C Comment Length        0000 (0)\n-65624E Disk Start            0000 (0)\n-656250 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-656252 Ext File Attributes   00000000 (0)\n-656256 Local Header Offset   000D5F1B (876315)\n-65625A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65625A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6562D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6562D2   Length              0005 (5)\n-6562D4   Flags               01 (1) 'Modification'\n-6562D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6562D9 CENTRAL HEADER #331   02014B50 (33639248)\n-6562DD Created Zip Spec      14 (20) '2.0'\n-6562DE Created OS            00 (0) 'MS-DOS'\n-6562DF Extract Zip Spec      14 (20) '2.0'\n-6562E0 Extract OS            00 (0) 'MS-DOS'\n-6562E1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6562E3 Compression Method    0000 (0) 'Stored'\n-6562E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6562E9 CRC                   041CE92B (69003563)\n-6562ED Compressed Size       00000B22 (2850)\n-6562F1 Uncompressed Size     00000B22 (2850)\n-6562F5 Filename Length       008C (140)\n-6562F7 Extra Length          0009 (9)\n-6562F9 Comment Length        0000 (0)\n-6562FB Disk Start            0000 (0)\n-6562FD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6562FF Ext File Attributes   00000000 (0)\n-656303 Local Header Offset   000D5FB8 (876472)\n-656307 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXX'\n+655A08 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655A0A   Length              0005 (5)\n+655A0C   Flags               01 (1) 'Modification'\n+655A0D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+655A11 CENTRAL HEADER #214   02014B50 (33639248)\n+655A15 Created Zip Spec      14 (20) '2.0'\n+655A16 Created OS            00 (0) 'MS-DOS'\n+655A17 Extract Zip Spec      14 (20) '2.0'\n+655A18 Extract OS            00 (0) 'MS-DOS'\n+655A19 General Purpose Flag  0000 (0)\n+655A1B Compression Method    0000 (0) 'Stored'\n+655A1D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+655A21 CRC                   00000000 (0)\n+655A25 Compressed Size       00000000 (0)\n+655A29 Uncompressed Size     00000000 (0)\n+655A2D Filename Length       0068 (104)\n+655A2F Extra Length          0009 (9)\n+655A31 Comment Length        0000 (0)\n+655A33 Disk Start            0000 (0)\n+655A35 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655A37 Ext File Attributes   00000000 (0)\n+655A3B Local Header Offset   00065615 (415253)\n+655A3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x655A3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+655AA7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655AA9   Length              0005 (5)\n+655AAB   Flags               01 (1) 'Modification'\n+655AAC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+655AB0 CENTRAL HEADER #215   02014B50 (33639248)\n+655AB4 Created Zip Spec      14 (20) '2.0'\n+655AB5 Created OS            00 (0) 'MS-DOS'\n+655AB6 Extract Zip Spec      14 (20) '2.0'\n+655AB7 Extract OS            00 (0) 'MS-DOS'\n+655AB8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+655ABA Compression Method    0000 (0) 'Stored'\n+655ABC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+655AC0 CRC                   847E83D6 (2222883798)\n+655AC4 Compressed Size       00001E83 (7811)\n+655AC8 Uncompressed Size     00001E83 (7811)\n+655ACC Filename Length       007E (126)\n+655ACE Extra Length          0009 (9)\n+655AD0 Comment Length        0000 (0)\n+655AD2 Disk Start            0000 (0)\n+655AD4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655AD6 Ext File Attributes   00000000 (0)\n+655ADA Local Header Offset   000656A4 (415396)\n+655ADE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x655ADE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+655B5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655B5E   Length              0005 (5)\n+655B60   Flags               01 (1) 'Modification'\n+655B61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+655B65 CENTRAL HEADER #216   02014B50 (33639248)\n+655B69 Created Zip Spec      14 (20) '2.0'\n+655B6A Created OS            00 (0) 'MS-DOS'\n+655B6B Extract Zip Spec      14 (20) '2.0'\n+655B6C Extract OS            00 (0) 'MS-DOS'\n+655B6D General Purpose Flag  0000 (0)\n+655B6F Compression Method    0000 (0) 'Stored'\n+655B71 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+655B75 CRC                   00000000 (0)\n+655B79 Compressed Size       00000000 (0)\n+655B7D Uncompressed Size     00000000 (0)\n+655B81 Filename Length       0028 (40)\n+655B83 Extra Length          0009 (9)\n+655B85 Comment Length        0000 (0)\n+655B87 Disk Start            0000 (0)\n+655B89 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655B8B Ext File Attributes   00000000 (0)\n+655B8F Local Header Offset   000675DC (423388)\n+655B93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x655B93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+655BBB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655BBD   Length              0005 (5)\n+655BBF   Flags               01 (1) 'Modification'\n+655BC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+655BC4 CENTRAL HEADER #217   02014B50 (33639248)\n+655BC8 Created Zip Spec      14 (20) '2.0'\n+655BC9 Created OS            00 (0) 'MS-DOS'\n+655BCA Extract Zip Spec      14 (20) '2.0'\n+655BCB Extract OS            00 (0) 'MS-DOS'\n+655BCC General Purpose Flag  0000 (0)\n+655BCE Compression Method    0000 (0) 'Stored'\n+655BD0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+655BD4 CRC                   00000000 (0)\n+655BD8 Compressed Size       00000000 (0)\n+655BDC Uncompressed Size     00000000 (0)\n+655BE0 Filename Length       002F (47)\n+655BE2 Extra Length          0009 (9)\n+655BE4 Comment Length        0000 (0)\n+655BE6 Disk Start            0000 (0)\n+655BE8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655BEA Ext File Attributes   00000000 (0)\n+655BEE Local Header Offset   0006762B (423467)\n+655BF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x655BF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+655C21 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655C23   Length              0005 (5)\n+655C25   Flags               01 (1) 'Modification'\n+655C26   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+655C2A CENTRAL HEADER #218   02014B50 (33639248)\n+655C2E Created Zip Spec      14 (20) '2.0'\n+655C2F Created OS            00 (0) 'MS-DOS'\n+655C30 Extract Zip Spec      14 (20) '2.0'\n+655C31 Extract OS            00 (0) 'MS-DOS'\n+655C32 General Purpose Flag  0000 (0)\n+655C34 Compression Method    0000 (0) 'Stored'\n+655C36 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+655C3A CRC                   00000000 (0)\n+655C3E Compressed Size       00000000 (0)\n+655C42 Uncompressed Size     00000000 (0)\n+655C46 Filename Length       006E (110)\n+655C48 Extra Length          0009 (9)\n+655C4A Comment Length        0000 (0)\n+655C4C Disk Start            0000 (0)\n+655C4E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655C50 Ext File Attributes   00000000 (0)\n+655C54 Local Header Offset   00067681 (423553)\n+655C58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x655C58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+655CC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655CC8   Length              0005 (5)\n+655CCA   Flags               01 (1) 'Modification'\n+655CCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+655CCF CENTRAL HEADER #219   02014B50 (33639248)\n+655CD3 Created Zip Spec      14 (20) '2.0'\n+655CD4 Created OS            00 (0) 'MS-DOS'\n+655CD5 Extract Zip Spec      14 (20) '2.0'\n+655CD6 Extract OS            00 (0) 'MS-DOS'\n+655CD7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+655CD9 Compression Method    0000 (0) 'Stored'\n+655CDB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+655CDF CRC                   8DCDE743 (2379081539)\n+655CE3 Compressed Size       00003DFB (15867)\n+655CE7 Uncompressed Size     00003DFB (15867)\n+655CEB Filename Length       0084 (132)\n+655CED Extra Length          0009 (9)\n+655CEF Comment Length        0000 (0)\n+655CF1 Disk Start            0000 (0)\n+655CF3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655CF5 Ext File Attributes   00000000 (0)\n+655CF9 Local Header Offset   00067716 (423702)\n+655CFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             '\n #\n-# WARNING: Offset 0x656307: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x655CFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-656393 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656395   Length              0005 (5)\n-656397   Flags               01 (1) 'Modification'\n-656398   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65639C CENTRAL HEADER #332   02014B50 (33639248)\n-6563A0 Created Zip Spec      14 (20) '2.0'\n-6563A1 Created OS            00 (0) 'MS-DOS'\n-6563A2 Extract Zip Spec      14 (20) '2.0'\n-6563A3 Extract OS            00 (0) 'MS-DOS'\n-6563A4 General Purpose Flag  0000 (0)\n-6563A6 Compression Method    0000 (0) 'Stored'\n-6563A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6563AC CRC                   00000000 (0)\n-6563B0 Compressed Size       00000000 (0)\n-6563B4 Uncompressed Size     00000000 (0)\n-6563B8 Filename Length       0075 (117)\n-6563BA Extra Length          0009 (9)\n-6563BC Comment Length        0000 (0)\n-6563BE Disk Start            0000 (0)\n-6563C0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6563C2 Ext File Attributes   00000000 (0)\n-6563C6 Local Header Offset   000D6B9D (879517)\n-6563CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6563CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65643F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656441   Length              0005 (5)\n-656443   Flags               01 (1) 'Modification'\n-656444   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656448 CENTRAL HEADER #333   02014B50 (33639248)\n-65644C Created Zip Spec      14 (20) '2.0'\n-65644D Created OS            00 (0) 'MS-DOS'\n-65644E Extract Zip Spec      14 (20) '2.0'\n-65644F Extract OS            00 (0) 'MS-DOS'\n-656450 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-656452 Compression Method    0000 (0) 'Stored'\n-656454 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656458 CRC                   16A4BA93 (379894419)\n-65645C Compressed Size       000016E4 (5860)\n-656460 Uncompressed Size     000016E4 (5860)\n-656464 Filename Length       008B (139)\n-656466 Extra Length          0009 (9)\n-656468 Comment Length        0000 (0)\n-65646A Disk Start            0000 (0)\n-65646C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65646E Ext File Attributes   00000000 (0)\n-656472 Local Header Offset   000D6C39 (879673)\n-656476 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXX'\n+655D81 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655D83   Length              0005 (5)\n+655D85   Flags               01 (1) 'Modification'\n+655D86   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+655D8A CENTRAL HEADER #220   02014B50 (33639248)\n+655D8E Created Zip Spec      14 (20) '2.0'\n+655D8F Created OS            00 (0) 'MS-DOS'\n+655D90 Extract Zip Spec      14 (20) '2.0'\n+655D91 Extract OS            00 (0) 'MS-DOS'\n+655D92 General Purpose Flag  0000 (0)\n+655D94 Compression Method    0000 (0) 'Stored'\n+655D96 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+655D9A CRC                   00000000 (0)\n+655D9E Compressed Size       00000000 (0)\n+655DA2 Uncompressed Size     00000000 (0)\n+655DA6 Filename Length       0068 (104)\n+655DA8 Extra Length          0009 (9)\n+655DAA Comment Length        0000 (0)\n+655DAC Disk Start            0000 (0)\n+655DAE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655DB0 Ext File Attributes   00000000 (0)\n+655DB4 Local Header Offset   0006B5CC (439756)\n+655DB8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x655DB8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+655E20 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655E22   Length              0005 (5)\n+655E24   Flags               01 (1) 'Modification'\n+655E25   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+655E29 CENTRAL HEADER #221   02014B50 (33639248)\n+655E2D Created Zip Spec      14 (20) '2.0'\n+655E2E Created OS            00 (0) 'MS-DOS'\n+655E2F Extract Zip Spec      14 (20) '2.0'\n+655E30 Extract OS            00 (0) 'MS-DOS'\n+655E31 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+655E33 Compression Method    0000 (0) 'Stored'\n+655E35 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+655E39 CRC                   46F84C94 (1190677652)\n+655E3D Compressed Size       00003DB7 (15799)\n+655E41 Uncompressed Size     00003DB7 (15799)\n+655E45 Filename Length       007E (126)\n+655E47 Extra Length          0009 (9)\n+655E49 Comment Length        0000 (0)\n+655E4B Disk Start            0000 (0)\n+655E4D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655E4F Ext File Attributes   00000000 (0)\n+655E53 Local Header Offset   0006B65B (439899)\n+655E57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x655E57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+655ED5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655ED7   Length              0005 (5)\n+655ED9   Flags               01 (1) 'Modification'\n+655EDA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+655EDE CENTRAL HEADER #222   02014B50 (33639248)\n+655EE2 Created Zip Spec      14 (20) '2.0'\n+655EE3 Created OS            00 (0) 'MS-DOS'\n+655EE4 Extract Zip Spec      14 (20) '2.0'\n+655EE5 Extract OS            00 (0) 'MS-DOS'\n+655EE6 General Purpose Flag  0000 (0)\n+655EE8 Compression Method    0000 (0) 'Stored'\n+655EEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+655EEE CRC                   00000000 (0)\n+655EF2 Compressed Size       00000000 (0)\n+655EF6 Uncompressed Size     00000000 (0)\n+655EFA Filename Length       006E (110)\n+655EFC Extra Length          0009 (9)\n+655EFE Comment Length        0000 (0)\n+655F00 Disk Start            0000 (0)\n+655F02 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655F04 Ext File Attributes   00000000 (0)\n+655F08 Local Header Offset   0006F4C7 (455879)\n+655F0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x655F0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+655F7A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+655F7C   Length              0005 (5)\n+655F7E   Flags               01 (1) 'Modification'\n+655F7F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+655F83 CENTRAL HEADER #223   02014B50 (33639248)\n+655F87 Created Zip Spec      14 (20) '2.0'\n+655F88 Created OS            00 (0) 'MS-DOS'\n+655F89 Extract Zip Spec      14 (20) '2.0'\n+655F8A Extract OS            00 (0) 'MS-DOS'\n+655F8B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+655F8D Compression Method    0000 (0) 'Stored'\n+655F8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+655F93 CRC                   96FAF425 (2533028901)\n+655F97 Compressed Size       000028CF (10447)\n+655F9B Uncompressed Size     000028CF (10447)\n+655F9F Filename Length       0084 (132)\n+655FA1 Extra Length          0009 (9)\n+655FA3 Comment Length        0000 (0)\n+655FA5 Disk Start            0000 (0)\n+655FA7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+655FA9 Ext File Attributes   00000000 (0)\n+655FAD Local Header Offset   0006F55C (456028)\n+655FB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             '\n #\n-# WARNING: Offset 0x656476: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x655FB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-656501 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656503   Length              0005 (5)\n-656505   Flags               01 (1) 'Modification'\n-656506   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65650A CENTRAL HEADER #334   02014B50 (33639248)\n-65650E Created Zip Spec      14 (20) '2.0'\n-65650F Created OS            00 (0) 'MS-DOS'\n-656510 Extract Zip Spec      14 (20) '2.0'\n-656511 Extract OS            00 (0) 'MS-DOS'\n-656512 General Purpose Flag  0000 (0)\n-656514 Compression Method    0000 (0) 'Stored'\n-656516 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65651A CRC                   00000000 (0)\n-65651E Compressed Size       00000000 (0)\n-656522 Uncompressed Size     00000000 (0)\n-656526 Filename Length       0078 (120)\n-656528 Extra Length          0009 (9)\n-65652A Comment Length        0000 (0)\n-65652C Disk Start            0000 (0)\n-65652E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-656530 Ext File Attributes   00000000 (0)\n-656534 Local Header Offset   000D83DF (885727)\n-656538 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656538: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6565B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6565B2   Length              0005 (5)\n-6565B4   Flags               01 (1) 'Modification'\n-6565B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6565B9 CENTRAL HEADER #335   02014B50 (33639248)\n-6565BD Created Zip Spec      14 (20) '2.0'\n-6565BE Created OS            00 (0) 'MS-DOS'\n-6565BF Extract Zip Spec      14 (20) '2.0'\n-6565C0 Extract OS            00 (0) 'MS-DOS'\n-6565C1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6565C3 Compression Method    0000 (0) 'Stored'\n-6565C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6565C9 CRC                   390AB403 (957002755)\n-6565CD Compressed Size       00001068 (4200)\n-6565D1 Uncompressed Size     00001068 (4200)\n-6565D5 Filename Length       008E (142)\n-6565D7 Extra Length          0009 (9)\n-6565D9 Comment Length        0000 (0)\n-6565DB Disk Start            0000 (0)\n-6565DD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6565DF Ext File Attributes   00000000 (0)\n-6565E3 Local Header Offset   000D847E (885886)\n-6565E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXX'\n+656035 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656037   Length              0005 (5)\n+656039   Flags               01 (1) 'Modification'\n+65603A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65603E CENTRAL HEADER #224   02014B50 (33639248)\n+656042 Created Zip Spec      14 (20) '2.0'\n+656043 Created OS            00 (0) 'MS-DOS'\n+656044 Extract Zip Spec      14 (20) '2.0'\n+656045 Extract OS            00 (0) 'MS-DOS'\n+656046 General Purpose Flag  0000 (0)\n+656048 Compression Method    0000 (0) 'Stored'\n+65604A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65604E CRC                   00000000 (0)\n+656052 Compressed Size       00000000 (0)\n+656056 Uncompressed Size     00000000 (0)\n+65605A Filename Length       0068 (104)\n+65605C Extra Length          0009 (9)\n+65605E Comment Length        0000 (0)\n+656060 Disk Start            0000 (0)\n+656062 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656064 Ext File Attributes   00000000 (0)\n+656068 Local Header Offset   00071EE6 (466662)\n+65606C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65606C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6560D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6560D6   Length              0005 (5)\n+6560D8   Flags               01 (1) 'Modification'\n+6560D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6560DD CENTRAL HEADER #225   02014B50 (33639248)\n+6560E1 Created Zip Spec      14 (20) '2.0'\n+6560E2 Created OS            00 (0) 'MS-DOS'\n+6560E3 Extract Zip Spec      14 (20) '2.0'\n+6560E4 Extract OS            00 (0) 'MS-DOS'\n+6560E5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6560E7 Compression Method    0000 (0) 'Stored'\n+6560E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6560ED CRC                   77DFCD97 (2011155863)\n+6560F1 Compressed Size       00002C4A (11338)\n+6560F5 Uncompressed Size     00002C4A (11338)\n+6560F9 Filename Length       007E (126)\n+6560FB Extra Length          0009 (9)\n+6560FD Comment Length        0000 (0)\n+6560FF Disk Start            0000 (0)\n+656101 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656103 Ext File Attributes   00000000 (0)\n+656107 Local Header Offset   00071F75 (466805)\n+65610B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65610B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656189 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65618B   Length              0005 (5)\n+65618D   Flags               01 (1) 'Modification'\n+65618E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656192 CENTRAL HEADER #226   02014B50 (33639248)\n+656196 Created Zip Spec      14 (20) '2.0'\n+656197 Created OS            00 (0) 'MS-DOS'\n+656198 Extract Zip Spec      14 (20) '2.0'\n+656199 Extract OS            00 (0) 'MS-DOS'\n+65619A General Purpose Flag  0000 (0)\n+65619C Compression Method    0000 (0) 'Stored'\n+65619E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6561A2 CRC                   00000000 (0)\n+6561A6 Compressed Size       00000000 (0)\n+6561AA Uncompressed Size     00000000 (0)\n+6561AE Filename Length       0028 (40)\n+6561B0 Extra Length          0009 (9)\n+6561B2 Comment Length        0000 (0)\n+6561B4 Disk Start            0000 (0)\n+6561B6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6561B8 Ext File Attributes   00000000 (0)\n+6561BC Local Header Offset   00074C74 (478324)\n+6561C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6561C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6561E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6561EA   Length              0005 (5)\n+6561EC   Flags               01 (1) 'Modification'\n+6561ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6561F1 CENTRAL HEADER #227   02014B50 (33639248)\n+6561F5 Created Zip Spec      14 (20) '2.0'\n+6561F6 Created OS            00 (0) 'MS-DOS'\n+6561F7 Extract Zip Spec      14 (20) '2.0'\n+6561F8 Extract OS            00 (0) 'MS-DOS'\n+6561F9 General Purpose Flag  0000 (0)\n+6561FB Compression Method    0000 (0) 'Stored'\n+6561FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656201 CRC                   00000000 (0)\n+656205 Compressed Size       00000000 (0)\n+656209 Uncompressed Size     00000000 (0)\n+65620D Filename Length       002F (47)\n+65620F Extra Length          0009 (9)\n+656211 Comment Length        0000 (0)\n+656213 Disk Start            0000 (0)\n+656215 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656217 Ext File Attributes   00000000 (0)\n+65621B Local Header Offset   00074CC3 (478403)\n+65621F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65621F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65624E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656250   Length              0005 (5)\n+656252   Flags               01 (1) 'Modification'\n+656253   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656257 CENTRAL HEADER #228   02014B50 (33639248)\n+65625B Created Zip Spec      14 (20) '2.0'\n+65625C Created OS            00 (0) 'MS-DOS'\n+65625D Extract Zip Spec      14 (20) '2.0'\n+65625E Extract OS            00 (0) 'MS-DOS'\n+65625F General Purpose Flag  0000 (0)\n+656261 Compression Method    0000 (0) 'Stored'\n+656263 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656267 CRC                   00000000 (0)\n+65626B Compressed Size       00000000 (0)\n+65626F Uncompressed Size     00000000 (0)\n+656273 Filename Length       006E (110)\n+656275 Extra Length          0009 (9)\n+656277 Comment Length        0000 (0)\n+656279 Disk Start            0000 (0)\n+65627B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65627D Ext File Attributes   00000000 (0)\n+656281 Local Header Offset   00074D19 (478489)\n+656285 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656285: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6562F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6562F5   Length              0005 (5)\n+6562F7   Flags               01 (1) 'Modification'\n+6562F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6562FC CENTRAL HEADER #229   02014B50 (33639248)\n+656300 Created Zip Spec      14 (20) '2.0'\n+656301 Created OS            00 (0) 'MS-DOS'\n+656302 Extract Zip Spec      14 (20) '2.0'\n+656303 Extract OS            00 (0) 'MS-DOS'\n+656304 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+656306 Compression Method    0000 (0) 'Stored'\n+656308 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65630C CRC                   249CCFCD (614256589)\n+656310 Compressed Size       00005101 (20737)\n+656314 Uncompressed Size     00005101 (20737)\n+656318 Filename Length       0084 (132)\n+65631A Extra Length          0009 (9)\n+65631C Comment Length        0000 (0)\n+65631E Disk Start            0000 (0)\n+656320 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656322 Ext File Attributes   00000000 (0)\n+656326 Local Header Offset   00074DAE (478638)\n+65632A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             '\n #\n-# WARNING: Offset 0x6565E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x65632A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-656675 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656677   Length              0005 (5)\n-656679   Flags               01 (1) 'Modification'\n-65667A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65667E CENTRAL HEADER #336   02014B50 (33639248)\n-656682 Created Zip Spec      14 (20) '2.0'\n-656683 Created OS            00 (0) 'MS-DOS'\n-656684 Extract Zip Spec      14 (20) '2.0'\n-656685 Extract OS            00 (0) 'MS-DOS'\n-656686 General Purpose Flag  0000 (0)\n-656688 Compression Method    0000 (0) 'Stored'\n-65668A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65668E CRC                   00000000 (0)\n-656692 Compressed Size       00000000 (0)\n-656696 Uncompressed Size     00000000 (0)\n-65669A Filename Length       0074 (116)\n-65669C Extra Length          0009 (9)\n-65669E Comment Length        0000 (0)\n-6566A0 Disk Start            0000 (0)\n-6566A2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6566A4 Ext File Attributes   00000000 (0)\n-6566A8 Local Header Offset   000D95AB (890283)\n-6566AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6566AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-656720 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656722   Length              0005 (5)\n-656724   Flags               01 (1) 'Modification'\n-656725   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656729 CENTRAL HEADER #337   02014B50 (33639248)\n-65672D Created Zip Spec      14 (20) '2.0'\n-65672E Created OS            00 (0) 'MS-DOS'\n-65672F Extract Zip Spec      14 (20) '2.0'\n-656730 Extract OS            00 (0) 'MS-DOS'\n-656731 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-656733 Compression Method    0000 (0) 'Stored'\n-656735 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656739 CRC                   3DE98548 (1038714184)\n-65673D Compressed Size       000016AA (5802)\n-656741 Uncompressed Size     000016AA (5802)\n-656745 Filename Length       008A (138)\n-656747 Extra Length          0009 (9)\n-656749 Comment Length        0000 (0)\n-65674B Disk Start            0000 (0)\n-65674D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65674F Ext File Attributes   00000000 (0)\n-656753 Local Header Offset   000D9646 (890438)\n-656757 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXX'\n+6563AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6563B0   Length              0005 (5)\n+6563B2   Flags               01 (1) 'Modification'\n+6563B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6563B7 CENTRAL HEADER #230   02014B50 (33639248)\n+6563BB Created Zip Spec      14 (20) '2.0'\n+6563BC Created OS            00 (0) 'MS-DOS'\n+6563BD Extract Zip Spec      14 (20) '2.0'\n+6563BE Extract OS            00 (0) 'MS-DOS'\n+6563BF General Purpose Flag  0000 (0)\n+6563C1 Compression Method    0000 (0) 'Stored'\n+6563C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6563C7 CRC                   00000000 (0)\n+6563CB Compressed Size       00000000 (0)\n+6563CF Uncompressed Size     00000000 (0)\n+6563D3 Filename Length       0068 (104)\n+6563D5 Extra Length          0009 (9)\n+6563D7 Comment Length        0000 (0)\n+6563D9 Disk Start            0000 (0)\n+6563DB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6563DD Ext File Attributes   00000000 (0)\n+6563E1 Local Header Offset   00079F6A (499562)\n+6563E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6563E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65644D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65644F   Length              0005 (5)\n+656451   Flags               01 (1) 'Modification'\n+656452   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656456 CENTRAL HEADER #231   02014B50 (33639248)\n+65645A Created Zip Spec      14 (20) '2.0'\n+65645B Created OS            00 (0) 'MS-DOS'\n+65645C Extract Zip Spec      14 (20) '2.0'\n+65645D Extract OS            00 (0) 'MS-DOS'\n+65645E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+656460 Compression Method    0000 (0) 'Stored'\n+656462 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656466 CRC                   46DA6369 (1188717417)\n+65646A Compressed Size       00003DB7 (15799)\n+65646E Uncompressed Size     00003DB7 (15799)\n+656472 Filename Length       007E (126)\n+656474 Extra Length          0009 (9)\n+656476 Comment Length        0000 (0)\n+656478 Disk Start            0000 (0)\n+65647A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65647C Ext File Attributes   00000000 (0)\n+656480 Local Header Offset   00079FF9 (499705)\n+656484 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656484: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656502 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656504   Length              0005 (5)\n+656506   Flags               01 (1) 'Modification'\n+656507   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65650B CENTRAL HEADER #232   02014B50 (33639248)\n+65650F Created Zip Spec      14 (20) '2.0'\n+656510 Created OS            00 (0) 'MS-DOS'\n+656511 Extract Zip Spec      14 (20) '2.0'\n+656512 Extract OS            00 (0) 'MS-DOS'\n+656513 General Purpose Flag  0000 (0)\n+656515 Compression Method    0000 (0) 'Stored'\n+656517 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65651B CRC                   00000000 (0)\n+65651F Compressed Size       00000000 (0)\n+656523 Uncompressed Size     00000000 (0)\n+656527 Filename Length       006E (110)\n+656529 Extra Length          0009 (9)\n+65652B Comment Length        0000 (0)\n+65652D Disk Start            0000 (0)\n+65652F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656531 Ext File Attributes   00000000 (0)\n+656535 Local Header Offset   0007DE65 (515685)\n+656539 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656539: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6565A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6565A9   Length              0005 (5)\n+6565AB   Flags               01 (1) 'Modification'\n+6565AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6565B0 CENTRAL HEADER #233   02014B50 (33639248)\n+6565B4 Created Zip Spec      14 (20) '2.0'\n+6565B5 Created OS            00 (0) 'MS-DOS'\n+6565B6 Extract Zip Spec      14 (20) '2.0'\n+6565B7 Extract OS            00 (0) 'MS-DOS'\n+6565B8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6565BA Compression Method    0000 (0) 'Stored'\n+6565BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6565C0 CRC                   6668C19E (1718141342)\n+6565C4 Compressed Size       00009C3B (39995)\n+6565C8 Uncompressed Size     00009C3B (39995)\n+6565CC Filename Length       0084 (132)\n+6565CE Extra Length          0009 (9)\n+6565D0 Comment Length        0000 (0)\n+6565D2 Disk Start            0000 (0)\n+6565D4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6565D6 Ext File Attributes   00000000 (0)\n+6565DA Local Header Offset   0007DEFA (515834)\n+6565DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             '\n #\n-# WARNING: Offset 0x656757: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6565DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-6567E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6567E3   Length              0005 (5)\n-6567E5   Flags               01 (1) 'Modification'\n-6567E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6567EA CENTRAL HEADER #338   02014B50 (33639248)\n-6567EE Created Zip Spec      14 (20) '2.0'\n-6567EF Created OS            00 (0) 'MS-DOS'\n-6567F0 Extract Zip Spec      14 (20) '2.0'\n-6567F1 Extract OS            00 (0) 'MS-DOS'\n-6567F2 General Purpose Flag  0000 (0)\n-6567F4 Compression Method    0000 (0) 'Stored'\n-6567F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6567FA CRC                   00000000 (0)\n-6567FE Compressed Size       00000000 (0)\n-656802 Uncompressed Size     00000000 (0)\n-656806 Filename Length       0024 (36)\n-656808 Extra Length          0009 (9)\n-65680A Comment Length        0000 (0)\n-65680C Disk Start            0000 (0)\n-65680E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-656810 Ext File Attributes   00000000 (0)\n-656814 Local Header Offset   000DADB1 (896433)\n-656818 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656818: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65683C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65683E   Length              0005 (5)\n-656840   Flags               01 (1) 'Modification'\n-656841   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656845 CENTRAL HEADER #339   02014B50 (33639248)\n-656849 Created Zip Spec      14 (20) '2.0'\n-65684A Created OS            00 (0) 'MS-DOS'\n-65684B Extract Zip Spec      14 (20) '2.0'\n-65684C Extract OS            00 (0) 'MS-DOS'\n-65684D General Purpose Flag  0000 (0)\n-65684F Compression Method    0000 (0) 'Stored'\n-656851 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656855 CRC                   00000000 (0)\n-656859 Compressed Size       00000000 (0)\n-65685D Uncompressed Size     00000000 (0)\n-656861 Filename Length       002B (43)\n-656863 Extra Length          0009 (9)\n-656865 Comment Length        0000 (0)\n-656867 Disk Start            0000 (0)\n-656869 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65686B Ext File Attributes   00000000 (0)\n-65686F Local Header Offset   000DADFC (896508)\n-656873 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656873: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65689E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6568A0   Length              0005 (5)\n-6568A2   Flags               01 (1) 'Modification'\n-6568A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6568A7 CENTRAL HEADER #340   02014B50 (33639248)\n-6568AB Created Zip Spec      14 (20) '2.0'\n-6568AC Created OS            00 (0) 'MS-DOS'\n-6568AD Extract Zip Spec      14 (20) '2.0'\n-6568AE Extract OS            00 (0) 'MS-DOS'\n-6568AF General Purpose Flag  0000 (0)\n-6568B1 Compression Method    0000 (0) 'Stored'\n-6568B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6568B7 CRC                   00000000 (0)\n-6568BB Compressed Size       00000000 (0)\n-6568BF Uncompressed Size     00000000 (0)\n-6568C3 Filename Length       0056 (86)\n-6568C5 Extra Length          0009 (9)\n-6568C7 Comment Length        0000 (0)\n-6568C9 Disk Start            0000 (0)\n-6568CB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6568CD Ext File Attributes   00000000 (0)\n-6568D1 Local Header Offset   000DAE4E (896590)\n-6568D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6568D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65692B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65692D   Length              0005 (5)\n-65692F   Flags               01 (1) 'Modification'\n-656930   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656934 CENTRAL HEADER #341   02014B50 (33639248)\n-656938 Created Zip Spec      14 (20) '2.0'\n-656939 Created OS            00 (0) 'MS-DOS'\n-65693A Extract Zip Spec      14 (20) '2.0'\n-65693B Extract OS            00 (0) 'MS-DOS'\n-65693C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65693E Compression Method    0000 (0) 'Stored'\n-656940 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656944 CRC                   F32265E7 (4079117799)\n-656948 Compressed Size       00001595 (5525)\n-65694C Uncompressed Size     00001595 (5525)\n-656950 Filename Length       006C (108)\n-656952 Extra Length          0009 (9)\n-656954 Comment Length        0000 (0)\n-656956 Disk Start            0000 (0)\n-656958 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65695A Ext File Attributes   00000000 (0)\n-65695E Local Header Offset   000DAECB (896715)\n-656962 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656962: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6569CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6569D0   Length              0005 (5)\n-6569D2   Flags               01 (1) 'Modification'\n-6569D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6569D7 CENTRAL HEADER #342   02014B50 (33639248)\n-6569DB Created Zip Spec      14 (20) '2.0'\n-6569DC Created OS            00 (0) 'MS-DOS'\n-6569DD Extract Zip Spec      14 (20) '2.0'\n-6569DE Extract OS            00 (0) 'MS-DOS'\n-6569DF General Purpose Flag  0000 (0)\n-6569E1 Compression Method    0000 (0) 'Stored'\n-6569E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6569E7 CRC                   00000000 (0)\n-6569EB Compressed Size       00000000 (0)\n-6569EF Uncompressed Size     00000000 (0)\n-6569F3 Filename Length       0059 (89)\n-6569F5 Extra Length          0009 (9)\n-6569F7 Comment Length        0000 (0)\n-6569F9 Disk Start            0000 (0)\n-6569FB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6569FD Ext File Attributes   00000000 (0)\n-656A01 Local Header Offset   000DC503 (902403)\n-656A05 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656A05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-656A5E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656A60   Length              0005 (5)\n-656A62   Flags               01 (1) 'Modification'\n-656A63   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656A67 CENTRAL HEADER #343   02014B50 (33639248)\n-656A6B Created Zip Spec      14 (20) '2.0'\n-656A6C Created OS            00 (0) 'MS-DOS'\n-656A6D Extract Zip Spec      14 (20) '2.0'\n-656A6E Extract OS            00 (0) 'MS-DOS'\n-656A6F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-656A71 Compression Method    0000 (0) 'Stored'\n-656A73 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656A77 CRC                   33231FD5 (857939925)\n-656A7B Compressed Size       00001399 (5017)\n-656A7F Uncompressed Size     00001399 (5017)\n-656A83 Filename Length       006F (111)\n-656A85 Extra Length          0009 (9)\n-656A87 Comment Length        0000 (0)\n-656A89 Disk Start            0000 (0)\n-656A8B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-656A8D Ext File Attributes   00000000 (0)\n-656A91 Local Header Offset   000DC583 (902531)\n-656A95 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656A95: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-656B04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656B06   Length              0005 (5)\n-656B08   Flags               01 (1) 'Modification'\n-656B09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656B0D CENTRAL HEADER #344   02014B50 (33639248)\n-656B11 Created Zip Spec      14 (20) '2.0'\n-656B12 Created OS            00 (0) 'MS-DOS'\n-656B13 Extract Zip Spec      14 (20) '2.0'\n-656B14 Extract OS            00 (0) 'MS-DOS'\n-656B15 General Purpose Flag  0000 (0)\n-656B17 Compression Method    0000 (0) 'Stored'\n-656B19 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656B1D CRC                   00000000 (0)\n-656B21 Compressed Size       00000000 (0)\n-656B25 Uncompressed Size     00000000 (0)\n-656B29 Filename Length       0055 (85)\n-656B2B Extra Length          0009 (9)\n-656B2D Comment Length        0000 (0)\n-656B2F Disk Start            0000 (0)\n-656B31 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-656B33 Ext File Attributes   00000000 (0)\n-656B37 Local Header Offset   000DD9C2 (907714)\n-656B3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656B3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-656B90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656B92   Length              0005 (5)\n-656B94   Flags               01 (1) 'Modification'\n-656B95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656B99 CENTRAL HEADER #345   02014B50 (33639248)\n-656B9D Created Zip Spec      14 (20) '2.0'\n-656B9E Created OS            00 (0) 'MS-DOS'\n-656B9F Extract Zip Spec      14 (20) '2.0'\n-656BA0 Extract OS            00 (0) 'MS-DOS'\n-656BA1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-656BA3 Compression Method    0000 (0) 'Stored'\n-656BA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656BA9 CRC                   62A57B9F (1655012255)\n-656BAD Compressed Size       00000AFB (2811)\n-656BB1 Uncompressed Size     00000AFB (2811)\n-656BB5 Filename Length       006B (107)\n-656BB7 Extra Length          0009 (9)\n-656BB9 Comment Length        0000 (0)\n-656BBB Disk Start            0000 (0)\n-656BBD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-656BBF Ext File Attributes   00000000 (0)\n-656BC3 Local Header Offset   000DDA3E (907838)\n-656BC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656BC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-656C32 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656C34   Length              0005 (5)\n-656C36   Flags               01 (1) 'Modification'\n-656C37   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656C3B CENTRAL HEADER #346   02014B50 (33639248)\n-656C3F Created Zip Spec      14 (20) '2.0'\n-656C40 Created OS            00 (0) 'MS-DOS'\n-656C41 Extract Zip Spec      14 (20) '2.0'\n-656C42 Extract OS            00 (0) 'MS-DOS'\n-656C43 General Purpose Flag  0000 (0)\n-656C45 Compression Method    0000 (0) 'Stored'\n-656C47 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656C4B CRC                   00000000 (0)\n-656C4F Compressed Size       00000000 (0)\n-656C53 Uncompressed Size     00000000 (0)\n-656C57 Filename Length       0023 (35)\n-656C59 Extra Length          0009 (9)\n-656C5B Comment Length        0000 (0)\n-656C5D Disk Start            0000 (0)\n-656C5F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-656C61 Ext File Attributes   00000000 (0)\n-656C65 Local Header Offset   000DE5DB (910811)\n-656C69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656C69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-656C8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656C8E   Length              0005 (5)\n-656C90   Flags               01 (1) 'Modification'\n-656C91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656C95 CENTRAL HEADER #347   02014B50 (33639248)\n-656C99 Created Zip Spec      14 (20) '2.0'\n-656C9A Created OS            00 (0) 'MS-DOS'\n-656C9B Extract Zip Spec      14 (20) '2.0'\n-656C9C Extract OS            00 (0) 'MS-DOS'\n-656C9D General Purpose Flag  0000 (0)\n-656C9F Compression Method    0000 (0) 'Stored'\n-656CA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656CA5 CRC                   00000000 (0)\n-656CA9 Compressed Size       00000000 (0)\n-656CAD Uncompressed Size     00000000 (0)\n-656CB1 Filename Length       002A (42)\n-656CB3 Extra Length          0009 (9)\n-656CB5 Comment Length        0000 (0)\n-656CB7 Disk Start            0000 (0)\n-656CB9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-656CBB Ext File Attributes   00000000 (0)\n-656CBF Local Header Offset   000DE625 (910885)\n-656CC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656CC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-656CED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656CEF   Length              0005 (5)\n-656CF1   Flags               01 (1) 'Modification'\n-656CF2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656CF6 CENTRAL HEADER #348   02014B50 (33639248)\n-656CFA Created Zip Spec      14 (20) '2.0'\n-656CFB Created OS            00 (0) 'MS-DOS'\n-656CFC Extract Zip Spec      14 (20) '2.0'\n-656CFD Extract OS            00 (0) 'MS-DOS'\n-656CFE General Purpose Flag  0000 (0)\n-656D00 Compression Method    0000 (0) 'Stored'\n-656D02 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656D06 CRC                   00000000 (0)\n-656D0A Compressed Size       00000000 (0)\n-656D0E Uncompressed Size     00000000 (0)\n-656D12 Filename Length       0052 (82)\n-656D14 Extra Length          0009 (9)\n-656D16 Comment Length        0000 (0)\n-656D18 Disk Start            0000 (0)\n-656D1A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-656D1C Ext File Attributes   00000000 (0)\n-656D20 Local Header Offset   000DE676 (910966)\n-656D24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656D24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-656D76 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656D78   Length              0005 (5)\n-656D7A   Flags               01 (1) 'Modification'\n-656D7B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656D7F CENTRAL HEADER #349   02014B50 (33639248)\n-656D83 Created Zip Spec      14 (20) '2.0'\n-656D84 Created OS            00 (0) 'MS-DOS'\n-656D85 Extract Zip Spec      14 (20) '2.0'\n-656D86 Extract OS            00 (0) 'MS-DOS'\n-656D87 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-656D89 Compression Method    0000 (0) 'Stored'\n-656D8B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656D8F CRC                   63C353AF (1673745327)\n-656D93 Compressed Size       00000CF8 (3320)\n-656D97 Uncompressed Size     00000CF8 (3320)\n-656D9B Filename Length       0068 (104)\n-656D9D Extra Length          0009 (9)\n-656D9F Comment Length        0000 (0)\n-656DA1 Disk Start            0000 (0)\n-656DA3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-656DA5 Ext File Attributes   00000000 (0)\n-656DA9 Local Header Offset   000DE6EF (911087)\n-656DAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656DAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-656E15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656E17   Length              0005 (5)\n-656E19   Flags               01 (1) 'Modification'\n-656E1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656E1E CENTRAL HEADER #350   02014B50 (33639248)\n-656E22 Created Zip Spec      14 (20) '2.0'\n-656E23 Created OS            00 (0) 'MS-DOS'\n-656E24 Extract Zip Spec      14 (20) '2.0'\n-656E25 Extract OS            00 (0) 'MS-DOS'\n-656E26 General Purpose Flag  0000 (0)\n-656E28 Compression Method    0000 (0) 'Stored'\n-656E2A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656E2E CRC                   00000000 (0)\n-656E32 Compressed Size       00000000 (0)\n-656E36 Uncompressed Size     00000000 (0)\n-656E3A Filename Length       0059 (89)\n-656E3C Extra Length          0009 (9)\n-656E3E Comment Length        0000 (0)\n-656E40 Disk Start            0000 (0)\n-656E42 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-656E44 Ext File Attributes   00000000 (0)\n-656E48 Local Header Offset   000DF486 (914566)\n-656E4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656E4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-656EA5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656EA7   Length              0005 (5)\n-656EA9   Flags               01 (1) 'Modification'\n-656EAA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656EAE CENTRAL HEADER #351   02014B50 (33639248)\n-656EB2 Created Zip Spec      14 (20) '2.0'\n-656EB3 Created OS            00 (0) 'MS-DOS'\n-656EB4 Extract Zip Spec      14 (20) '2.0'\n-656EB5 Extract OS            00 (0) 'MS-DOS'\n-656EB6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-656EB8 Compression Method    0000 (0) 'Stored'\n-656EBA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656EBE CRC                   C64481A5 (3326378405)\n-656EC2 Compressed Size       00000723 (1827)\n-656EC6 Uncompressed Size     00000723 (1827)\n-656ECA Filename Length       006F (111)\n-656ECC Extra Length          0009 (9)\n-656ECE Comment Length        0000 (0)\n-656ED0 Disk Start            0000 (0)\n-656ED2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-656ED4 Ext File Attributes   00000000 (0)\n-656ED8 Local Header Offset   000DF506 (914694)\n-656EDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656EDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-656F4B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656F4D   Length              0005 (5)\n-656F4F   Flags               01 (1) 'Modification'\n-656F50   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656F54 CENTRAL HEADER #352   02014B50 (33639248)\n-656F58 Created Zip Spec      14 (20) '2.0'\n-656F59 Created OS            00 (0) 'MS-DOS'\n-656F5A Extract Zip Spec      14 (20) '2.0'\n-656F5B Extract OS            00 (0) 'MS-DOS'\n-656F5C General Purpose Flag  0000 (0)\n-656F5E Compression Method    0000 (0) 'Stored'\n-656F60 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656F64 CRC                   00000000 (0)\n-656F68 Compressed Size       00000000 (0)\n-656F6C Uncompressed Size     00000000 (0)\n-656F70 Filename Length       0057 (87)\n-656F72 Extra Length          0009 (9)\n-656F74 Comment Length        0000 (0)\n-656F76 Disk Start            0000 (0)\n-656F78 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-656F7A Ext File Attributes   00000000 (0)\n-656F7E Local Header Offset   000DFCCF (916687)\n-656F82 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x656F82: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-656FD9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-656FDB   Length              0005 (5)\n-656FDD   Flags               01 (1) 'Modification'\n-656FDE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-656FE2 CENTRAL HEADER #353   02014B50 (33639248)\n-656FE6 Created Zip Spec      14 (20) '2.0'\n-656FE7 Created OS            00 (0) 'MS-DOS'\n-656FE8 Extract Zip Spec      14 (20) '2.0'\n-656FE9 Extract OS            00 (0) 'MS-DOS'\n-656FEA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-656FEC Compression Method    0000 (0) 'Stored'\n-656FEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-656FF2 CRC                   39649106 (962892038)\n-656FF6 Compressed Size       000006E2 (1762)\n-656FFA Uncompressed Size     000006E2 (1762)\n-656FFE Filename Length       006D (109)\n-657000 Extra Length          0009 (9)\n-657002 Comment Length        0000 (0)\n-657004 Disk Start            0000 (0)\n-657006 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657008 Ext File Attributes   00000000 (0)\n-65700C Local Header Offset   000DFD4D (916813)\n-657010 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657010: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65707D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65707F   Length              0005 (5)\n-657081   Flags               01 (1) 'Modification'\n-657082   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657086 CENTRAL HEADER #354   02014B50 (33639248)\n-65708A Created Zip Spec      14 (20) '2.0'\n-65708B Created OS            00 (0) 'MS-DOS'\n-65708C Extract Zip Spec      14 (20) '2.0'\n-65708D Extract OS            00 (0) 'MS-DOS'\n-65708E General Purpose Flag  0000 (0)\n-657090 Compression Method    0000 (0) 'Stored'\n-657092 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657096 CRC                   00000000 (0)\n-65709A Compressed Size       00000000 (0)\n-65709E Uncompressed Size     00000000 (0)\n-6570A2 Filename Length       0052 (82)\n-6570A4 Extra Length          0009 (9)\n-6570A6 Comment Length        0000 (0)\n-6570A8 Disk Start            0000 (0)\n-6570AA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6570AC Ext File Attributes   00000000 (0)\n-6570B0 Local Header Offset   000E04D3 (918739)\n-6570B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6570B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657106 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657108   Length              0005 (5)\n-65710A   Flags               01 (1) 'Modification'\n-65710B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65710F CENTRAL HEADER #355   02014B50 (33639248)\n-657113 Created Zip Spec      14 (20) '2.0'\n-657114 Created OS            00 (0) 'MS-DOS'\n-657115 Extract Zip Spec      14 (20) '2.0'\n-657116 Extract OS            00 (0) 'MS-DOS'\n-657117 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-657119 Compression Method    0000 (0) 'Stored'\n-65711B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65711F CRC                   8DC8B44C (2378740812)\n-657123 Compressed Size       00000782 (1922)\n-657127 Uncompressed Size     00000782 (1922)\n-65712B Filename Length       0068 (104)\n-65712D Extra Length          0009 (9)\n-65712F Comment Length        0000 (0)\n-657131 Disk Start            0000 (0)\n-657133 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657135 Ext File Attributes   00000000 (0)\n-657139 Local Header Offset   000E054C (918860)\n-65713D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65713D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6571A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6571A7   Length              0005 (5)\n-6571A9   Flags               01 (1) 'Modification'\n-6571AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6571AE CENTRAL HEADER #356   02014B50 (33639248)\n-6571B2 Created Zip Spec      14 (20) '2.0'\n-6571B3 Created OS            00 (0) 'MS-DOS'\n-6571B4 Extract Zip Spec      14 (20) '2.0'\n-6571B5 Extract OS            00 (0) 'MS-DOS'\n-6571B6 General Purpose Flag  0000 (0)\n-6571B8 Compression Method    0000 (0) 'Stored'\n-6571BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6571BE CRC                   00000000 (0)\n-6571C2 Compressed Size       00000000 (0)\n-6571C6 Uncompressed Size     00000000 (0)\n-6571CA Filename Length       0023 (35)\n-6571CC Extra Length          0009 (9)\n-6571CE Comment Length        0000 (0)\n-6571D0 Disk Start            0000 (0)\n-6571D2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6571D4 Ext File Attributes   00000000 (0)\n-6571D8 Local Header Offset   000E0D6D (920941)\n-6571DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6571DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6571FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657201   Length              0005 (5)\n-657203   Flags               01 (1) 'Modification'\n-657204   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657208 CENTRAL HEADER #357   02014B50 (33639248)\n-65720C Created Zip Spec      14 (20) '2.0'\n-65720D Created OS            00 (0) 'MS-DOS'\n-65720E Extract Zip Spec      14 (20) '2.0'\n-65720F Extract OS            00 (0) 'MS-DOS'\n-657210 General Purpose Flag  0000 (0)\n-657212 Compression Method    0000 (0) 'Stored'\n-657214 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657218 CRC                   00000000 (0)\n-65721C Compressed Size       00000000 (0)\n-657220 Uncompressed Size     00000000 (0)\n-657224 Filename Length       002A (42)\n-657226 Extra Length          0009 (9)\n-657228 Comment Length        0000 (0)\n-65722A Disk Start            0000 (0)\n-65722C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65722E Ext File Attributes   00000000 (0)\n-657232 Local Header Offset   000E0DB7 (921015)\n-657236 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657236: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657260 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657262   Length              0005 (5)\n-657264   Flags               01 (1) 'Modification'\n-657265   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657269 CENTRAL HEADER #358   02014B50 (33639248)\n-65726D Created Zip Spec      14 (20) '2.0'\n-65726E Created OS            00 (0) 'MS-DOS'\n-65726F Extract Zip Spec      14 (20) '2.0'\n-657270 Extract OS            00 (0) 'MS-DOS'\n-657271 General Purpose Flag  0000 (0)\n-657273 Compression Method    0000 (0) 'Stored'\n-657275 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657279 CRC                   00000000 (0)\n-65727D Compressed Size       00000000 (0)\n-657281 Uncompressed Size     00000000 (0)\n-657285 Filename Length       0052 (82)\n-657287 Extra Length          0009 (9)\n-657289 Comment Length        0000 (0)\n-65728B Disk Start            0000 (0)\n-65728D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65728F Ext File Attributes   00000000 (0)\n-657293 Local Header Offset   000E0E08 (921096)\n-657297 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657297: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6572E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6572EB   Length              0005 (5)\n-6572ED   Flags               01 (1) 'Modification'\n-6572EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6572F2 CENTRAL HEADER #359   02014B50 (33639248)\n-6572F6 Created Zip Spec      14 (20) '2.0'\n-6572F7 Created OS            00 (0) 'MS-DOS'\n-6572F8 Extract Zip Spec      14 (20) '2.0'\n-6572F9 Extract OS            00 (0) 'MS-DOS'\n-6572FA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6572FC Compression Method    0000 (0) 'Stored'\n-6572FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657302 CRC                   605D4301 (1616724737)\n-657306 Compressed Size       00000914 (2324)\n-65730A Uncompressed Size     00000914 (2324)\n-65730E Filename Length       0068 (104)\n-657310 Extra Length          0009 (9)\n-657312 Comment Length        0000 (0)\n-657314 Disk Start            0000 (0)\n-657316 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657318 Ext File Attributes   00000000 (0)\n-65731C Local Header Offset   000E0E81 (921217)\n-657320 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657320: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657388 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65738A   Length              0005 (5)\n-65738C   Flags               01 (1) 'Modification'\n-65738D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657391 CENTRAL HEADER #360   02014B50 (33639248)\n-657395 Created Zip Spec      14 (20) '2.0'\n-657396 Created OS            00 (0) 'MS-DOS'\n-657397 Extract Zip Spec      14 (20) '2.0'\n-657398 Extract OS            00 (0) 'MS-DOS'\n-657399 General Purpose Flag  0000 (0)\n-65739B Compression Method    0000 (0) 'Stored'\n-65739D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6573A1 CRC                   00000000 (0)\n-6573A5 Compressed Size       00000000 (0)\n-6573A9 Uncompressed Size     00000000 (0)\n-6573AD Filename Length       005F (95)\n-6573AF Extra Length          0009 (9)\n-6573B1 Comment Length        0000 (0)\n-6573B3 Disk Start            0000 (0)\n-6573B5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6573B7 Ext File Attributes   00000000 (0)\n-6573BB Local Header Offset   000E1834 (923700)\n-6573BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6573BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65741E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657420   Length              0005 (5)\n-657422   Flags               01 (1) 'Modification'\n-657423   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657427 CENTRAL HEADER #361   02014B50 (33639248)\n-65742B Created Zip Spec      14 (20) '2.0'\n-65742C Created OS            00 (0) 'MS-DOS'\n-65742D Extract Zip Spec      14 (20) '2.0'\n-65742E Extract OS            00 (0) 'MS-DOS'\n-65742F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-657431 Compression Method    0000 (0) 'Stored'\n-657433 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657437 CRC                   A64E298E (2790140302)\n-65743B Compressed Size       000007A5 (1957)\n-65743F Uncompressed Size     000007A5 (1957)\n-657443 Filename Length       0075 (117)\n-657445 Extra Length          0009 (9)\n-657447 Comment Length        0000 (0)\n-657449 Disk Start            0000 (0)\n-65744B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65744D Ext File Attributes   00000000 (0)\n-657451 Local Header Offset   000E18BA (923834)\n-657455 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657455: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6574CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6574CC   Length              0005 (5)\n-6574CE   Flags               01 (1) 'Modification'\n-6574CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6574D3 CENTRAL HEADER #362   02014B50 (33639248)\n-6574D7 Created Zip Spec      14 (20) '2.0'\n-6574D8 Created OS            00 (0) 'MS-DOS'\n-6574D9 Extract Zip Spec      14 (20) '2.0'\n-6574DA Extract OS            00 (0) 'MS-DOS'\n-6574DB General Purpose Flag  0000 (0)\n-6574DD Compression Method    0000 (0) 'Stored'\n-6574DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6574E3 CRC                   00000000 (0)\n-6574E7 Compressed Size       00000000 (0)\n-6574EB Uncompressed Size     00000000 (0)\n-6574EF Filename Length       0058 (88)\n-6574F1 Extra Length          0009 (9)\n-6574F3 Comment Length        0000 (0)\n-6574F5 Disk Start            0000 (0)\n-6574F7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6574F9 Ext File Attributes   00000000 (0)\n-6574FD Local Header Offset   000E210B (925963)\n-657501 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657501: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657559 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65755B   Length              0005 (5)\n-65755D   Flags               01 (1) 'Modification'\n-65755E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657562 CENTRAL HEADER #363   02014B50 (33639248)\n-657566 Created Zip Spec      14 (20) '2.0'\n-657567 Created OS            00 (0) 'MS-DOS'\n-657568 Extract Zip Spec      14 (20) '2.0'\n-657569 Extract OS            00 (0) 'MS-DOS'\n-65756A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65756C Compression Method    0000 (0) 'Stored'\n-65756E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657572 CRC                   937D5C9D (2474466461)\n-657576 Compressed Size       00000F43 (3907)\n-65757A Uncompressed Size     00000F43 (3907)\n-65757E Filename Length       006E (110)\n-657580 Extra Length          0009 (9)\n-657582 Comment Length        0000 (0)\n-657584 Disk Start            0000 (0)\n-657586 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657588 Ext File Attributes   00000000 (0)\n-65758C Local Header Offset   000E218A (926090)\n-657590 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657590: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6575FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657600   Length              0005 (5)\n-657602   Flags               01 (1) 'Modification'\n-657603   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657607 CENTRAL HEADER #364   02014B50 (33639248)\n-65760B Created Zip Spec      14 (20) '2.0'\n-65760C Created OS            00 (0) 'MS-DOS'\n-65760D Extract Zip Spec      14 (20) '2.0'\n-65760E Extract OS            00 (0) 'MS-DOS'\n-65760F General Purpose Flag  0000 (0)\n-657611 Compression Method    0000 (0) 'Stored'\n-657613 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657617 CRC                   00000000 (0)\n-65761B Compressed Size       00000000 (0)\n-65761F Uncompressed Size     00000000 (0)\n-657623 Filename Length       0025 (37)\n-657625 Extra Length          0009 (9)\n-657627 Comment Length        0000 (0)\n-657629 Disk Start            0000 (0)\n-65762B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65762D Ext File Attributes   00000000 (0)\n-657631 Local Header Offset   000E3172 (930162)\n-657635 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657635: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65765A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65765C   Length              0005 (5)\n-65765E   Flags               01 (1) 'Modification'\n-65765F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657663 CENTRAL HEADER #365   02014B50 (33639248)\n-657667 Created Zip Spec      14 (20) '2.0'\n-657668 Created OS            00 (0) 'MS-DOS'\n-657669 Extract Zip Spec      14 (20) '2.0'\n-65766A Extract OS            00 (0) 'MS-DOS'\n-65766B General Purpose Flag  0000 (0)\n-65766D Compression Method    0000 (0) 'Stored'\n-65766F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657673 CRC                   00000000 (0)\n-657677 Compressed Size       00000000 (0)\n-65767B Uncompressed Size     00000000 (0)\n-65767F Filename Length       002C (44)\n-657681 Extra Length          0009 (9)\n-657683 Comment Length        0000 (0)\n-657685 Disk Start            0000 (0)\n-657687 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657689 Ext File Attributes   00000000 (0)\n-65768D Local Header Offset   000E31BE (930238)\n-657691 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657691: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6576BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6576BF   Length              0005 (5)\n-6576C1   Flags               01 (1) 'Modification'\n-6576C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6576C6 CENTRAL HEADER #366   02014B50 (33639248)\n-6576CA Created Zip Spec      14 (20) '2.0'\n-6576CB Created OS            00 (0) 'MS-DOS'\n-6576CC Extract Zip Spec      14 (20) '2.0'\n-6576CD Extract OS            00 (0) 'MS-DOS'\n-6576CE General Purpose Flag  0000 (0)\n-6576D0 Compression Method    0000 (0) 'Stored'\n-6576D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6576D6 CRC                   00000000 (0)\n-6576DA Compressed Size       00000000 (0)\n-6576DE Uncompressed Size     00000000 (0)\n-6576E2 Filename Length       005C (92)\n-6576E4 Extra Length          0009 (9)\n-6576E6 Comment Length        0000 (0)\n-6576E8 Disk Start            0000 (0)\n-6576EA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6576EC Ext File Attributes   00000000 (0)\n-6576F0 Local Header Offset   000E3211 (930321)\n-6576F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6576F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657750 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657752   Length              0005 (5)\n-657754   Flags               01 (1) 'Modification'\n-657755   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657759 CENTRAL HEADER #367   02014B50 (33639248)\n-65775D Created Zip Spec      14 (20) '2.0'\n-65775E Created OS            00 (0) 'MS-DOS'\n-65775F Extract Zip Spec      14 (20) '2.0'\n-657760 Extract OS            00 (0) 'MS-DOS'\n-657761 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-657763 Compression Method    0000 (0) 'Stored'\n-657765 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657769 CRC                   335CA1CD (861708749)\n-65776D Compressed Size       00000E9A (3738)\n-657771 Uncompressed Size     00000E9A (3738)\n-657775 Filename Length       0072 (114)\n-657777 Extra Length          0009 (9)\n-657779 Comment Length        0000 (0)\n-65777B Disk Start            0000 (0)\n-65777D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65777F Ext File Attributes   00000000 (0)\n-657783 Local Header Offset   000E3294 (930452)\n-657787 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657787: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6577F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6577FB   Length              0005 (5)\n-6577FD   Flags               01 (1) 'Modification'\n-6577FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657802 CENTRAL HEADER #368   02014B50 (33639248)\n-657806 Created Zip Spec      14 (20) '2.0'\n-657807 Created OS            00 (0) 'MS-DOS'\n-657808 Extract Zip Spec      14 (20) '2.0'\n-657809 Extract OS            00 (0) 'MS-DOS'\n-65780A General Purpose Flag  0000 (0)\n-65780C Compression Method    0000 (0) 'Stored'\n-65780E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657812 CRC                   00000000 (0)\n-657816 Compressed Size       00000000 (0)\n-65781A Uncompressed Size     00000000 (0)\n-65781E Filename Length       0068 (104)\n-657820 Extra Length          0009 (9)\n-657822 Comment Length        0000 (0)\n-657824 Disk Start            0000 (0)\n-657826 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657828 Ext File Attributes   00000000 (0)\n-65782C Local Header Offset   000E41D7 (934359)\n-657830 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657830: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657898 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65789A   Length              0005 (5)\n-65789C   Flags               01 (1) 'Modification'\n-65789D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6578A1 CENTRAL HEADER #369   02014B50 (33639248)\n-6578A5 Created Zip Spec      14 (20) '2.0'\n-6578A6 Created OS            00 (0) 'MS-DOS'\n-6578A7 Extract Zip Spec      14 (20) '2.0'\n-6578A8 Extract OS            00 (0) 'MS-DOS'\n-6578A9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6578AB Compression Method    0000 (0) 'Stored'\n-6578AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6578B1 CRC                   3EE7FDDD (1055391197)\n-6578B5 Compressed Size       00001059 (4185)\n-6578B9 Uncompressed Size     00001059 (4185)\n-6578BD Filename Length       007E (126)\n-6578BF Extra Length          0009 (9)\n-6578C1 Comment Length        0000 (0)\n-6578C3 Disk Start            0000 (0)\n-6578C5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6578C7 Ext File Attributes   00000000 (0)\n-6578CB Local Header Offset   000E4266 (934502)\n-6578CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6578CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65794D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65794F   Length              0005 (5)\n-657951   Flags               01 (1) 'Modification'\n-657952   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657956 CENTRAL HEADER #370   02014B50 (33639248)\n-65795A Created Zip Spec      14 (20) '2.0'\n-65795B Created OS            00 (0) 'MS-DOS'\n-65795C Extract Zip Spec      14 (20) '2.0'\n-65795D Extract OS            00 (0) 'MS-DOS'\n-65795E General Purpose Flag  0000 (0)\n-657960 Compression Method    0000 (0) 'Stored'\n-657962 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657966 CRC                   00000000 (0)\n-65796A Compressed Size       00000000 (0)\n-65796E Uncompressed Size     00000000 (0)\n-657972 Filename Length       0025 (37)\n-657974 Extra Length          0009 (9)\n-657976 Comment Length        0000 (0)\n-657978 Disk Start            0000 (0)\n-65797A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65797C Ext File Attributes   00000000 (0)\n-657980 Local Header Offset   000E5374 (938868)\n-657984 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657984: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6579A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6579AB   Length              0005 (5)\n-6579AD   Flags               01 (1) 'Modification'\n-6579AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6579B2 CENTRAL HEADER #371   02014B50 (33639248)\n-6579B6 Created Zip Spec      14 (20) '2.0'\n-6579B7 Created OS            00 (0) 'MS-DOS'\n-6579B8 Extract Zip Spec      14 (20) '2.0'\n-6579B9 Extract OS            00 (0) 'MS-DOS'\n-6579BA General Purpose Flag  0000 (0)\n-6579BC Compression Method    0000 (0) 'Stored'\n-6579BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6579C2 CRC                   00000000 (0)\n-6579C6 Compressed Size       00000000 (0)\n-6579CA Uncompressed Size     00000000 (0)\n-6579CE Filename Length       002C (44)\n-6579D0 Extra Length          0009 (9)\n-6579D2 Comment Length        0000 (0)\n-6579D4 Disk Start            0000 (0)\n-6579D6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6579D8 Ext File Attributes   00000000 (0)\n-6579DC Local Header Offset   000E53C0 (938944)\n-6579E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6579E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657A0C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657A0E   Length              0005 (5)\n-657A10   Flags               01 (1) 'Modification'\n-657A11   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657A15 CENTRAL HEADER #372   02014B50 (33639248)\n-657A19 Created Zip Spec      14 (20) '2.0'\n-657A1A Created OS            00 (0) 'MS-DOS'\n-657A1B Extract Zip Spec      14 (20) '2.0'\n-657A1C Extract OS            00 (0) 'MS-DOS'\n-657A1D General Purpose Flag  0000 (0)\n-657A1F Compression Method    0000 (0) 'Stored'\n-657A21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657A25 CRC                   00000000 (0)\n-657A29 Compressed Size       00000000 (0)\n-657A2D Uncompressed Size     00000000 (0)\n-657A31 Filename Length       005A (90)\n-657A33 Extra Length          0009 (9)\n-657A35 Comment Length        0000 (0)\n-657A37 Disk Start            0000 (0)\n-657A39 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657A3B Ext File Attributes   00000000 (0)\n-657A3F Local Header Offset   000E5413 (939027)\n-657A43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657A43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657A9D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657A9F   Length              0005 (5)\n-657AA1   Flags               01 (1) 'Modification'\n-657AA2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657AA6 CENTRAL HEADER #373   02014B50 (33639248)\n-657AAA Created Zip Spec      14 (20) '2.0'\n-657AAB Created OS            00 (0) 'MS-DOS'\n-657AAC Extract Zip Spec      14 (20) '2.0'\n-657AAD Extract OS            00 (0) 'MS-DOS'\n-657AAE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-657AB0 Compression Method    0000 (0) 'Stored'\n-657AB2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657AB6 CRC                   0944969F (155489951)\n-657ABA Compressed Size       000017C7 (6087)\n-657ABE Uncompressed Size     000017C7 (6087)\n-657AC2 Filename Length       0070 (112)\n-657AC4 Extra Length          0009 (9)\n-657AC6 Comment Length        0000 (0)\n-657AC8 Disk Start            0000 (0)\n-657ACA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657ACC Ext File Attributes   00000000 (0)\n-657AD0 Local Header Offset   000E5494 (939156)\n-657AD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657AD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657B44 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657B46   Length              0005 (5)\n-657B48   Flags               01 (1) 'Modification'\n-657B49   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657B4D CENTRAL HEADER #374   02014B50 (33639248)\n-657B51 Created Zip Spec      14 (20) '2.0'\n-657B52 Created OS            00 (0) 'MS-DOS'\n-657B53 Extract Zip Spec      14 (20) '2.0'\n-657B54 Extract OS            00 (0) 'MS-DOS'\n-657B55 General Purpose Flag  0000 (0)\n-657B57 Compression Method    0000 (0) 'Stored'\n-657B59 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657B5D CRC                   00000000 (0)\n-657B61 Compressed Size       00000000 (0)\n-657B65 Uncompressed Size     00000000 (0)\n-657B69 Filename Length       0027 (39)\n-657B6B Extra Length          0009 (9)\n-657B6D Comment Length        0000 (0)\n-657B6F Disk Start            0000 (0)\n-657B71 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657B73 Ext File Attributes   00000000 (0)\n-657B77 Local Header Offset   000E6D02 (945410)\n-657B7B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657B7B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657BA2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657BA4   Length              0005 (5)\n-657BA6   Flags               01 (1) 'Modification'\n-657BA7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657BAB CENTRAL HEADER #375   02014B50 (33639248)\n-657BAF Created Zip Spec      14 (20) '2.0'\n-657BB0 Created OS            00 (0) 'MS-DOS'\n-657BB1 Extract Zip Spec      14 (20) '2.0'\n-657BB2 Extract OS            00 (0) 'MS-DOS'\n-657BB3 General Purpose Flag  0000 (0)\n-657BB5 Compression Method    0000 (0) 'Stored'\n-657BB7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657BBB CRC                   00000000 (0)\n-657BBF Compressed Size       00000000 (0)\n-657BC3 Uncompressed Size     00000000 (0)\n-657BC7 Filename Length       002E (46)\n-657BC9 Extra Length          0009 (9)\n-657BCB Comment Length        0000 (0)\n-657BCD Disk Start            0000 (0)\n-657BCF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657BD1 Ext File Attributes   00000000 (0)\n-657BD5 Local Header Offset   000E6D50 (945488)\n-657BD9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657BD9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657C07 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657C09   Length              0005 (5)\n-657C0B   Flags               01 (1) 'Modification'\n-657C0C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657C10 CENTRAL HEADER #376   02014B50 (33639248)\n-657C14 Created Zip Spec      14 (20) '2.0'\n-657C15 Created OS            00 (0) 'MS-DOS'\n-657C16 Extract Zip Spec      14 (20) '2.0'\n-657C17 Extract OS            00 (0) 'MS-DOS'\n-657C18 General Purpose Flag  0000 (0)\n-657C1A Compression Method    0000 (0) 'Stored'\n-657C1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657C20 CRC                   00000000 (0)\n-657C24 Compressed Size       00000000 (0)\n-657C28 Uncompressed Size     00000000 (0)\n-657C2C Filename Length       0067 (103)\n-657C2E Extra Length          0009 (9)\n-657C30 Comment Length        0000 (0)\n-657C32 Disk Start            0000 (0)\n-657C34 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657C36 Ext File Attributes   00000000 (0)\n-657C3A Local Header Offset   000E6DA5 (945573)\n-657C3E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657C3E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657CA5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657CA7   Length              0005 (5)\n-657CA9   Flags               01 (1) 'Modification'\n-657CAA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657CAE CENTRAL HEADER #377   02014B50 (33639248)\n-657CB2 Created Zip Spec      14 (20) '2.0'\n-657CB3 Created OS            00 (0) 'MS-DOS'\n-657CB4 Extract Zip Spec      14 (20) '2.0'\n-657CB5 Extract OS            00 (0) 'MS-DOS'\n-657CB6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-657CB8 Compression Method    0000 (0) 'Stored'\n-657CBA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657CBE CRC                   67FA3A91 (1744452241)\n-657CC2 Compressed Size       00000C5B (3163)\n-657CC6 Uncompressed Size     00000C5B (3163)\n-657CCA Filename Length       007D (125)\n-657CCC Extra Length          0009 (9)\n-657CCE Comment Length        0000 (0)\n-657CD0 Disk Start            0000 (0)\n-657CD2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657CD4 Ext File Attributes   00000000 (0)\n-657CD8 Local Header Offset   000E6E33 (945715)\n-657CDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657CDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657D59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657D5B   Length              0005 (5)\n-657D5D   Flags               01 (1) 'Modification'\n-657D5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657D62 CENTRAL HEADER #378   02014B50 (33639248)\n-657D66 Created Zip Spec      14 (20) '2.0'\n-657D67 Created OS            00 (0) 'MS-DOS'\n-657D68 Extract Zip Spec      14 (20) '2.0'\n-657D69 Extract OS            00 (0) 'MS-DOS'\n-657D6A General Purpose Flag  0000 (0)\n-657D6C Compression Method    0000 (0) 'Stored'\n-657D6E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657D72 CRC                   00000000 (0)\n-657D76 Compressed Size       00000000 (0)\n-657D7A Uncompressed Size     00000000 (0)\n-657D7E Filename Length       0067 (103)\n-657D80 Extra Length          0009 (9)\n-657D82 Comment Length        0000 (0)\n-657D84 Disk Start            0000 (0)\n-657D86 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657D88 Ext File Attributes   00000000 (0)\n-657D8C Local Header Offset   000E7B42 (949058)\n-657D90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657D90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657DF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657DF9   Length              0005 (5)\n-657DFB   Flags               01 (1) 'Modification'\n-657DFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657E00 CENTRAL HEADER #379   02014B50 (33639248)\n-657E04 Created Zip Spec      14 (20) '2.0'\n-657E05 Created OS            00 (0) 'MS-DOS'\n-657E06 Extract Zip Spec      14 (20) '2.0'\n-657E07 Extract OS            00 (0) 'MS-DOS'\n-657E08 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-657E0A Compression Method    0000 (0) 'Stored'\n-657E0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657E10 CRC                   63513D5C (1666268508)\n-657E14 Compressed Size       000007C0 (1984)\n-657E18 Uncompressed Size     000007C0 (1984)\n-657E1C Filename Length       007D (125)\n-657E1E Extra Length          0009 (9)\n-657E20 Comment Length        0000 (0)\n-657E22 Disk Start            0000 (0)\n-657E24 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657E26 Ext File Attributes   00000000 (0)\n-657E2A Local Header Offset   000E7BD0 (949200)\n-657E2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657E2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657EAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657EAD   Length              0005 (5)\n-657EAF   Flags               01 (1) 'Modification'\n-657EB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657EB4 CENTRAL HEADER #380   02014B50 (33639248)\n-657EB8 Created Zip Spec      14 (20) '2.0'\n-657EB9 Created OS            00 (0) 'MS-DOS'\n-657EBA Extract Zip Spec      14 (20) '2.0'\n-657EBB Extract OS            00 (0) 'MS-DOS'\n-657EBC General Purpose Flag  0000 (0)\n-657EBE Compression Method    0000 (0) 'Stored'\n-657EC0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657EC4 CRC                   00000000 (0)\n-657EC8 Compressed Size       00000000 (0)\n-657ECC Uncompressed Size     00000000 (0)\n-657ED0 Filename Length       005E (94)\n-657ED2 Extra Length          0009 (9)\n-657ED4 Comment Length        0000 (0)\n-657ED6 Disk Start            0000 (0)\n-657ED8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657EDA Ext File Attributes   00000000 (0)\n-657EDE Local Header Offset   000E8444 (951364)\n-657EE2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657EE2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657F40 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657F42   Length              0005 (5)\n-657F44   Flags               01 (1) 'Modification'\n-657F45   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657F49 CENTRAL HEADER #381   02014B50 (33639248)\n-657F4D Created Zip Spec      14 (20) '2.0'\n-657F4E Created OS            00 (0) 'MS-DOS'\n-657F4F Extract Zip Spec      14 (20) '2.0'\n-657F50 Extract OS            00 (0) 'MS-DOS'\n-657F51 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-657F53 Compression Method    0000 (0) 'Stored'\n-657F55 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-657F59 CRC                   99929518 (2576520472)\n-657F5D Compressed Size       00000EDA (3802)\n-657F61 Uncompressed Size     00000EDA (3802)\n-657F65 Filename Length       0074 (116)\n-657F67 Extra Length          0009 (9)\n-657F69 Comment Length        0000 (0)\n-657F6B Disk Start            0000 (0)\n-657F6D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-657F6F Ext File Attributes   00000000 (0)\n-657F73 Local Header Offset   000E84C9 (951497)\n-657F77 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x657F77: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-657FEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-657FED   Length              0005 (5)\n-657FEF   Flags               01 (1) 'Modification'\n-657FF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-657FF4 CENTRAL HEADER #382   02014B50 (33639248)\n-657FF8 Created Zip Spec      14 (20) '2.0'\n-657FF9 Created OS            00 (0) 'MS-DOS'\n-657FFA Extract Zip Spec      14 (20) '2.0'\n-657FFB Extract OS            00 (0) 'MS-DOS'\n-657FFC General Purpose Flag  0000 (0)\n-657FFE Compression Method    0000 (0) 'Stored'\n-658000 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658004 CRC                   00000000 (0)\n-658008 Compressed Size       00000000 (0)\n-65800C Uncompressed Size     00000000 (0)\n-658010 Filename Length       005C (92)\n-658012 Extra Length          0009 (9)\n-658014 Comment Length        0000 (0)\n-658016 Disk Start            0000 (0)\n-658018 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65801A Ext File Attributes   00000000 (0)\n-65801E Local Header Offset   000E944E (955470)\n-658022 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x658022: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65807E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658080   Length              0005 (5)\n-658082   Flags               01 (1) 'Modification'\n-658083   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658087 CENTRAL HEADER #383   02014B50 (33639248)\n-65808B Created Zip Spec      14 (20) '2.0'\n-65808C Created OS            00 (0) 'MS-DOS'\n-65808D Extract Zip Spec      14 (20) '2.0'\n-65808E Extract OS            00 (0) 'MS-DOS'\n-65808F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-658091 Compression Method    0000 (0) 'Stored'\n-658093 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658097 CRC                   E6BF62E0 (3871302368)\n-65809B Compressed Size       000008F8 (2296)\n-65809F Uncompressed Size     000008F8 (2296)\n-6580A3 Filename Length       0072 (114)\n-6580A5 Extra Length          0009 (9)\n-6580A7 Comment Length        0000 (0)\n-6580A9 Disk Start            0000 (0)\n-6580AB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6580AD Ext File Attributes   00000000 (0)\n-6580B1 Local Header Offset   000E94D1 (955601)\n-6580B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6580B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-658127 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658129   Length              0005 (5)\n-65812B   Flags               01 (1) 'Modification'\n-65812C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658130 CENTRAL HEADER #384   02014B50 (33639248)\n-658134 Created Zip Spec      14 (20) '2.0'\n-658135 Created OS            00 (0) 'MS-DOS'\n-658136 Extract Zip Spec      14 (20) '2.0'\n-658137 Extract OS            00 (0) 'MS-DOS'\n-658138 General Purpose Flag  0000 (0)\n-65813A Compression Method    0000 (0) 'Stored'\n-65813C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658140 CRC                   00000000 (0)\n-658144 Compressed Size       00000000 (0)\n-658148 Uncompressed Size     00000000 (0)\n-65814C Filename Length       0061 (97)\n-65814E Extra Length          0009 (9)\n-658150 Comment Length        0000 (0)\n-658152 Disk Start            0000 (0)\n-658154 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-658156 Ext File Attributes   00000000 (0)\n-65815A Local Header Offset   000E9E72 (958066)\n-65815E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65815E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6581BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6581C1   Length              0005 (5)\n-6581C3   Flags               01 (1) 'Modification'\n-6581C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6581C8 CENTRAL HEADER #385   02014B50 (33639248)\n-6581CC Created Zip Spec      14 (20) '2.0'\n-6581CD Created OS            00 (0) 'MS-DOS'\n-6581CE Extract Zip Spec      14 (20) '2.0'\n-6581CF Extract OS            00 (0) 'MS-DOS'\n-6581D0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6581D2 Compression Method    0000 (0) 'Stored'\n-6581D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6581D8 CRC                   01130591 (18023825)\n-6581DC Compressed Size       00000594 (1428)\n-6581E0 Uncompressed Size     00000594 (1428)\n-6581E4 Filename Length       0077 (119)\n-6581E6 Extra Length          0009 (9)\n-6581E8 Comment Length        0000 (0)\n-6581EA Disk Start            0000 (0)\n-6581EC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6581EE Ext File Attributes   00000000 (0)\n-6581F2 Local Header Offset   000E9EFA (958202)\n-6581F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6581F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65826D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65826F   Length              0005 (5)\n-658271   Flags               01 (1) 'Modification'\n-658272   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658276 CENTRAL HEADER #386   02014B50 (33639248)\n-65827A Created Zip Spec      14 (20) '2.0'\n-65827B Created OS            00 (0) 'MS-DOS'\n-65827C Extract Zip Spec      14 (20) '2.0'\n-65827D Extract OS            00 (0) 'MS-DOS'\n-65827E General Purpose Flag  0000 (0)\n-658280 Compression Method    0000 (0) 'Stored'\n-658282 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658286 CRC                   00000000 (0)\n-65828A Compressed Size       00000000 (0)\n-65828E Uncompressed Size     00000000 (0)\n-658292 Filename Length       0063 (99)\n-658294 Extra Length          0009 (9)\n-658296 Comment Length        0000 (0)\n-658298 Disk Start            0000 (0)\n-65829A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65829C Ext File Attributes   00000000 (0)\n-6582A0 Local Header Offset   000EA53C (959804)\n-6582A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6582A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-658307 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658309   Length              0005 (5)\n-65830B   Flags               01 (1) 'Modification'\n-65830C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658310 CENTRAL HEADER #387   02014B50 (33639248)\n-658314 Created Zip Spec      14 (20) '2.0'\n-658315 Created OS            00 (0) 'MS-DOS'\n-658316 Extract Zip Spec      14 (20) '2.0'\n-658317 Extract OS            00 (0) 'MS-DOS'\n-658318 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65831A Compression Method    0000 (0) 'Stored'\n-65831C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658320 CRC                   F05E2331 (4032701233)\n-658324 Compressed Size       00000831 (2097)\n-658328 Uncompressed Size     00000831 (2097)\n-65832C Filename Length       0079 (121)\n-65832E Extra Length          0009 (9)\n-658330 Comment Length        0000 (0)\n-658332 Disk Start            0000 (0)\n-658334 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-658336 Ext File Attributes   00000000 (0)\n-65833A Local Header Offset   000EA5C6 (959942)\n-65833E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65833E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6583B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6583B9   Length              0005 (5)\n-6583BB   Flags               01 (1) 'Modification'\n-6583BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6583C0 CENTRAL HEADER #388   02014B50 (33639248)\n-6583C4 Created Zip Spec      14 (20) '2.0'\n-6583C5 Created OS            00 (0) 'MS-DOS'\n-6583C6 Extract Zip Spec      14 (20) '2.0'\n-6583C7 Extract OS            00 (0) 'MS-DOS'\n-6583C8 General Purpose Flag  0000 (0)\n-6583CA Compression Method    0000 (0) 'Stored'\n-6583CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6583D0 CRC                   00000000 (0)\n-6583D4 Compressed Size       00000000 (0)\n-6583D8 Uncompressed Size     00000000 (0)\n-6583DC Filename Length       0061 (97)\n-6583DE Extra Length          0009 (9)\n-6583E0 Comment Length        0000 (0)\n-6583E2 Disk Start            0000 (0)\n-6583E4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6583E6 Ext File Attributes   00000000 (0)\n-6583EA Local Header Offset   000EAEA7 (962215)\n-6583EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6583EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65844F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658451   Length              0005 (5)\n-658453   Flags               01 (1) 'Modification'\n-658454   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658458 CENTRAL HEADER #389   02014B50 (33639248)\n-65845C Created Zip Spec      14 (20) '2.0'\n-65845D Created OS            00 (0) 'MS-DOS'\n-65845E Extract Zip Spec      14 (20) '2.0'\n-65845F Extract OS            00 (0) 'MS-DOS'\n-658460 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-658462 Compression Method    0000 (0) 'Stored'\n-658464 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658468 CRC                   80ED3BA4 (2163030948)\n-65846C Compressed Size       000015D0 (5584)\n-658470 Uncompressed Size     000015D0 (5584)\n-658474 Filename Length       0077 (119)\n-658476 Extra Length          0009 (9)\n-658478 Comment Length        0000 (0)\n-65847A Disk Start            0000 (0)\n-65847C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65847E Ext File Attributes   00000000 (0)\n-658482 Local Header Offset   000EAF2F (962351)\n-658486 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x658486: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6584FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6584FF   Length              0005 (5)\n-658501   Flags               01 (1) 'Modification'\n-658502   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658506 CENTRAL HEADER #390   02014B50 (33639248)\n-65850A Created Zip Spec      14 (20) '2.0'\n-65850B Created OS            00 (0) 'MS-DOS'\n-65850C Extract Zip Spec      14 (20) '2.0'\n-65850D Extract OS            00 (0) 'MS-DOS'\n-65850E General Purpose Flag  0000 (0)\n-658510 Compression Method    0000 (0) 'Stored'\n-658512 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658516 CRC                   00000000 (0)\n-65851A Compressed Size       00000000 (0)\n-65851E Uncompressed Size     00000000 (0)\n-658522 Filename Length       0067 (103)\n-658524 Extra Length          0009 (9)\n-658526 Comment Length        0000 (0)\n-658528 Disk Start            0000 (0)\n-65852A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65852C Ext File Attributes   00000000 (0)\n-658530 Local Header Offset   000EC5AD (968109)\n-658534 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x658534: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65859B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65859D   Length              0005 (5)\n-65859F   Flags               01 (1) 'Modification'\n-6585A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6585A4 CENTRAL HEADER #391   02014B50 (33639248)\n-6585A8 Created Zip Spec      14 (20) '2.0'\n-6585A9 Created OS            00 (0) 'MS-DOS'\n-6585AA Extract Zip Spec      14 (20) '2.0'\n-6585AB Extract OS            00 (0) 'MS-DOS'\n-6585AC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6585AE Compression Method    0000 (0) 'Stored'\n-6585B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6585B4 CRC                   7018E446 (1880679494)\n-6585B8 Compressed Size       00001FAE (8110)\n-6585BC Uncompressed Size     00001FAE (8110)\n-6585C0 Filename Length       007D (125)\n-6585C2 Extra Length          0009 (9)\n-6585C4 Comment Length        0000 (0)\n-6585C6 Disk Start            0000 (0)\n-6585C8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6585CA Ext File Attributes   00000000 (0)\n-6585CE Local Header Offset   000EC63B (968251)\n-6585D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6585D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65864F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658651   Length              0005 (5)\n-658653   Flags               01 (1) 'Modification'\n-658654   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658658 CENTRAL HEADER #392   02014B50 (33639248)\n-65865C Created Zip Spec      14 (20) '2.0'\n-65865D Created OS            00 (0) 'MS-DOS'\n-65865E Extract Zip Spec      14 (20) '2.0'\n-65865F Extract OS            00 (0) 'MS-DOS'\n-658660 General Purpose Flag  0000 (0)\n-658662 Compression Method    0000 (0) 'Stored'\n-658664 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658668 CRC                   00000000 (0)\n-65866C Compressed Size       00000000 (0)\n-658670 Uncompressed Size     00000000 (0)\n-658674 Filename Length       005E (94)\n-658676 Extra Length          0009 (9)\n-658678 Comment Length        0000 (0)\n-65867A Disk Start            0000 (0)\n-65867C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65867E Ext File Attributes   00000000 (0)\n-658682 Local Header Offset   000EE69D (976541)\n-658686 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x658686: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6586E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6586E6   Length              0005 (5)\n-6586E8   Flags               01 (1) 'Modification'\n-6586E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6586ED CENTRAL HEADER #393   02014B50 (33639248)\n-6586F1 Created Zip Spec      14 (20) '2.0'\n-6586F2 Created OS            00 (0) 'MS-DOS'\n-6586F3 Extract Zip Spec      14 (20) '2.0'\n-6586F4 Extract OS            00 (0) 'MS-DOS'\n-6586F5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6586F7 Compression Method    0000 (0) 'Stored'\n-6586F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6586FD CRC                   61A0CE5A (1637928538)\n-658701 Compressed Size       000012FA (4858)\n-658705 Uncompressed Size     000012FA (4858)\n-658709 Filename Length       0074 (116)\n-65870B Extra Length          0009 (9)\n-65870D Comment Length        0000 (0)\n-65870F Disk Start            0000 (0)\n-658711 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-658713 Ext File Attributes   00000000 (0)\n-658717 Local Header Offset   000EE722 (976674)\n-65871B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65871B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65878F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658791   Length              0005 (5)\n-658793   Flags               01 (1) 'Modification'\n-658794   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658798 CENTRAL HEADER #394   02014B50 (33639248)\n-65879C Created Zip Spec      14 (20) '2.0'\n-65879D Created OS            00 (0) 'MS-DOS'\n-65879E Extract Zip Spec      14 (20) '2.0'\n-65879F Extract OS            00 (0) 'MS-DOS'\n-6587A0 General Purpose Flag  0000 (0)\n-6587A2 Compression Method    0000 (0) 'Stored'\n-6587A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6587A8 CRC                   00000000 (0)\n-6587AC Compressed Size       00000000 (0)\n-6587B0 Uncompressed Size     00000000 (0)\n-6587B4 Filename Length       0061 (97)\n-6587B6 Extra Length          0009 (9)\n-6587B8 Comment Length        0000 (0)\n-6587BA Disk Start            0000 (0)\n-6587BC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6587BE Ext File Attributes   00000000 (0)\n-6587C2 Local Header Offset   000EFAC7 (981703)\n-6587C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6587C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-658827 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658829   Length              0005 (5)\n-65882B   Flags               01 (1) 'Modification'\n-65882C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658830 CENTRAL HEADER #395   02014B50 (33639248)\n-658834 Created Zip Spec      14 (20) '2.0'\n-658835 Created OS            00 (0) 'MS-DOS'\n-658836 Extract Zip Spec      14 (20) '2.0'\n-658837 Extract OS            00 (0) 'MS-DOS'\n-658838 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65883A Compression Method    0000 (0) 'Stored'\n-65883C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658840 CRC                   624BE63E (1649141310)\n-658844 Compressed Size       00001315 (4885)\n-658848 Uncompressed Size     00001315 (4885)\n-65884C Filename Length       0077 (119)\n-65884E Extra Length          0009 (9)\n-658850 Comment Length        0000 (0)\n-658852 Disk Start            0000 (0)\n-658854 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-658856 Ext File Attributes   00000000 (0)\n-65885A Local Header Offset   000EFB4F (981839)\n-65885E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65885E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6588D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6588D7   Length              0005 (5)\n-6588D9   Flags               01 (1) 'Modification'\n-6588DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6588DE CENTRAL HEADER #396   02014B50 (33639248)\n-6588E2 Created Zip Spec      14 (20) '2.0'\n-6588E3 Created OS            00 (0) 'MS-DOS'\n-6588E4 Extract Zip Spec      14 (20) '2.0'\n-6588E5 Extract OS            00 (0) 'MS-DOS'\n-6588E6 General Purpose Flag  0000 (0)\n-6588E8 Compression Method    0000 (0) 'Stored'\n-6588EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6588EE CRC                   00000000 (0)\n-6588F2 Compressed Size       00000000 (0)\n-6588F6 Uncompressed Size     00000000 (0)\n-6588FA Filename Length       005D (93)\n-6588FC Extra Length          0009 (9)\n-6588FE Comment Length        0000 (0)\n-658900 Disk Start            0000 (0)\n-658902 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-658904 Ext File Attributes   00000000 (0)\n-658908 Local Header Offset   000F0F12 (986898)\n-65890C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65890C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-658969 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65896B   Length              0005 (5)\n-65896D   Flags               01 (1) 'Modification'\n-65896E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658972 CENTRAL HEADER #397   02014B50 (33639248)\n-658976 Created Zip Spec      14 (20) '2.0'\n-658977 Created OS            00 (0) 'MS-DOS'\n-658978 Extract Zip Spec      14 (20) '2.0'\n-658979 Extract OS            00 (0) 'MS-DOS'\n-65897A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65897C Compression Method    0000 (0) 'Stored'\n-65897E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658982 CRC                   F4A07CA3 (4104158371)\n-658986 Compressed Size       000027E4 (10212)\n-65898A Uncompressed Size     000027E4 (10212)\n-65898E Filename Length       0073 (115)\n-658990 Extra Length          0009 (9)\n-658992 Comment Length        0000 (0)\n-658994 Disk Start            0000 (0)\n-658996 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-658998 Ext File Attributes   00000000 (0)\n-65899C Local Header Offset   000F0F96 (987030)\n-6589A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6589A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-658A13 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658A15   Length              0005 (5)\n-658A17   Flags               01 (1) 'Modification'\n-658A18   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658A1C CENTRAL HEADER #398   02014B50 (33639248)\n-658A20 Created Zip Spec      14 (20) '2.0'\n-658A21 Created OS            00 (0) 'MS-DOS'\n-658A22 Extract Zip Spec      14 (20) '2.0'\n-658A23 Extract OS            00 (0) 'MS-DOS'\n-658A24 General Purpose Flag  0000 (0)\n-658A26 Compression Method    0000 (0) 'Stored'\n-658A28 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658A2C CRC                   00000000 (0)\n-658A30 Compressed Size       00000000 (0)\n-658A34 Uncompressed Size     00000000 (0)\n-658A38 Filename Length       0065 (101)\n-658A3A Extra Length          0009 (9)\n-658A3C Comment Length        0000 (0)\n-658A3E Disk Start            0000 (0)\n-658A40 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-658A42 Ext File Attributes   00000000 (0)\n-658A46 Local Header Offset   000F3824 (997412)\n-658A4A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x658A4A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-658AAF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658AB1   Length              0005 (5)\n-658AB3   Flags               01 (1) 'Modification'\n-658AB4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658AB8 CENTRAL HEADER #399   02014B50 (33639248)\n-658ABC Created Zip Spec      14 (20) '2.0'\n-658ABD Created OS            00 (0) 'MS-DOS'\n-658ABE Extract Zip Spec      14 (20) '2.0'\n-658ABF Extract OS            00 (0) 'MS-DOS'\n-658AC0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-658AC2 Compression Method    0000 (0) 'Stored'\n-658AC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658AC8 CRC                   6E031E40 (1845698112)\n-658ACC Compressed Size       00001276 (4726)\n-658AD0 Uncompressed Size     00001276 (4726)\n-658AD4 Filename Length       007B (123)\n-658AD6 Extra Length          0009 (9)\n-658AD8 Comment Length        0000 (0)\n-658ADA Disk Start            0000 (0)\n-658ADC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-658ADE Ext File Attributes   00000000 (0)\n-658AE2 Local Header Offset   000F38B0 (997552)\n-658AE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x658AE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-658B61 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658B63   Length              0005 (5)\n-658B65   Flags               01 (1) 'Modification'\n-658B66   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658B6A CENTRAL HEADER #400   02014B50 (33639248)\n-658B6E Created Zip Spec      14 (20) '2.0'\n-658B6F Created OS            00 (0) 'MS-DOS'\n-658B70 Extract Zip Spec      14 (20) '2.0'\n-658B71 Extract OS            00 (0) 'MS-DOS'\n-658B72 General Purpose Flag  0000 (0)\n-658B74 Compression Method    0000 (0) 'Stored'\n-658B76 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658B7A CRC                   00000000 (0)\n-658B7E Compressed Size       00000000 (0)\n-658B82 Uncompressed Size     00000000 (0)\n-658B86 Filename Length       0064 (100)\n-658B88 Extra Length          0009 (9)\n-658B8A Comment Length        0000 (0)\n-658B8C Disk Start            0000 (0)\n-658B8E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-658B90 Ext File Attributes   00000000 (0)\n-658B94 Local Header Offset   000F4BD8 (1002456)\n-658B98 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x658B98: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-658BFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658BFE   Length              0005 (5)\n-658C00   Flags               01 (1) 'Modification'\n-658C01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658C05 CENTRAL HEADER #401   02014B50 (33639248)\n-658C09 Created Zip Spec      14 (20) '2.0'\n-658C0A Created OS            00 (0) 'MS-DOS'\n-658C0B Extract Zip Spec      14 (20) '2.0'\n-658C0C Extract OS            00 (0) 'MS-DOS'\n-658C0D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-658C0F Compression Method    0000 (0) 'Stored'\n-658C11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658C15 CRC                   5987930A (1502057226)\n-658C19 Compressed Size       00000BDE (3038)\n-658C1D Uncompressed Size     00000BDE (3038)\n-658C21 Filename Length       007A (122)\n-658C23 Extra Length          0009 (9)\n-658C25 Comment Length        0000 (0)\n-658C27 Disk Start            0000 (0)\n-658C29 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-658C2B Ext File Attributes   00000000 (0)\n-658C2F Local Header Offset   000F4C63 (1002595)\n-658C33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x658C33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-658CAD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658CAF   Length              0005 (5)\n-658CB1   Flags               01 (1) 'Modification'\n-658CB2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658CB6 CENTRAL HEADER #402   02014B50 (33639248)\n-658CBA Created Zip Spec      14 (20) '2.0'\n-658CBB Created OS            00 (0) 'MS-DOS'\n-658CBC Extract Zip Spec      14 (20) '2.0'\n-658CBD Extract OS            00 (0) 'MS-DOS'\n-658CBE General Purpose Flag  0000 (0)\n-658CC0 Compression Method    0000 (0) 'Stored'\n-658CC2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658CC6 CRC                   00000000 (0)\n-658CCA Compressed Size       00000000 (0)\n-658CCE Uncompressed Size     00000000 (0)\n-658CD2 Filename Length       0065 (101)\n-658CD4 Extra Length          0009 (9)\n-658CD6 Comment Length        0000 (0)\n-658CD8 Disk Start            0000 (0)\n-658CDA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-658CDC Ext File Attributes   00000000 (0)\n-658CE0 Local Header Offset   000F58F2 (1005810)\n-658CE4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x658CE4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-658D49 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658D4B   Length              0005 (5)\n-658D4D   Flags               01 (1) 'Modification'\n-658D4E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658D52 CENTRAL HEADER #403   02014B50 (33639248)\n-658D56 Created Zip Spec      14 (20) '2.0'\n-658D57 Created OS            00 (0) 'MS-DOS'\n-658D58 Extract Zip Spec      14 (20) '2.0'\n-658D59 Extract OS            00 (0) 'MS-DOS'\n-658D5A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-658D5C Compression Method    0000 (0) 'Stored'\n-658D5E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658D62 CRC                   CA93F7B9 (3398694841)\n-658D66 Compressed Size       000008CF (2255)\n-658D6A Uncompressed Size     000008CF (2255)\n-658D6E Filename Length       007B (123)\n-658D70 Extra Length          0009 (9)\n-658D72 Comment Length        0000 (0)\n-658D74 Disk Start            0000 (0)\n-658D76 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-658D78 Ext File Attributes   00000000 (0)\n-658D7C Local Header Offset   000F597E (1005950)\n-658D80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x658D80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-658DFB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658DFD   Length              0005 (5)\n-658DFF   Flags               01 (1) 'Modification'\n-658E00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658E04 CENTRAL HEADER #404   02014B50 (33639248)\n-658E08 Created Zip Spec      14 (20) '2.0'\n-658E09 Created OS            00 (0) 'MS-DOS'\n-658E0A Extract Zip Spec      14 (20) '2.0'\n-658E0B Extract OS            00 (0) 'MS-DOS'\n-658E0C General Purpose Flag  0000 (0)\n-658E0E Compression Method    0000 (0) 'Stored'\n-658E10 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658E14 CRC                   00000000 (0)\n-658E18 Compressed Size       00000000 (0)\n-658E1C Uncompressed Size     00000000 (0)\n-658E20 Filename Length       0063 (99)\n-658E22 Extra Length          0009 (9)\n-658E24 Comment Length        0000 (0)\n-658E26 Disk Start            0000 (0)\n-658E28 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-658E2A Ext File Attributes   00000000 (0)\n-658E2E Local Header Offset   000F62FF (1008383)\n-658E32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x658E32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-658E95 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658E97   Length              0005 (5)\n-658E99   Flags               01 (1) 'Modification'\n-658E9A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658E9E CENTRAL HEADER #405   02014B50 (33639248)\n-658EA2 Created Zip Spec      14 (20) '2.0'\n-658EA3 Created OS            00 (0) 'MS-DOS'\n-658EA4 Extract Zip Spec      14 (20) '2.0'\n-658EA5 Extract OS            00 (0) 'MS-DOS'\n-658EA6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-658EA8 Compression Method    0000 (0) 'Stored'\n-658EAA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658EAE CRC                   673E5975 (1732139381)\n-658EB2 Compressed Size       00000CA9 (3241)\n-658EB6 Uncompressed Size     00000CA9 (3241)\n-658EBA Filename Length       0079 (121)\n-658EBC Extra Length          0009 (9)\n-658EBE Comment Length        0000 (0)\n-658EC0 Disk Start            0000 (0)\n-658EC2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-658EC4 Ext File Attributes   00000000 (0)\n-658EC8 Local Header Offset   000F6389 (1008521)\n-658ECC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x658ECC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-658F45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658F47   Length              0005 (5)\n-658F49   Flags               01 (1) 'Modification'\n-658F4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658F4E CENTRAL HEADER #406   02014B50 (33639248)\n-658F52 Created Zip Spec      14 (20) '2.0'\n-658F53 Created OS            00 (0) 'MS-DOS'\n-658F54 Extract Zip Spec      14 (20) '2.0'\n-658F55 Extract OS            00 (0) 'MS-DOS'\n-658F56 General Purpose Flag  0000 (0)\n-658F58 Compression Method    0000 (0) 'Stored'\n-658F5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658F5E CRC                   00000000 (0)\n-658F62 Compressed Size       00000000 (0)\n-658F66 Uncompressed Size     00000000 (0)\n-658F6A Filename Length       0061 (97)\n-658F6C Extra Length          0009 (9)\n-658F6E Comment Length        0000 (0)\n-658F70 Disk Start            0000 (0)\n-658F72 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-658F74 Ext File Attributes   00000000 (0)\n-658F78 Local Header Offset   000F70E2 (1011938)\n-658F7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x658F7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-658FDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-658FDF   Length              0005 (5)\n-658FE1   Flags               01 (1) 'Modification'\n-658FE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-658FE6 CENTRAL HEADER #407   02014B50 (33639248)\n-658FEA Created Zip Spec      14 (20) '2.0'\n-658FEB Created OS            00 (0) 'MS-DOS'\n-658FEC Extract Zip Spec      14 (20) '2.0'\n-658FED Extract OS            00 (0) 'MS-DOS'\n-658FEE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-658FF0 Compression Method    0000 (0) 'Stored'\n-658FF2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-658FF6 CRC                   33033645 (855848517)\n-658FFA Compressed Size       0000503C (20540)\n-658FFE Uncompressed Size     0000503C (20540)\n-659002 Filename Length       0077 (119)\n-659004 Extra Length          0009 (9)\n-659006 Comment Length        0000 (0)\n-659008 Disk Start            0000 (0)\n-65900A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65900C Ext File Attributes   00000000 (0)\n-659010 Local Header Offset   000F716A (1012074)\n-659014 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x659014: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65908B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65908D   Length              0005 (5)\n-65908F   Flags               01 (1) 'Modification'\n-659090   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-659094 CENTRAL HEADER #408   02014B50 (33639248)\n-659098 Created Zip Spec      14 (20) '2.0'\n-659099 Created OS            00 (0) 'MS-DOS'\n-65909A Extract Zip Spec      14 (20) '2.0'\n-65909B Extract OS            00 (0) 'MS-DOS'\n-65909C General Purpose Flag  0000 (0)\n-65909E Compression Method    0000 (0) 'Stored'\n-6590A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6590A4 CRC                   00000000 (0)\n-6590A8 Compressed Size       00000000 (0)\n-6590AC Uncompressed Size     00000000 (0)\n-6590B0 Filename Length       0064 (100)\n-6590B2 Extra Length          0009 (9)\n-6590B4 Comment Length        0000 (0)\n-6590B6 Disk Start            0000 (0)\n-6590B8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6590BA Ext File Attributes   00000000 (0)\n-6590BE Local Header Offset   000FC254 (1032788)\n-6590C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6590C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659126 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659128   Length              0005 (5)\n-65912A   Flags               01 (1) 'Modification'\n-65912B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65912F CENTRAL HEADER #409   02014B50 (33639248)\n-659133 Created Zip Spec      14 (20) '2.0'\n-659134 Created OS            00 (0) 'MS-DOS'\n-659135 Extract Zip Spec      14 (20) '2.0'\n-659136 Extract OS            00 (0) 'MS-DOS'\n-659137 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-659139 Compression Method    0000 (0) 'Stored'\n-65913B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65913F CRC                   F5037A64 (4110645860)\n-659143 Compressed Size       0000080E (2062)\n-659147 Uncompressed Size     0000080E (2062)\n-65914B Filename Length       007A (122)\n-65914D Extra Length          0009 (9)\n-65914F Comment Length        0000 (0)\n-659151 Disk Start            0000 (0)\n-659153 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659155 Ext File Attributes   00000000 (0)\n-659159 Local Header Offset   000FC2DF (1032927)\n-65915D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65915D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6591D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6591D9   Length              0005 (5)\n-6591DB   Flags               01 (1) 'Modification'\n-6591DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6591E0 CENTRAL HEADER #410   02014B50 (33639248)\n-6591E4 Created Zip Spec      14 (20) '2.0'\n-6591E5 Created OS            00 (0) 'MS-DOS'\n-6591E6 Extract Zip Spec      14 (20) '2.0'\n-6591E7 Extract OS            00 (0) 'MS-DOS'\n-6591E8 General Purpose Flag  0000 (0)\n-6591EA Compression Method    0000 (0) 'Stored'\n-6591EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6591F0 CRC                   00000000 (0)\n-6591F4 Compressed Size       00000000 (0)\n-6591F8 Uncompressed Size     00000000 (0)\n-6591FC Filename Length       005A (90)\n-6591FE Extra Length          0009 (9)\n-659200 Comment Length        0000 (0)\n-659202 Disk Start            0000 (0)\n-659204 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659206 Ext File Attributes   00000000 (0)\n-65920A Local Header Offset   000FCB9E (1035166)\n-65920E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65920E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659268 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65926A   Length              0005 (5)\n-65926C   Flags               01 (1) 'Modification'\n-65926D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-659271 CENTRAL HEADER #411   02014B50 (33639248)\n-659275 Created Zip Spec      14 (20) '2.0'\n-659276 Created OS            00 (0) 'MS-DOS'\n-659277 Extract Zip Spec      14 (20) '2.0'\n-659278 Extract OS            00 (0) 'MS-DOS'\n-659279 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65927B Compression Method    0000 (0) 'Stored'\n-65927D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-659281 CRC                   DB187B38 (3675814712)\n-659285 Compressed Size       00001A85 (6789)\n-659289 Uncompressed Size     00001A85 (6789)\n-65928D Filename Length       0070 (112)\n-65928F Extra Length          0009 (9)\n-659291 Comment Length        0000 (0)\n-659293 Disk Start            0000 (0)\n-659295 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659297 Ext File Attributes   00000000 (0)\n-65929B Local Header Offset   000FCC1F (1035295)\n-65929F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65929F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65930F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659311   Length              0005 (5)\n-659313   Flags               01 (1) 'Modification'\n-659314   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-659318 CENTRAL HEADER #412   02014B50 (33639248)\n-65931C Created Zip Spec      14 (20) '2.0'\n-65931D Created OS            00 (0) 'MS-DOS'\n-65931E Extract Zip Spec      14 (20) '2.0'\n-65931F Extract OS            00 (0) 'MS-DOS'\n-659320 General Purpose Flag  0000 (0)\n-659322 Compression Method    0000 (0) 'Stored'\n-659324 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-659328 CRC                   00000000 (0)\n-65932C Compressed Size       00000000 (0)\n-659330 Uncompressed Size     00000000 (0)\n-659334 Filename Length       005B (91)\n-659336 Extra Length          0009 (9)\n-659338 Comment Length        0000 (0)\n-65933A Disk Start            0000 (0)\n-65933C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65933E Ext File Attributes   00000000 (0)\n-659342 Local Header Offset   000FE74B (1042251)\n-659346 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x659346: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6593A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6593A3   Length              0005 (5)\n-6593A5   Flags               01 (1) 'Modification'\n-6593A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6593AA CENTRAL HEADER #413   02014B50 (33639248)\n-6593AE Created Zip Spec      14 (20) '2.0'\n-6593AF Created OS            00 (0) 'MS-DOS'\n-6593B0 Extract Zip Spec      14 (20) '2.0'\n-6593B1 Extract OS            00 (0) 'MS-DOS'\n-6593B2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6593B4 Compression Method    0000 (0) 'Stored'\n-6593B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6593BA CRC                   CD183667 (3440916071)\n-6593BE Compressed Size       00001A6E (6766)\n-6593C2 Uncompressed Size     00001A6E (6766)\n-6593C6 Filename Length       0071 (113)\n-6593C8 Extra Length          0009 (9)\n-6593CA Comment Length        0000 (0)\n-6593CC Disk Start            0000 (0)\n-6593CE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6593D0 Ext File Attributes   00000000 (0)\n-6593D4 Local Header Offset   000FE7CD (1042381)\n-6593D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6593D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659449 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65944B   Length              0005 (5)\n-65944D   Flags               01 (1) 'Modification'\n-65944E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-659452 CENTRAL HEADER #414   02014B50 (33639248)\n-659456 Created Zip Spec      14 (20) '2.0'\n-659457 Created OS            00 (0) 'MS-DOS'\n-659458 Extract Zip Spec      14 (20) '2.0'\n-659459 Extract OS            00 (0) 'MS-DOS'\n-65945A General Purpose Flag  0000 (0)\n-65945C Compression Method    0000 (0) 'Stored'\n-65945E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-659462 CRC                   00000000 (0)\n-659466 Compressed Size       00000000 (0)\n-65946A Uncompressed Size     00000000 (0)\n-65946E Filename Length       005B (91)\n-659470 Extra Length          0009 (9)\n-659472 Comment Length        0000 (0)\n-659474 Disk Start            0000 (0)\n-659476 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659478 Ext File Attributes   00000000 (0)\n-65947C Local Header Offset   001002E3 (1049315)\n-659480 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x659480: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6594DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6594DD   Length              0005 (5)\n-6594DF   Flags               01 (1) 'Modification'\n-6594E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6594E4 CENTRAL HEADER #415   02014B50 (33639248)\n-6594E8 Created Zip Spec      14 (20) '2.0'\n-6594E9 Created OS            00 (0) 'MS-DOS'\n-6594EA Extract Zip Spec      14 (20) '2.0'\n-6594EB Extract OS            00 (0) 'MS-DOS'\n-6594EC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6594EE Compression Method    0000 (0) 'Stored'\n-6594F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6594F4 CRC                   0C7DD276 (209572470)\n-6594F8 Compressed Size       00001A92 (6802)\n-6594FC Uncompressed Size     00001A92 (6802)\n-659500 Filename Length       0071 (113)\n-659502 Extra Length          0009 (9)\n-659504 Comment Length        0000 (0)\n-659506 Disk Start            0000 (0)\n-659508 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65950A Ext File Attributes   00000000 (0)\n-65950E Local Header Offset   00100365 (1049445)\n-659512 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x659512: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659583 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659585   Length              0005 (5)\n-659587   Flags               01 (1) 'Modification'\n-659588   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65958C CENTRAL HEADER #416   02014B50 (33639248)\n-659590 Created Zip Spec      14 (20) '2.0'\n-659591 Created OS            00 (0) 'MS-DOS'\n-659592 Extract Zip Spec      14 (20) '2.0'\n-659593 Extract OS            00 (0) 'MS-DOS'\n-659594 General Purpose Flag  0000 (0)\n-659596 Compression Method    0000 (0) 'Stored'\n-659598 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65959C CRC                   00000000 (0)\n-6595A0 Compressed Size       00000000 (0)\n-6595A4 Uncompressed Size     00000000 (0)\n-6595A8 Filename Length       005C (92)\n-6595AA Extra Length          0009 (9)\n-6595AC Comment Length        0000 (0)\n-6595AE Disk Start            0000 (0)\n-6595B0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6595B2 Ext File Attributes   00000000 (0)\n-6595B6 Local Header Offset   00101E9F (1056415)\n-6595BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6595BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659616 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659618   Length              0005 (5)\n-65961A   Flags               01 (1) 'Modification'\n-65961B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65961F CENTRAL HEADER #417   02014B50 (33639248)\n-659623 Created Zip Spec      14 (20) '2.0'\n-659624 Created OS            00 (0) 'MS-DOS'\n-659625 Extract Zip Spec      14 (20) '2.0'\n-659626 Extract OS            00 (0) 'MS-DOS'\n-659627 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-659629 Compression Method    0000 (0) 'Stored'\n-65962B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65962F CRC                   60EA12C2 (1625952962)\n-659633 Compressed Size       00001733 (5939)\n-659637 Uncompressed Size     00001733 (5939)\n-65963B Filename Length       0072 (114)\n-65963D Extra Length          0009 (9)\n-65963F Comment Length        0000 (0)\n-659641 Disk Start            0000 (0)\n-659643 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659645 Ext File Attributes   00000000 (0)\n-659649 Local Header Offset   00101F22 (1056546)\n-65964D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65964D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6596BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6596C1   Length              0005 (5)\n-6596C3   Flags               01 (1) 'Modification'\n-6596C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6596C8 CENTRAL HEADER #418   02014B50 (33639248)\n-6596CC Created Zip Spec      14 (20) '2.0'\n-6596CD Created OS            00 (0) 'MS-DOS'\n-6596CE Extract Zip Spec      14 (20) '2.0'\n-6596CF Extract OS            00 (0) 'MS-DOS'\n-6596D0 General Purpose Flag  0000 (0)\n-6596D2 Compression Method    0000 (0) 'Stored'\n-6596D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6596D8 CRC                   00000000 (0)\n-6596DC Compressed Size       00000000 (0)\n-6596E0 Uncompressed Size     00000000 (0)\n-6596E4 Filename Length       005F (95)\n-6596E6 Extra Length          0009 (9)\n-6596E8 Comment Length        0000 (0)\n-6596EA Disk Start            0000 (0)\n-6596EC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6596EE Ext File Attributes   00000000 (0)\n-6596F2 Local Header Offset   001036FE (1062654)\n-6596F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6596F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659755 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659757   Length              0005 (5)\n-659759   Flags               01 (1) 'Modification'\n-65975A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65975E CENTRAL HEADER #419   02014B50 (33639248)\n-659762 Created Zip Spec      14 (20) '2.0'\n-659763 Created OS            00 (0) 'MS-DOS'\n-659764 Extract Zip Spec      14 (20) '2.0'\n-659765 Extract OS            00 (0) 'MS-DOS'\n-659766 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-659768 Compression Method    0000 (0) 'Stored'\n-65976A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65976E CRC                   4BB1EABD (1269951165)\n-659772 Compressed Size       0000167D (5757)\n-659776 Uncompressed Size     0000167D (5757)\n-65977A Filename Length       0075 (117)\n-65977C Extra Length          0009 (9)\n-65977E Comment Length        0000 (0)\n-659780 Disk Start            0000 (0)\n-659782 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659784 Ext File Attributes   00000000 (0)\n-659788 Local Header Offset   00103784 (1062788)\n-65978C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65978C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659801 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659803   Length              0005 (5)\n-659805   Flags               01 (1) 'Modification'\n-659806   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65980A CENTRAL HEADER #420   02014B50 (33639248)\n-65980E Created Zip Spec      14 (20) '2.0'\n-65980F Created OS            00 (0) 'MS-DOS'\n-659810 Extract Zip Spec      14 (20) '2.0'\n-659811 Extract OS            00 (0) 'MS-DOS'\n-659812 General Purpose Flag  0000 (0)\n-659814 Compression Method    0000 (0) 'Stored'\n-659816 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65981A CRC                   00000000 (0)\n-65981E Compressed Size       00000000 (0)\n-659822 Uncompressed Size     00000000 (0)\n-659826 Filename Length       005F (95)\n-659828 Extra Length          0009 (9)\n-65982A Comment Length        0000 (0)\n-65982C Disk Start            0000 (0)\n-65982E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659830 Ext File Attributes   00000000 (0)\n-659834 Local Header Offset   00104EAD (1068717)\n-659838 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x659838: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659897 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659899   Length              0005 (5)\n-65989B   Flags               01 (1) 'Modification'\n-65989C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6598A0 CENTRAL HEADER #421   02014B50 (33639248)\n-6598A4 Created Zip Spec      14 (20) '2.0'\n-6598A5 Created OS            00 (0) 'MS-DOS'\n-6598A6 Extract Zip Spec      14 (20) '2.0'\n-6598A7 Extract OS            00 (0) 'MS-DOS'\n-6598A8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6598AA Compression Method    0000 (0) 'Stored'\n-6598AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6598B0 CRC                   A18A8EB9 (2710212281)\n-6598B4 Compressed Size       0000328A (12938)\n-6598B8 Uncompressed Size     0000328A (12938)\n-6598BC Filename Length       0075 (117)\n-6598BE Extra Length          0009 (9)\n-6598C0 Comment Length        0000 (0)\n-6598C2 Disk Start            0000 (0)\n-6598C4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-6598C6 Ext File Attributes   00000000 (0)\n-6598CA Local Header Offset   00104F33 (1068851)\n-6598CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6598CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659943 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659945   Length              0005 (5)\n-659947   Flags               01 (1) 'Modification'\n-659948   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65994C CENTRAL HEADER #422   02014B50 (33639248)\n-659950 Created Zip Spec      14 (20) '2.0'\n-659951 Created OS            00 (0) 'MS-DOS'\n-659952 Extract Zip Spec      14 (20) '2.0'\n-659953 Extract OS            00 (0) 'MS-DOS'\n-659954 General Purpose Flag  0000 (0)\n-659956 Compression Method    0000 (0) 'Stored'\n-659958 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65995C CRC                   00000000 (0)\n-659960 Compressed Size       00000000 (0)\n-659964 Uncompressed Size     00000000 (0)\n-659968 Filename Length       005E (94)\n-65996A Extra Length          0009 (9)\n-65996C Comment Length        0000 (0)\n-65996E Disk Start            0000 (0)\n-659970 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659972 Ext File Attributes   00000000 (0)\n-659976 Local Header Offset   00108269 (1081961)\n-65997A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65997A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6599D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6599DA   Length              0005 (5)\n-6599DC   Flags               01 (1) 'Modification'\n-6599DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6599E1 CENTRAL HEADER #423   02014B50 (33639248)\n-6599E5 Created Zip Spec      14 (20) '2.0'\n-6599E6 Created OS            00 (0) 'MS-DOS'\n-6599E7 Extract Zip Spec      14 (20) '2.0'\n-6599E8 Extract OS            00 (0) 'MS-DOS'\n-6599E9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-6599EB Compression Method    0000 (0) 'Stored'\n-6599ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6599F1 CRC                   B7B762D6 (3082248918)\n-6599F5 Compressed Size       00003879 (14457)\n-6599F9 Uncompressed Size     00003879 (14457)\n-6599FD Filename Length       0074 (116)\n-6599FF Extra Length          0009 (9)\n-659A01 Comment Length        0000 (0)\n-659A03 Disk Start            0000 (0)\n-659A05 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659A07 Ext File Attributes   00000000 (0)\n-659A0B Local Header Offset   001082EE (1082094)\n-659A0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x659A0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659A83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659A85   Length              0005 (5)\n-659A87   Flags               01 (1) 'Modification'\n-659A88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-659A8C CENTRAL HEADER #424   02014B50 (33639248)\n-659A90 Created Zip Spec      14 (20) '2.0'\n-659A91 Created OS            00 (0) 'MS-DOS'\n-659A92 Extract Zip Spec      14 (20) '2.0'\n-659A93 Extract OS            00 (0) 'MS-DOS'\n-659A94 General Purpose Flag  0000 (0)\n-659A96 Compression Method    0000 (0) 'Stored'\n-659A98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-659A9C CRC                   00000000 (0)\n-659AA0 Compressed Size       00000000 (0)\n-659AA4 Uncompressed Size     00000000 (0)\n-659AA8 Filename Length       0062 (98)\n-659AAA Extra Length          0009 (9)\n-659AAC Comment Length        0000 (0)\n-659AAE Disk Start            0000 (0)\n-659AB0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659AB2 Ext File Attributes   00000000 (0)\n-659AB6 Local Header Offset   0010BC12 (1096722)\n-659ABA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x659ABA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659B1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659B1E   Length              0005 (5)\n-659B20   Flags               01 (1) 'Modification'\n-659B21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-659B25 CENTRAL HEADER #425   02014B50 (33639248)\n-659B29 Created Zip Spec      14 (20) '2.0'\n-659B2A Created OS            00 (0) 'MS-DOS'\n-659B2B Extract Zip Spec      14 (20) '2.0'\n-659B2C Extract OS            00 (0) 'MS-DOS'\n-659B2D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-659B2F Compression Method    0000 (0) 'Stored'\n-659B31 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-659B35 CRC                   A2B9D29A (2730087066)\n-659B39 Compressed Size       00002150 (8528)\n-659B3D Uncompressed Size     00002150 (8528)\n-659B41 Filename Length       0078 (120)\n-659B43 Extra Length          0009 (9)\n-659B45 Comment Length        0000 (0)\n-659B47 Disk Start            0000 (0)\n-659B49 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659B4B Ext File Attributes   00000000 (0)\n-659B4F Local Header Offset   0010BC9B (1096859)\n-659B53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+656662 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656664   Length              0005 (5)\n+656666   Flags               01 (1) 'Modification'\n+656667   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65666B CENTRAL HEADER #234   02014B50 (33639248)\n+65666F Created Zip Spec      14 (20) '2.0'\n+656670 Created OS            00 (0) 'MS-DOS'\n+656671 Extract Zip Spec      14 (20) '2.0'\n+656672 Extract OS            00 (0) 'MS-DOS'\n+656673 General Purpose Flag  0000 (0)\n+656675 Compression Method    0000 (0) 'Stored'\n+656677 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65667B CRC                   00000000 (0)\n+65667F Compressed Size       00000000 (0)\n+656683 Uncompressed Size     00000000 (0)\n+656687 Filename Length       0068 (104)\n+656689 Extra Length          0009 (9)\n+65668B Comment Length        0000 (0)\n+65668D Disk Start            0000 (0)\n+65668F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656691 Ext File Attributes   00000000 (0)\n+656695 Local Header Offset   00087BF0 (556016)\n+656699 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656699: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656701 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656703   Length              0005 (5)\n+656705   Flags               01 (1) 'Modification'\n+656706   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65670A CENTRAL HEADER #235   02014B50 (33639248)\n+65670E Created Zip Spec      14 (20) '2.0'\n+65670F Created OS            00 (0) 'MS-DOS'\n+656710 Extract Zip Spec      14 (20) '2.0'\n+656711 Extract OS            00 (0) 'MS-DOS'\n+656712 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+656714 Compression Method    0000 (0) 'Stored'\n+656716 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65671A CRC                   23E20FDA (602017754)\n+65671E Compressed Size       00002C4A (11338)\n+656722 Uncompressed Size     00002C4A (11338)\n+656726 Filename Length       007E (126)\n+656728 Extra Length          0009 (9)\n+65672A Comment Length        0000 (0)\n+65672C Disk Start            0000 (0)\n+65672E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656730 Ext File Attributes   00000000 (0)\n+656734 Local Header Offset   00087C7F (556159)\n+656738 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656738: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6567B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6567B8   Length              0005 (5)\n+6567BA   Flags               01 (1) 'Modification'\n+6567BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6567BF CENTRAL HEADER #236   02014B50 (33639248)\n+6567C3 Created Zip Spec      14 (20) '2.0'\n+6567C4 Created OS            00 (0) 'MS-DOS'\n+6567C5 Extract Zip Spec      14 (20) '2.0'\n+6567C6 Extract OS            00 (0) 'MS-DOS'\n+6567C7 General Purpose Flag  0000 (0)\n+6567C9 Compression Method    0000 (0) 'Stored'\n+6567CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6567CF CRC                   00000000 (0)\n+6567D3 Compressed Size       00000000 (0)\n+6567D7 Uncompressed Size     00000000 (0)\n+6567DB Filename Length       0023 (35)\n+6567DD Extra Length          0009 (9)\n+6567DF Comment Length        0000 (0)\n+6567E1 Disk Start            0000 (0)\n+6567E3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6567E5 Ext File Attributes   00000000 (0)\n+6567E9 Local Header Offset   0008A97E (567678)\n+6567ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6567ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656810 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656812   Length              0005 (5)\n+656814   Flags               01 (1) 'Modification'\n+656815   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656819 CENTRAL HEADER #237   02014B50 (33639248)\n+65681D Created Zip Spec      14 (20) '2.0'\n+65681E Created OS            00 (0) 'MS-DOS'\n+65681F Extract Zip Spec      14 (20) '2.0'\n+656820 Extract OS            00 (0) 'MS-DOS'\n+656821 General Purpose Flag  0000 (0)\n+656823 Compression Method    0000 (0) 'Stored'\n+656825 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656829 CRC                   00000000 (0)\n+65682D Compressed Size       00000000 (0)\n+656831 Uncompressed Size     00000000 (0)\n+656835 Filename Length       002A (42)\n+656837 Extra Length          0009 (9)\n+656839 Comment Length        0000 (0)\n+65683B Disk Start            0000 (0)\n+65683D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65683F Ext File Attributes   00000000 (0)\n+656843 Local Header Offset   0008A9C8 (567752)\n+656847 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656847: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656871 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656873   Length              0005 (5)\n+656875   Flags               01 (1) 'Modification'\n+656876   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65687A CENTRAL HEADER #238   02014B50 (33639248)\n+65687E Created Zip Spec      14 (20) '2.0'\n+65687F Created OS            00 (0) 'MS-DOS'\n+656880 Extract Zip Spec      14 (20) '2.0'\n+656881 Extract OS            00 (0) 'MS-DOS'\n+656882 General Purpose Flag  0000 (0)\n+656884 Compression Method    0000 (0) 'Stored'\n+656886 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65688A CRC                   00000000 (0)\n+65688E Compressed Size       00000000 (0)\n+656892 Uncompressed Size     00000000 (0)\n+656896 Filename Length       0052 (82)\n+656898 Extra Length          0009 (9)\n+65689A Comment Length        0000 (0)\n+65689C Disk Start            0000 (0)\n+65689E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6568A0 Ext File Attributes   00000000 (0)\n+6568A4 Local Header Offset   0008AA19 (567833)\n+6568A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6568A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6568FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6568FC   Length              0005 (5)\n+6568FE   Flags               01 (1) 'Modification'\n+6568FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656903 CENTRAL HEADER #239   02014B50 (33639248)\n+656907 Created Zip Spec      14 (20) '2.0'\n+656908 Created OS            00 (0) 'MS-DOS'\n+656909 Extract Zip Spec      14 (20) '2.0'\n+65690A Extract OS            00 (0) 'MS-DOS'\n+65690B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65690D Compression Method    0000 (0) 'Stored'\n+65690F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656913 CRC                   90D14EC3 (2429636291)\n+656917 Compressed Size       00001ABD (6845)\n+65691B Uncompressed Size     00001ABD (6845)\n+65691F Filename Length       0068 (104)\n+656921 Extra Length          0009 (9)\n+656923 Comment Length        0000 (0)\n+656925 Disk Start            0000 (0)\n+656927 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656929 Ext File Attributes   00000000 (0)\n+65692D Local Header Offset   0008AA92 (567954)\n+656931 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656931: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656999 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65699B   Length              0005 (5)\n+65699D   Flags               01 (1) 'Modification'\n+65699E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6569A2 CENTRAL HEADER #240   02014B50 (33639248)\n+6569A6 Created Zip Spec      14 (20) '2.0'\n+6569A7 Created OS            00 (0) 'MS-DOS'\n+6569A8 Extract Zip Spec      14 (20) '2.0'\n+6569A9 Extract OS            00 (0) 'MS-DOS'\n+6569AA General Purpose Flag  0000 (0)\n+6569AC Compression Method    0000 (0) 'Stored'\n+6569AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6569B2 CRC                   00000000 (0)\n+6569B6 Compressed Size       00000000 (0)\n+6569BA Uncompressed Size     00000000 (0)\n+6569BE Filename Length       002E (46)\n+6569C0 Extra Length          0009 (9)\n+6569C2 Comment Length        0000 (0)\n+6569C4 Disk Start            0000 (0)\n+6569C6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6569C8 Ext File Attributes   00000000 (0)\n+6569CC Local Header Offset   0008C5EE (574958)\n+6569D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6569D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6569FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656A00   Length              0005 (5)\n+656A02   Flags               01 (1) 'Modification'\n+656A03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656A07 CENTRAL HEADER #241   02014B50 (33639248)\n+656A0B Created Zip Spec      14 (20) '2.0'\n+656A0C Created OS            00 (0) 'MS-DOS'\n+656A0D Extract Zip Spec      14 (20) '2.0'\n+656A0E Extract OS            00 (0) 'MS-DOS'\n+656A0F General Purpose Flag  0000 (0)\n+656A11 Compression Method    0000 (0) 'Stored'\n+656A13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656A17 CRC                   00000000 (0)\n+656A1B Compressed Size       00000000 (0)\n+656A1F Uncompressed Size     00000000 (0)\n+656A23 Filename Length       0035 (53)\n+656A25 Extra Length          0009 (9)\n+656A27 Comment Length        0000 (0)\n+656A29 Disk Start            0000 (0)\n+656A2B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656A2D Ext File Attributes   00000000 (0)\n+656A31 Local Header Offset   0008C643 (575043)\n+656A35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656A35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656A6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656A6C   Length              0005 (5)\n+656A6E   Flags               01 (1) 'Modification'\n+656A6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656A73 CENTRAL HEADER #242   02014B50 (33639248)\n+656A77 Created Zip Spec      14 (20) '2.0'\n+656A78 Created OS            00 (0) 'MS-DOS'\n+656A79 Extract Zip Spec      14 (20) '2.0'\n+656A7A Extract OS            00 (0) 'MS-DOS'\n+656A7B General Purpose Flag  0000 (0)\n+656A7D Compression Method    0000 (0) 'Stored'\n+656A7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656A83 CRC                   00000000 (0)\n+656A87 Compressed Size       00000000 (0)\n+656A8B Uncompressed Size     00000000 (0)\n+656A8F Filename Length       005E (94)\n+656A91 Extra Length          0009 (9)\n+656A93 Comment Length        0000 (0)\n+656A95 Disk Start            0000 (0)\n+656A97 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656A99 Ext File Attributes   00000000 (0)\n+656A9D Local Header Offset   0008C69F (575135)\n+656AA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656AA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656AFF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656B01   Length              0005 (5)\n+656B03   Flags               01 (1) 'Modification'\n+656B04   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656B08 CENTRAL HEADER #243   02014B50 (33639248)\n+656B0C Created Zip Spec      14 (20) '2.0'\n+656B0D Created OS            00 (0) 'MS-DOS'\n+656B0E Extract Zip Spec      14 (20) '2.0'\n+656B0F Extract OS            00 (0) 'MS-DOS'\n+656B10 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+656B12 Compression Method    0000 (0) 'Stored'\n+656B14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656B18 CRC                   F19E6303 (4053689091)\n+656B1C Compressed Size       00000ED8 (3800)\n+656B20 Uncompressed Size     00000ED8 (3800)\n+656B24 Filename Length       0074 (116)\n+656B26 Extra Length          0009 (9)\n+656B28 Comment Length        0000 (0)\n+656B2A Disk Start            0000 (0)\n+656B2C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656B2E Ext File Attributes   00000000 (0)\n+656B32 Local Header Offset   0008C724 (575268)\n+656B36 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656B36: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656BAA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656BAC   Length              0005 (5)\n+656BAE   Flags               01 (1) 'Modification'\n+656BAF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656BB3 CENTRAL HEADER #244   02014B50 (33639248)\n+656BB7 Created Zip Spec      14 (20) '2.0'\n+656BB8 Created OS            00 (0) 'MS-DOS'\n+656BB9 Extract Zip Spec      14 (20) '2.0'\n+656BBA Extract OS            00 (0) 'MS-DOS'\n+656BBB General Purpose Flag  0000 (0)\n+656BBD Compression Method    0000 (0) 'Stored'\n+656BBF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656BC3 CRC                   00000000 (0)\n+656BC7 Compressed Size       00000000 (0)\n+656BCB Uncompressed Size     00000000 (0)\n+656BCF Filename Length       0064 (100)\n+656BD1 Extra Length          0009 (9)\n+656BD3 Comment Length        0000 (0)\n+656BD5 Disk Start            0000 (0)\n+656BD7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656BD9 Ext File Attributes   00000000 (0)\n+656BDD Local Header Offset   0008D6A7 (579239)\n+656BE1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656BE1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656C45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656C47   Length              0005 (5)\n+656C49   Flags               01 (1) 'Modification'\n+656C4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656C4E CENTRAL HEADER #245   02014B50 (33639248)\n+656C52 Created Zip Spec      14 (20) '2.0'\n+656C53 Created OS            00 (0) 'MS-DOS'\n+656C54 Extract Zip Spec      14 (20) '2.0'\n+656C55 Extract OS            00 (0) 'MS-DOS'\n+656C56 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+656C58 Compression Method    0000 (0) 'Stored'\n+656C5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656C5E CRC                   51B4F745 (1370814277)\n+656C62 Compressed Size       000016D7 (5847)\n+656C66 Uncompressed Size     000016D7 (5847)\n+656C6A Filename Length       007A (122)\n+656C6C Extra Length          0009 (9)\n+656C6E Comment Length        0000 (0)\n+656C70 Disk Start            0000 (0)\n+656C72 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656C74 Ext File Attributes   00000000 (0)\n+656C78 Local Header Offset   0008D732 (579378)\n+656C7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656C7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656CF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656CF8   Length              0005 (5)\n+656CFA   Flags               01 (1) 'Modification'\n+656CFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656CFF CENTRAL HEADER #246   02014B50 (33639248)\n+656D03 Created Zip Spec      14 (20) '2.0'\n+656D04 Created OS            00 (0) 'MS-DOS'\n+656D05 Extract Zip Spec      14 (20) '2.0'\n+656D06 Extract OS            00 (0) 'MS-DOS'\n+656D07 General Purpose Flag  0000 (0)\n+656D09 Compression Method    0000 (0) 'Stored'\n+656D0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656D0F CRC                   00000000 (0)\n+656D13 Compressed Size       00000000 (0)\n+656D17 Uncompressed Size     00000000 (0)\n+656D1B Filename Length       0026 (38)\n+656D1D Extra Length          0009 (9)\n+656D1F Comment Length        0000 (0)\n+656D21 Disk Start            0000 (0)\n+656D23 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656D25 Ext File Attributes   00000000 (0)\n+656D29 Local Header Offset   0008EEBA (585402)\n+656D2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656D2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656D53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656D55   Length              0005 (5)\n+656D57   Flags               01 (1) 'Modification'\n+656D58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656D5C CENTRAL HEADER #247   02014B50 (33639248)\n+656D60 Created Zip Spec      14 (20) '2.0'\n+656D61 Created OS            00 (0) 'MS-DOS'\n+656D62 Extract Zip Spec      14 (20) '2.0'\n+656D63 Extract OS            00 (0) 'MS-DOS'\n+656D64 General Purpose Flag  0000 (0)\n+656D66 Compression Method    0000 (0) 'Stored'\n+656D68 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656D6C CRC                   00000000 (0)\n+656D70 Compressed Size       00000000 (0)\n+656D74 Uncompressed Size     00000000 (0)\n+656D78 Filename Length       002D (45)\n+656D7A Extra Length          0009 (9)\n+656D7C Comment Length        0000 (0)\n+656D7E Disk Start            0000 (0)\n+656D80 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656D82 Ext File Attributes   00000000 (0)\n+656D86 Local Header Offset   0008EF07 (585479)\n+656D8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656D8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656DB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656DB9   Length              0005 (5)\n+656DBB   Flags               01 (1) 'Modification'\n+656DBC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656DC0 CENTRAL HEADER #248   02014B50 (33639248)\n+656DC4 Created Zip Spec      14 (20) '2.0'\n+656DC5 Created OS            00 (0) 'MS-DOS'\n+656DC6 Extract Zip Spec      14 (20) '2.0'\n+656DC7 Extract OS            00 (0) 'MS-DOS'\n+656DC8 General Purpose Flag  0000 (0)\n+656DCA Compression Method    0000 (0) 'Stored'\n+656DCC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656DD0 CRC                   00000000 (0)\n+656DD4 Compressed Size       00000000 (0)\n+656DD8 Uncompressed Size     00000000 (0)\n+656DDC Filename Length       005C (92)\n+656DDE Extra Length          0009 (9)\n+656DE0 Comment Length        0000 (0)\n+656DE2 Disk Start            0000 (0)\n+656DE4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656DE6 Ext File Attributes   00000000 (0)\n+656DEA Local Header Offset   0008EF5B (585563)\n+656DEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656DEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656E4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656E4C   Length              0005 (5)\n+656E4E   Flags               01 (1) 'Modification'\n+656E4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656E53 CENTRAL HEADER #249   02014B50 (33639248)\n+656E57 Created Zip Spec      14 (20) '2.0'\n+656E58 Created OS            00 (0) 'MS-DOS'\n+656E59 Extract Zip Spec      14 (20) '2.0'\n+656E5A Extract OS            00 (0) 'MS-DOS'\n+656E5B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+656E5D Compression Method    0000 (0) 'Stored'\n+656E5F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656E63 CRC                   357DA477 (897426551)\n+656E67 Compressed Size       000006C6 (1734)\n+656E6B Uncompressed Size     000006C6 (1734)\n+656E6F Filename Length       0072 (114)\n+656E71 Extra Length          0009 (9)\n+656E73 Comment Length        0000 (0)\n+656E75 Disk Start            0000 (0)\n+656E77 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656E79 Ext File Attributes   00000000 (0)\n+656E7D Local Header Offset   0008EFDE (585694)\n+656E81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656E81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656EF3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656EF5   Length              0005 (5)\n+656EF7   Flags               01 (1) 'Modification'\n+656EF8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656EFC CENTRAL HEADER #250   02014B50 (33639248)\n+656F00 Created Zip Spec      14 (20) '2.0'\n+656F01 Created OS            00 (0) 'MS-DOS'\n+656F02 Extract Zip Spec      14 (20) '2.0'\n+656F03 Extract OS            00 (0) 'MS-DOS'\n+656F04 General Purpose Flag  0000 (0)\n+656F06 Compression Method    0000 (0) 'Stored'\n+656F08 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656F0C CRC                   00000000 (0)\n+656F10 Compressed Size       00000000 (0)\n+656F14 Uncompressed Size     00000000 (0)\n+656F18 Filename Length       0059 (89)\n+656F1A Extra Length          0009 (9)\n+656F1C Comment Length        0000 (0)\n+656F1E Disk Start            0000 (0)\n+656F20 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656F22 Ext File Attributes   00000000 (0)\n+656F26 Local Header Offset   0008F74D (587597)\n+656F2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656F2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+656F83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+656F85   Length              0005 (5)\n+656F87   Flags               01 (1) 'Modification'\n+656F88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+656F8C CENTRAL HEADER #251   02014B50 (33639248)\n+656F90 Created Zip Spec      14 (20) '2.0'\n+656F91 Created OS            00 (0) 'MS-DOS'\n+656F92 Extract Zip Spec      14 (20) '2.0'\n+656F93 Extract OS            00 (0) 'MS-DOS'\n+656F94 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+656F96 Compression Method    0000 (0) 'Stored'\n+656F98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+656F9C CRC                   F9CAC97B (4190816635)\n+656FA0 Compressed Size       000009BC (2492)\n+656FA4 Uncompressed Size     000009BC (2492)\n+656FA8 Filename Length       006F (111)\n+656FAA Extra Length          0009 (9)\n+656FAC Comment Length        0000 (0)\n+656FAE Disk Start            0000 (0)\n+656FB0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+656FB2 Ext File Attributes   00000000 (0)\n+656FB6 Local Header Offset   0008F7CD (587725)\n+656FBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x656FBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657029 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65702B   Length              0005 (5)\n+65702D   Flags               01 (1) 'Modification'\n+65702E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657032 CENTRAL HEADER #252   02014B50 (33639248)\n+657036 Created Zip Spec      14 (20) '2.0'\n+657037 Created OS            00 (0) 'MS-DOS'\n+657038 Extract Zip Spec      14 (20) '2.0'\n+657039 Extract OS            00 (0) 'MS-DOS'\n+65703A General Purpose Flag  0000 (0)\n+65703C Compression Method    0000 (0) 'Stored'\n+65703E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657042 CRC                   00000000 (0)\n+657046 Compressed Size       00000000 (0)\n+65704A Uncompressed Size     00000000 (0)\n+65704E Filename Length       005F (95)\n+657050 Extra Length          0009 (9)\n+657052 Comment Length        0000 (0)\n+657054 Disk Start            0000 (0)\n+657056 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657058 Ext File Attributes   00000000 (0)\n+65705C Local Header Offset   0009022F (590383)\n+657060 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657060: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6570BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6570C1   Length              0005 (5)\n+6570C3   Flags               01 (1) 'Modification'\n+6570C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6570C8 CENTRAL HEADER #253   02014B50 (33639248)\n+6570CC Created Zip Spec      14 (20) '2.0'\n+6570CD Created OS            00 (0) 'MS-DOS'\n+6570CE Extract Zip Spec      14 (20) '2.0'\n+6570CF Extract OS            00 (0) 'MS-DOS'\n+6570D0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6570D2 Compression Method    0000 (0) 'Stored'\n+6570D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6570D8 CRC                   9DEB8C8B (2649459851)\n+6570DC Compressed Size       00000A07 (2567)\n+6570E0 Uncompressed Size     00000A07 (2567)\n+6570E4 Filename Length       0075 (117)\n+6570E6 Extra Length          0009 (9)\n+6570E8 Comment Length        0000 (0)\n+6570EA Disk Start            0000 (0)\n+6570EC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6570EE Ext File Attributes   00000000 (0)\n+6570F2 Local Header Offset   000902B5 (590517)\n+6570F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6570F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65716B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65716D   Length              0005 (5)\n+65716F   Flags               01 (1) 'Modification'\n+657170   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657174 CENTRAL HEADER #254   02014B50 (33639248)\n+657178 Created Zip Spec      14 (20) '2.0'\n+657179 Created OS            00 (0) 'MS-DOS'\n+65717A Extract Zip Spec      14 (20) '2.0'\n+65717B Extract OS            00 (0) 'MS-DOS'\n+65717C General Purpose Flag  0000 (0)\n+65717E Compression Method    0000 (0) 'Stored'\n+657180 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657184 CRC                   00000000 (0)\n+657188 Compressed Size       00000000 (0)\n+65718C Uncompressed Size     00000000 (0)\n+657190 Filename Length       0059 (89)\n+657192 Extra Length          0009 (9)\n+657194 Comment Length        0000 (0)\n+657196 Disk Start            0000 (0)\n+657198 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65719A Ext File Attributes   00000000 (0)\n+65719E Local Header Offset   00090D68 (593256)\n+6571A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6571A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6571FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6571FD   Length              0005 (5)\n+6571FF   Flags               01 (1) 'Modification'\n+657200   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657204 CENTRAL HEADER #255   02014B50 (33639248)\n+657208 Created Zip Spec      14 (20) '2.0'\n+657209 Created OS            00 (0) 'MS-DOS'\n+65720A Extract Zip Spec      14 (20) '2.0'\n+65720B Extract OS            00 (0) 'MS-DOS'\n+65720C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65720E Compression Method    0000 (0) 'Stored'\n+657210 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657214 CRC                   85B17459 (2242999385)\n+657218 Compressed Size       00000DDE (3550)\n+65721C Uncompressed Size     00000DDE (3550)\n+657220 Filename Length       006F (111)\n+657222 Extra Length          0009 (9)\n+657224 Comment Length        0000 (0)\n+657226 Disk Start            0000 (0)\n+657228 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65722A Ext File Attributes   00000000 (0)\n+65722E Local Header Offset   00090DE8 (593384)\n+657232 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657232: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6572A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6572A3   Length              0005 (5)\n+6572A5   Flags               01 (1) 'Modification'\n+6572A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6572AA CENTRAL HEADER #256   02014B50 (33639248)\n+6572AE Created Zip Spec      14 (20) '2.0'\n+6572AF Created OS            00 (0) 'MS-DOS'\n+6572B0 Extract Zip Spec      14 (20) '2.0'\n+6572B1 Extract OS            00 (0) 'MS-DOS'\n+6572B2 General Purpose Flag  0000 (0)\n+6572B4 Compression Method    0000 (0) 'Stored'\n+6572B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6572BA CRC                   00000000 (0)\n+6572BE Compressed Size       00000000 (0)\n+6572C2 Uncompressed Size     00000000 (0)\n+6572C6 Filename Length       0064 (100)\n+6572C8 Extra Length          0009 (9)\n+6572CA Comment Length        0000 (0)\n+6572CC Disk Start            0000 (0)\n+6572CE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6572D0 Ext File Attributes   00000000 (0)\n+6572D4 Local Header Offset   00091C6C (597100)\n+6572D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6572D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65733C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65733E   Length              0005 (5)\n+657340   Flags               01 (1) 'Modification'\n+657341   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657345 CENTRAL HEADER #257   02014B50 (33639248)\n+657349 Created Zip Spec      14 (20) '2.0'\n+65734A Created OS            00 (0) 'MS-DOS'\n+65734B Extract Zip Spec      14 (20) '2.0'\n+65734C Extract OS            00 (0) 'MS-DOS'\n+65734D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65734F Compression Method    0000 (0) 'Stored'\n+657351 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657355 CRC                   9C229073 (2619510899)\n+657359 Compressed Size       000005CF (1487)\n+65735D Uncompressed Size     000005CF (1487)\n+657361 Filename Length       007A (122)\n+657363 Extra Length          0009 (9)\n+657365 Comment Length        0000 (0)\n+657367 Disk Start            0000 (0)\n+657369 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65736B Ext File Attributes   00000000 (0)\n+65736F Local Header Offset   00091CF7 (597239)\n+657373 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657373: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6573ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6573EF   Length              0005 (5)\n+6573F1   Flags               01 (1) 'Modification'\n+6573F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6573F6 CENTRAL HEADER #258   02014B50 (33639248)\n+6573FA Created Zip Spec      14 (20) '2.0'\n+6573FB Created OS            00 (0) 'MS-DOS'\n+6573FC Extract Zip Spec      14 (20) '2.0'\n+6573FD Extract OS            00 (0) 'MS-DOS'\n+6573FE General Purpose Flag  0000 (0)\n+657400 Compression Method    0000 (0) 'Stored'\n+657402 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657406 CRC                   00000000 (0)\n+65740A Compressed Size       00000000 (0)\n+65740E Uncompressed Size     00000000 (0)\n+657412 Filename Length       0064 (100)\n+657414 Extra Length          0009 (9)\n+657416 Comment Length        0000 (0)\n+657418 Disk Start            0000 (0)\n+65741A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65741C Ext File Attributes   00000000 (0)\n+657420 Local Header Offset   00092377 (598903)\n+657424 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657424: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657488 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65748A   Length              0005 (5)\n+65748C   Flags               01 (1) 'Modification'\n+65748D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657491 CENTRAL HEADER #259   02014B50 (33639248)\n+657495 Created Zip Spec      14 (20) '2.0'\n+657496 Created OS            00 (0) 'MS-DOS'\n+657497 Extract Zip Spec      14 (20) '2.0'\n+657498 Extract OS            00 (0) 'MS-DOS'\n+657499 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65749B Compression Method    0000 (0) 'Stored'\n+65749D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6574A1 CRC                   A57691CD (2776011213)\n+6574A5 Compressed Size       000005C2 (1474)\n+6574A9 Uncompressed Size     000005C2 (1474)\n+6574AD Filename Length       007A (122)\n+6574AF Extra Length          0009 (9)\n+6574B1 Comment Length        0000 (0)\n+6574B3 Disk Start            0000 (0)\n+6574B5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6574B7 Ext File Attributes   00000000 (0)\n+6574BB Local Header Offset   00092402 (599042)\n+6574BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6574BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657539 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65753B   Length              0005 (5)\n+65753D   Flags               01 (1) 'Modification'\n+65753E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657542 CENTRAL HEADER #260   02014B50 (33639248)\n+657546 Created Zip Spec      14 (20) '2.0'\n+657547 Created OS            00 (0) 'MS-DOS'\n+657548 Extract Zip Spec      14 (20) '2.0'\n+657549 Extract OS            00 (0) 'MS-DOS'\n+65754A General Purpose Flag  0000 (0)\n+65754C Compression Method    0000 (0) 'Stored'\n+65754E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657552 CRC                   00000000 (0)\n+657556 Compressed Size       00000000 (0)\n+65755A Uncompressed Size     00000000 (0)\n+65755E Filename Length       0063 (99)\n+657560 Extra Length          0009 (9)\n+657562 Comment Length        0000 (0)\n+657564 Disk Start            0000 (0)\n+657566 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657568 Ext File Attributes   00000000 (0)\n+65756C Local Header Offset   00092A75 (600693)\n+657570 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657570: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6575D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6575D5   Length              0005 (5)\n+6575D7   Flags               01 (1) 'Modification'\n+6575D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6575DC CENTRAL HEADER #261   02014B50 (33639248)\n+6575E0 Created Zip Spec      14 (20) '2.0'\n+6575E1 Created OS            00 (0) 'MS-DOS'\n+6575E2 Extract Zip Spec      14 (20) '2.0'\n+6575E3 Extract OS            00 (0) 'MS-DOS'\n+6575E4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6575E6 Compression Method    0000 (0) 'Stored'\n+6575E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6575EC CRC                   6CD31445 (1825772613)\n+6575F0 Compressed Size       0000073A (1850)\n+6575F4 Uncompressed Size     0000073A (1850)\n+6575F8 Filename Length       0079 (121)\n+6575FA Extra Length          0009 (9)\n+6575FC Comment Length        0000 (0)\n+6575FE Disk Start            0000 (0)\n+657600 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657602 Ext File Attributes   00000000 (0)\n+657606 Local Header Offset   00092AFF (600831)\n+65760A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65760A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657683 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657685   Length              0005 (5)\n+657687   Flags               01 (1) 'Modification'\n+657688   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65768C CENTRAL HEADER #262   02014B50 (33639248)\n+657690 Created Zip Spec      14 (20) '2.0'\n+657691 Created OS            00 (0) 'MS-DOS'\n+657692 Extract Zip Spec      14 (20) '2.0'\n+657693 Extract OS            00 (0) 'MS-DOS'\n+657694 General Purpose Flag  0000 (0)\n+657696 Compression Method    0000 (0) 'Stored'\n+657698 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65769C CRC                   00000000 (0)\n+6576A0 Compressed Size       00000000 (0)\n+6576A4 Uncompressed Size     00000000 (0)\n+6576A8 Filename Length       0061 (97)\n+6576AA Extra Length          0009 (9)\n+6576AC Comment Length        0000 (0)\n+6576AE Disk Start            0000 (0)\n+6576B0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6576B2 Ext File Attributes   00000000 (0)\n+6576B6 Local Header Offset   000932E9 (602857)\n+6576BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6576BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65771B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65771D   Length              0005 (5)\n+65771F   Flags               01 (1) 'Modification'\n+657720   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657724 CENTRAL HEADER #263   02014B50 (33639248)\n+657728 Created Zip Spec      14 (20) '2.0'\n+657729 Created OS            00 (0) 'MS-DOS'\n+65772A Extract Zip Spec      14 (20) '2.0'\n+65772B Extract OS            00 (0) 'MS-DOS'\n+65772C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65772E Compression Method    0000 (0) 'Stored'\n+657730 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657734 CRC                   C97DF8D6 (3380476118)\n+657738 Compressed Size       00000A92 (2706)\n+65773C Uncompressed Size     00000A92 (2706)\n+657740 Filename Length       0077 (119)\n+657742 Extra Length          0009 (9)\n+657744 Comment Length        0000 (0)\n+657746 Disk Start            0000 (0)\n+657748 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65774A Ext File Attributes   00000000 (0)\n+65774E Local Header Offset   00093371 (602993)\n+657752 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657752: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6577C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6577CB   Length              0005 (5)\n+6577CD   Flags               01 (1) 'Modification'\n+6577CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6577D2 CENTRAL HEADER #264   02014B50 (33639248)\n+6577D6 Created Zip Spec      14 (20) '2.0'\n+6577D7 Created OS            00 (0) 'MS-DOS'\n+6577D8 Extract Zip Spec      14 (20) '2.0'\n+6577D9 Extract OS            00 (0) 'MS-DOS'\n+6577DA General Purpose Flag  0000 (0)\n+6577DC Compression Method    0000 (0) 'Stored'\n+6577DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6577E2 CRC                   00000000 (0)\n+6577E6 Compressed Size       00000000 (0)\n+6577EA Uncompressed Size     00000000 (0)\n+6577EE Filename Length       0023 (35)\n+6577F0 Extra Length          0009 (9)\n+6577F2 Comment Length        0000 (0)\n+6577F4 Disk Start            0000 (0)\n+6577F6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6577F8 Ext File Attributes   00000000 (0)\n+6577FC Local Header Offset   00093EB1 (605873)\n+657800 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657800: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657823 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657825   Length              0005 (5)\n+657827   Flags               01 (1) 'Modification'\n+657828   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65782C CENTRAL HEADER #265   02014B50 (33639248)\n+657830 Created Zip Spec      14 (20) '2.0'\n+657831 Created OS            00 (0) 'MS-DOS'\n+657832 Extract Zip Spec      14 (20) '2.0'\n+657833 Extract OS            00 (0) 'MS-DOS'\n+657834 General Purpose Flag  0000 (0)\n+657836 Compression Method    0000 (0) 'Stored'\n+657838 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65783C CRC                   00000000 (0)\n+657840 Compressed Size       00000000 (0)\n+657844 Uncompressed Size     00000000 (0)\n+657848 Filename Length       002A (42)\n+65784A Extra Length          0009 (9)\n+65784C Comment Length        0000 (0)\n+65784E Disk Start            0000 (0)\n+657850 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657852 Ext File Attributes   00000000 (0)\n+657856 Local Header Offset   00093EFB (605947)\n+65785A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65785A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657884 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657886   Length              0005 (5)\n+657888   Flags               01 (1) 'Modification'\n+657889   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65788D CENTRAL HEADER #266   02014B50 (33639248)\n+657891 Created Zip Spec      14 (20) '2.0'\n+657892 Created OS            00 (0) 'MS-DOS'\n+657893 Extract Zip Spec      14 (20) '2.0'\n+657894 Extract OS            00 (0) 'MS-DOS'\n+657895 General Purpose Flag  0000 (0)\n+657897 Compression Method    0000 (0) 'Stored'\n+657899 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65789D CRC                   00000000 (0)\n+6578A1 Compressed Size       00000000 (0)\n+6578A5 Uncompressed Size     00000000 (0)\n+6578A9 Filename Length       0056 (86)\n+6578AB Extra Length          0009 (9)\n+6578AD Comment Length        0000 (0)\n+6578AF Disk Start            0000 (0)\n+6578B1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6578B3 Ext File Attributes   00000000 (0)\n+6578B7 Local Header Offset   00093F4C (606028)\n+6578BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6578BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657911 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657913   Length              0005 (5)\n+657915   Flags               01 (1) 'Modification'\n+657916   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65791A CENTRAL HEADER #267   02014B50 (33639248)\n+65791E Created Zip Spec      14 (20) '2.0'\n+65791F Created OS            00 (0) 'MS-DOS'\n+657920 Extract Zip Spec      14 (20) '2.0'\n+657921 Extract OS            00 (0) 'MS-DOS'\n+657922 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+657924 Compression Method    0000 (0) 'Stored'\n+657926 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65792A CRC                   0B04A112 (184852754)\n+65792E Compressed Size       00000795 (1941)\n+657932 Uncompressed Size     00000795 (1941)\n+657936 Filename Length       006C (108)\n+657938 Extra Length          0009 (9)\n+65793A Comment Length        0000 (0)\n+65793C Disk Start            0000 (0)\n+65793E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657940 Ext File Attributes   00000000 (0)\n+657944 Local Header Offset   00093FC9 (606153)\n+657948 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657948: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6579B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6579B6   Length              0005 (5)\n+6579B8   Flags               01 (1) 'Modification'\n+6579B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6579BD CENTRAL HEADER #268   02014B50 (33639248)\n+6579C1 Created Zip Spec      14 (20) '2.0'\n+6579C2 Created OS            00 (0) 'MS-DOS'\n+6579C3 Extract Zip Spec      14 (20) '2.0'\n+6579C4 Extract OS            00 (0) 'MS-DOS'\n+6579C5 General Purpose Flag  0000 (0)\n+6579C7 Compression Method    0000 (0) 'Stored'\n+6579C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6579CD CRC                   00000000 (0)\n+6579D1 Compressed Size       00000000 (0)\n+6579D5 Uncompressed Size     00000000 (0)\n+6579D9 Filename Length       0031 (49)\n+6579DB Extra Length          0009 (9)\n+6579DD Comment Length        0000 (0)\n+6579DF Disk Start            0000 (0)\n+6579E1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6579E3 Ext File Attributes   00000000 (0)\n+6579E7 Local Header Offset   00094801 (608257)\n+6579EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6579EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657A1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657A1E   Length              0005 (5)\n+657A20   Flags               01 (1) 'Modification'\n+657A21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657A25 CENTRAL HEADER #269   02014B50 (33639248)\n+657A29 Created Zip Spec      14 (20) '2.0'\n+657A2A Created OS            00 (0) 'MS-DOS'\n+657A2B Extract Zip Spec      14 (20) '2.0'\n+657A2C Extract OS            00 (0) 'MS-DOS'\n+657A2D General Purpose Flag  0000 (0)\n+657A2F Compression Method    0000 (0) 'Stored'\n+657A31 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657A35 CRC                   00000000 (0)\n+657A39 Compressed Size       00000000 (0)\n+657A3D Uncompressed Size     00000000 (0)\n+657A41 Filename Length       0038 (56)\n+657A43 Extra Length          0009 (9)\n+657A45 Comment Length        0000 (0)\n+657A47 Disk Start            0000 (0)\n+657A49 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657A4B Ext File Attributes   00000000 (0)\n+657A4F Local Header Offset   00094859 (608345)\n+657A53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657A53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657A8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657A8D   Length              0005 (5)\n+657A8F   Flags               01 (1) 'Modification'\n+657A90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657A94 CENTRAL HEADER #270   02014B50 (33639248)\n+657A98 Created Zip Spec      14 (20) '2.0'\n+657A99 Created OS            00 (0) 'MS-DOS'\n+657A9A Extract Zip Spec      14 (20) '2.0'\n+657A9B Extract OS            00 (0) 'MS-DOS'\n+657A9C General Purpose Flag  0000 (0)\n+657A9E Compression Method    0000 (0) 'Stored'\n+657AA0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657AA4 CRC                   00000000 (0)\n+657AA8 Compressed Size       00000000 (0)\n+657AAC Uncompressed Size     00000000 (0)\n+657AB0 Filename Length       006A (106)\n+657AB2 Extra Length          0009 (9)\n+657AB4 Comment Length        0000 (0)\n+657AB6 Disk Start            0000 (0)\n+657AB8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657ABA Ext File Attributes   00000000 (0)\n+657ABE Local Header Offset   000948B8 (608440)\n+657AC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657AC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657B2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657B2E   Length              0005 (5)\n+657B30   Flags               01 (1) 'Modification'\n+657B31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657B35 CENTRAL HEADER #271   02014B50 (33639248)\n+657B39 Created Zip Spec      14 (20) '2.0'\n+657B3A Created OS            00 (0) 'MS-DOS'\n+657B3B Extract Zip Spec      14 (20) '2.0'\n+657B3C Extract OS            00 (0) 'MS-DOS'\n+657B3D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+657B3F Compression Method    0000 (0) 'Stored'\n+657B41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657B45 CRC                   9A51A289 (2589041289)\n+657B49 Compressed Size       000008AB (2219)\n+657B4D Uncompressed Size     000008AB (2219)\n+657B51 Filename Length       0080 (128)\n+657B53 Extra Length          0009 (9)\n+657B55 Comment Length        0000 (0)\n+657B57 Disk Start            0000 (0)\n+657B59 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657B5B Ext File Attributes   00000000 (0)\n+657B5F Local Header Offset   00094949 (608585)\n+657B63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657B63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657BE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657BE5   Length              0005 (5)\n+657BE7   Flags               01 (1) 'Modification'\n+657BE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657BEC CENTRAL HEADER #272   02014B50 (33639248)\n+657BF0 Created Zip Spec      14 (20) '2.0'\n+657BF1 Created OS            00 (0) 'MS-DOS'\n+657BF2 Extract Zip Spec      14 (20) '2.0'\n+657BF3 Extract OS            00 (0) 'MS-DOS'\n+657BF4 General Purpose Flag  0000 (0)\n+657BF6 Compression Method    0000 (0) 'Stored'\n+657BF8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657BFC CRC                   00000000 (0)\n+657C00 Compressed Size       00000000 (0)\n+657C04 Uncompressed Size     00000000 (0)\n+657C08 Filename Length       0022 (34)\n+657C0A Extra Length          0009 (9)\n+657C0C Comment Length        0000 (0)\n+657C0E Disk Start            0000 (0)\n+657C10 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657C12 Ext File Attributes   00000000 (0)\n+657C16 Local Header Offset   000952AB (610987)\n+657C1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657C1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657C3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657C3E   Length              0005 (5)\n+657C40   Flags               01 (1) 'Modification'\n+657C41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657C45 CENTRAL HEADER #273   02014B50 (33639248)\n+657C49 Created Zip Spec      14 (20) '2.0'\n+657C4A Created OS            00 (0) 'MS-DOS'\n+657C4B Extract Zip Spec      14 (20) '2.0'\n+657C4C Extract OS            00 (0) 'MS-DOS'\n+657C4D General Purpose Flag  0000 (0)\n+657C4F Compression Method    0000 (0) 'Stored'\n+657C51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657C55 CRC                   00000000 (0)\n+657C59 Compressed Size       00000000 (0)\n+657C5D Uncompressed Size     00000000 (0)\n+657C61 Filename Length       0029 (41)\n+657C63 Extra Length          0009 (9)\n+657C65 Comment Length        0000 (0)\n+657C67 Disk Start            0000 (0)\n+657C69 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657C6B Ext File Attributes   00000000 (0)\n+657C6F Local Header Offset   000952F4 (611060)\n+657C73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657C73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657C9C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657C9E   Length              0005 (5)\n+657CA0   Flags               01 (1) 'Modification'\n+657CA1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657CA5 CENTRAL HEADER #274   02014B50 (33639248)\n+657CA9 Created Zip Spec      14 (20) '2.0'\n+657CAA Created OS            00 (0) 'MS-DOS'\n+657CAB Extract Zip Spec      14 (20) '2.0'\n+657CAC Extract OS            00 (0) 'MS-DOS'\n+657CAD General Purpose Flag  0000 (0)\n+657CAF Compression Method    0000 (0) 'Stored'\n+657CB1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657CB5 CRC                   00000000 (0)\n+657CB9 Compressed Size       00000000 (0)\n+657CBD Uncompressed Size     00000000 (0)\n+657CC1 Filename Length       004B (75)\n+657CC3 Extra Length          0009 (9)\n+657CC5 Comment Length        0000 (0)\n+657CC7 Disk Start            0000 (0)\n+657CC9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657CCB Ext File Attributes   00000000 (0)\n+657CCF Local Header Offset   00095344 (611140)\n+657CD3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657CD3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657D1E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657D20   Length              0005 (5)\n+657D22   Flags               01 (1) 'Modification'\n+657D23   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657D27 CENTRAL HEADER #275   02014B50 (33639248)\n+657D2B Created Zip Spec      14 (20) '2.0'\n+657D2C Created OS            00 (0) 'MS-DOS'\n+657D2D Extract Zip Spec      14 (20) '2.0'\n+657D2E Extract OS            00 (0) 'MS-DOS'\n+657D2F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+657D31 Compression Method    0000 (0) 'Stored'\n+657D33 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657D37 CRC                   BEAE3D9C (3199090076)\n+657D3B Compressed Size       0000396F (14703)\n+657D3F Uncompressed Size     0000396F (14703)\n+657D43 Filename Length       0061 (97)\n+657D45 Extra Length          0009 (9)\n+657D47 Comment Length        0000 (0)\n+657D49 Disk Start            0000 (0)\n+657D4B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657D4D Ext File Attributes   00000000 (0)\n+657D51 Local Header Offset   000953B6 (611254)\n+657D55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657D55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657DB6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657DB8   Length              0005 (5)\n+657DBA   Flags               01 (1) 'Modification'\n+657DBB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657DBF CENTRAL HEADER #276   02014B50 (33639248)\n+657DC3 Created Zip Spec      14 (20) '2.0'\n+657DC4 Created OS            00 (0) 'MS-DOS'\n+657DC5 Extract Zip Spec      14 (20) '2.0'\n+657DC6 Extract OS            00 (0) 'MS-DOS'\n+657DC7 General Purpose Flag  0000 (0)\n+657DC9 Compression Method    0000 (0) 'Stored'\n+657DCB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657DCF CRC                   00000000 (0)\n+657DD3 Compressed Size       00000000 (0)\n+657DD7 Uncompressed Size     00000000 (0)\n+657DDB Filename Length       0063 (99)\n+657DDD Extra Length          0009 (9)\n+657DDF Comment Length        0000 (0)\n+657DE1 Disk Start            0000 (0)\n+657DE3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657DE5 Ext File Attributes   00000000 (0)\n+657DE9 Local Header Offset   00098DBD (626109)\n+657DED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657DED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657E50 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657E52   Length              0005 (5)\n+657E54   Flags               01 (1) 'Modification'\n+657E55   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657E59 CENTRAL HEADER #277   02014B50 (33639248)\n+657E5D Created Zip Spec      14 (20) '2.0'\n+657E5E Created OS            00 (0) 'MS-DOS'\n+657E5F Extract Zip Spec      14 (20) '2.0'\n+657E60 Extract OS            00 (0) 'MS-DOS'\n+657E61 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+657E63 Compression Method    0000 (0) 'Stored'\n+657E65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657E69 CRC                   28034B81 (671304577)\n+657E6D Compressed Size       00000E44 (3652)\n+657E71 Uncompressed Size     00000E44 (3652)\n+657E75 Filename Length       0079 (121)\n+657E77 Extra Length          0009 (9)\n+657E79 Comment Length        0000 (0)\n+657E7B Disk Start            0000 (0)\n+657E7D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657E7F Ext File Attributes   00000000 (0)\n+657E83 Local Header Offset   00098E47 (626247)\n+657E87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657E87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657F00 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657F02   Length              0005 (5)\n+657F04   Flags               01 (1) 'Modification'\n+657F05   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657F09 CENTRAL HEADER #278   02014B50 (33639248)\n+657F0D Created Zip Spec      14 (20) '2.0'\n+657F0E Created OS            00 (0) 'MS-DOS'\n+657F0F Extract Zip Spec      14 (20) '2.0'\n+657F10 Extract OS            00 (0) 'MS-DOS'\n+657F11 General Purpose Flag  0000 (0)\n+657F13 Compression Method    0000 (0) 'Stored'\n+657F15 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657F19 CRC                   00000000 (0)\n+657F1D Compressed Size       00000000 (0)\n+657F21 Uncompressed Size     00000000 (0)\n+657F25 Filename Length       0030 (48)\n+657F27 Extra Length          0009 (9)\n+657F29 Comment Length        0000 (0)\n+657F2B Disk Start            0000 (0)\n+657F2D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657F2F Ext File Attributes   00000000 (0)\n+657F33 Local Header Offset   00099D3B (630075)\n+657F37 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657F37: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657F67 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657F69   Length              0005 (5)\n+657F6B   Flags               01 (1) 'Modification'\n+657F6C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657F70 CENTRAL HEADER #279   02014B50 (33639248)\n+657F74 Created Zip Spec      14 (20) '2.0'\n+657F75 Created OS            00 (0) 'MS-DOS'\n+657F76 Extract Zip Spec      14 (20) '2.0'\n+657F77 Extract OS            00 (0) 'MS-DOS'\n+657F78 General Purpose Flag  0000 (0)\n+657F7A Compression Method    0000 (0) 'Stored'\n+657F7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657F80 CRC                   00000000 (0)\n+657F84 Compressed Size       00000000 (0)\n+657F88 Uncompressed Size     00000000 (0)\n+657F8C Filename Length       0037 (55)\n+657F8E Extra Length          0009 (9)\n+657F90 Comment Length        0000 (0)\n+657F92 Disk Start            0000 (0)\n+657F94 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+657F96 Ext File Attributes   00000000 (0)\n+657F9A Local Header Offset   00099D92 (630162)\n+657F9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x657F9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+657FD5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+657FD7   Length              0005 (5)\n+657FD9   Flags               01 (1) 'Modification'\n+657FDA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+657FDE CENTRAL HEADER #280   02014B50 (33639248)\n+657FE2 Created Zip Spec      14 (20) '2.0'\n+657FE3 Created OS            00 (0) 'MS-DOS'\n+657FE4 Extract Zip Spec      14 (20) '2.0'\n+657FE5 Extract OS            00 (0) 'MS-DOS'\n+657FE6 General Purpose Flag  0000 (0)\n+657FE8 Compression Method    0000 (0) 'Stored'\n+657FEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+657FEE CRC                   00000000 (0)\n+657FF2 Compressed Size       00000000 (0)\n+657FF6 Uncompressed Size     00000000 (0)\n+657FFA Filename Length       0068 (104)\n+657FFC Extra Length          0009 (9)\n+657FFE Comment Length        0000 (0)\n+658000 Disk Start            0000 (0)\n+658002 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+658004 Ext File Attributes   00000000 (0)\n+658008 Local Header Offset   00099DF0 (630256)\n+65800C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65800C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+658074 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+658076   Length              0005 (5)\n+658078   Flags               01 (1) 'Modification'\n+658079   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65807D CENTRAL HEADER #281   02014B50 (33639248)\n+658081 Created Zip Spec      14 (20) '2.0'\n+658082 Created OS            00 (0) 'MS-DOS'\n+658083 Extract Zip Spec      14 (20) '2.0'\n+658084 Extract OS            00 (0) 'MS-DOS'\n+658085 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+658087 Compression Method    0000 (0) 'Stored'\n+658089 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65808D CRC                   29D620BA (701898938)\n+658091 Compressed Size       00002421 (9249)\n+658095 Uncompressed Size     00002421 (9249)\n+658099 Filename Length       007E (126)\n+65809B Extra Length          0009 (9)\n+65809D Comment Length        0000 (0)\n+65809F Disk Start            0000 (0)\n+6580A1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6580A3 Ext File Attributes   00000000 (0)\n+6580A7 Local Header Offset   00099E7F (630399)\n+6580AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6580AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+658129 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65812B   Length              0005 (5)\n+65812D   Flags               01 (1) 'Modification'\n+65812E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+658132 CENTRAL HEADER #282   02014B50 (33639248)\n+658136 Created Zip Spec      14 (20) '2.0'\n+658137 Created OS            00 (0) 'MS-DOS'\n+658138 Extract Zip Spec      14 (20) '2.0'\n+658139 Extract OS            00 (0) 'MS-DOS'\n+65813A General Purpose Flag  0000 (0)\n+65813C Compression Method    0000 (0) 'Stored'\n+65813E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+658142 CRC                   00000000 (0)\n+658146 Compressed Size       00000000 (0)\n+65814A Uncompressed Size     00000000 (0)\n+65814E Filename Length       003C (60)\n+658150 Extra Length          0009 (9)\n+658152 Comment Length        0000 (0)\n+658154 Disk Start            0000 (0)\n+658156 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+658158 Ext File Attributes   00000000 (0)\n+65815C Local Header Offset   0009C355 (639829)\n+658160 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x658160: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65819C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65819E   Length              0005 (5)\n+6581A0   Flags               01 (1) 'Modification'\n+6581A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6581A5 CENTRAL HEADER #283   02014B50 (33639248)\n+6581A9 Created Zip Spec      14 (20) '2.0'\n+6581AA Created OS            00 (0) 'MS-DOS'\n+6581AB Extract Zip Spec      14 (20) '2.0'\n+6581AC Extract OS            00 (0) 'MS-DOS'\n+6581AD General Purpose Flag  0000 (0)\n+6581AF Compression Method    0000 (0) 'Stored'\n+6581B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6581B5 CRC                   00000000 (0)\n+6581B9 Compressed Size       00000000 (0)\n+6581BD Uncompressed Size     00000000 (0)\n+6581C1 Filename Length       0043 (67)\n+6581C3 Extra Length          0009 (9)\n+6581C5 Comment Length        0000 (0)\n+6581C7 Disk Start            0000 (0)\n+6581C9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6581CB Ext File Attributes   00000000 (0)\n+6581CF Local Header Offset   0009C3B8 (639928)\n+6581D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6581D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+658216 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+658218   Length              0005 (5)\n+65821A   Flags               01 (1) 'Modification'\n+65821B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65821F CENTRAL HEADER #284   02014B50 (33639248)\n+658223 Created Zip Spec      14 (20) '2.0'\n+658224 Created OS            00 (0) 'MS-DOS'\n+658225 Extract Zip Spec      14 (20) '2.0'\n+658226 Extract OS            00 (0) 'MS-DOS'\n+658227 General Purpose Flag  0000 (0)\n+658229 Compression Method    0000 (0) 'Stored'\n+65822B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65822F CRC                   00000000 (0)\n+658233 Compressed Size       00000000 (0)\n+658237 Uncompressed Size     00000000 (0)\n+65823B Filename Length       0061 (97)\n+65823D Extra Length          0009 (9)\n+65823F Comment Length        0000 (0)\n+658241 Disk Start            0000 (0)\n+658243 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+658245 Ext File Attributes   00000000 (0)\n+658249 Local Header Offset   0009C422 (640034)\n+65824D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65824D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6582AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6582B0   Length              0005 (5)\n+6582B2   Flags               01 (1) 'Modification'\n+6582B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6582B7 CENTRAL HEADER #285   02014B50 (33639248)\n+6582BB Created Zip Spec      14 (20) '2.0'\n+6582BC Created OS            00 (0) 'MS-DOS'\n+6582BD Extract Zip Spec      14 (20) '2.0'\n+6582BE Extract OS            00 (0) 'MS-DOS'\n+6582BF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6582C1 Compression Method    0000 (0) 'Stored'\n+6582C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6582C7 CRC                   9ED7BE90 (2664939152)\n+6582CB Compressed Size       000036E7 (14055)\n+6582CF Uncompressed Size     000036E7 (14055)\n+6582D3 Filename Length       0077 (119)\n+6582D5 Extra Length          0009 (9)\n+6582D7 Comment Length        0000 (0)\n+6582D9 Disk Start            0000 (0)\n+6582DB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6582DD Ext File Attributes   00000000 (0)\n+6582E1 Local Header Offset   0009C4AA (640170)\n+6582E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6582E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65835C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65835E   Length              0005 (5)\n+658360   Flags               01 (1) 'Modification'\n+658361   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+658365 CENTRAL HEADER #286   02014B50 (33639248)\n+658369 Created Zip Spec      14 (20) '2.0'\n+65836A Created OS            00 (0) 'MS-DOS'\n+65836B Extract Zip Spec      14 (20) '2.0'\n+65836C Extract OS            00 (0) 'MS-DOS'\n+65836D General Purpose Flag  0000 (0)\n+65836F Compression Method    0000 (0) 'Stored'\n+658371 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+658375 CRC                   00000000 (0)\n+658379 Compressed Size       00000000 (0)\n+65837D Uncompressed Size     00000000 (0)\n+658381 Filename Length       0061 (97)\n+658383 Extra Length          0009 (9)\n+658385 Comment Length        0000 (0)\n+658387 Disk Start            0000 (0)\n+658389 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65838B Ext File Attributes   00000000 (0)\n+65838F Local Header Offset   0009FC3F (654399)\n+658393 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x658393: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6583F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6583F6   Length              0005 (5)\n+6583F8   Flags               01 (1) 'Modification'\n+6583F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6583FD CENTRAL HEADER #287   02014B50 (33639248)\n+658401 Created Zip Spec      14 (20) '2.0'\n+658402 Created OS            00 (0) 'MS-DOS'\n+658403 Extract Zip Spec      14 (20) '2.0'\n+658404 Extract OS            00 (0) 'MS-DOS'\n+658405 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+658407 Compression Method    0000 (0) 'Stored'\n+658409 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65840D CRC                   B51FDD91 (3038764433)\n+658411 Compressed Size       00004792 (18322)\n+658415 Uncompressed Size     00004792 (18322)\n+658419 Filename Length       0077 (119)\n+65841B Extra Length          0009 (9)\n+65841D Comment Length        0000 (0)\n+65841F Disk Start            0000 (0)\n+658421 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+658423 Ext File Attributes   00000000 (0)\n+658427 Local Header Offset   0009FCC7 (654535)\n+65842B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65842B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6584A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6584A4   Length              0005 (5)\n+6584A6   Flags               01 (1) 'Modification'\n+6584A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6584AB CENTRAL HEADER #288   02014B50 (33639248)\n+6584AF Created Zip Spec      14 (20) '2.0'\n+6584B0 Created OS            00 (0) 'MS-DOS'\n+6584B1 Extract Zip Spec      14 (20) '2.0'\n+6584B2 Extract OS            00 (0) 'MS-DOS'\n+6584B3 General Purpose Flag  0000 (0)\n+6584B5 Compression Method    0000 (0) 'Stored'\n+6584B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6584BB CRC                   00000000 (0)\n+6584BF Compressed Size       00000000 (0)\n+6584C3 Uncompressed Size     00000000 (0)\n+6584C7 Filename Length       0063 (99)\n+6584C9 Extra Length          0009 (9)\n+6584CB Comment Length        0000 (0)\n+6584CD Disk Start            0000 (0)\n+6584CF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6584D1 Ext File Attributes   00000000 (0)\n+6584D5 Local Header Offset   000A4507 (673031)\n+6584D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6584D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65853C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65853E   Length              0005 (5)\n+658540   Flags               01 (1) 'Modification'\n+658541   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+658545 CENTRAL HEADER #289   02014B50 (33639248)\n+658549 Created Zip Spec      14 (20) '2.0'\n+65854A Created OS            00 (0) 'MS-DOS'\n+65854B Extract Zip Spec      14 (20) '2.0'\n+65854C Extract OS            00 (0) 'MS-DOS'\n+65854D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65854F Compression Method    0000 (0) 'Stored'\n+658551 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+658555 CRC                   27CFA48B (667919499)\n+658559 Compressed Size       00005DDC (24028)\n+65855D Uncompressed Size     00005DDC (24028)\n+658561 Filename Length       0079 (121)\n+658563 Extra Length          0009 (9)\n+658565 Comment Length        0000 (0)\n+658567 Disk Start            0000 (0)\n+658569 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65856B Ext File Attributes   00000000 (0)\n+65856F Local Header Offset   000A4591 (673169)\n+658573 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x658573: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6585EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6585EE   Length              0005 (5)\n+6585F0   Flags               01 (1) 'Modification'\n+6585F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6585F5 CENTRAL HEADER #290   02014B50 (33639248)\n+6585F9 Created Zip Spec      14 (20) '2.0'\n+6585FA Created OS            00 (0) 'MS-DOS'\n+6585FB Extract Zip Spec      14 (20) '2.0'\n+6585FC Extract OS            00 (0) 'MS-DOS'\n+6585FD General Purpose Flag  0000 (0)\n+6585FF Compression Method    0000 (0) 'Stored'\n+658601 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+658605 CRC                   00000000 (0)\n+658609 Compressed Size       00000000 (0)\n+65860D Uncompressed Size     00000000 (0)\n+658611 Filename Length       0067 (103)\n+658613 Extra Length          0009 (9)\n+658615 Comment Length        0000 (0)\n+658617 Disk Start            0000 (0)\n+658619 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65861B Ext File Attributes   00000000 (0)\n+65861F Local Header Offset   000AA41D (697373)\n+658623 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x658623: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65868A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65868C   Length              0005 (5)\n+65868E   Flags               01 (1) 'Modification'\n+65868F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+658693 CENTRAL HEADER #291   02014B50 (33639248)\n+658697 Created Zip Spec      14 (20) '2.0'\n+658698 Created OS            00 (0) 'MS-DOS'\n+658699 Extract Zip Spec      14 (20) '2.0'\n+65869A Extract OS            00 (0) 'MS-DOS'\n+65869B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65869D Compression Method    0000 (0) 'Stored'\n+65869F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6586A3 CRC                   620AB78F (1644869519)\n+6586A7 Compressed Size       00003B3A (15162)\n+6586AB Uncompressed Size     00003B3A (15162)\n+6586AF Filename Length       007D (125)\n+6586B1 Extra Length          0009 (9)\n+6586B3 Comment Length        0000 (0)\n+6586B5 Disk Start            0000 (0)\n+6586B7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6586B9 Ext File Attributes   00000000 (0)\n+6586BD Local Header Offset   000AA4AB (697515)\n+6586C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6586C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65873E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+658740   Length              0005 (5)\n+658742   Flags               01 (1) 'Modification'\n+658743   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+658747 CENTRAL HEADER #292   02014B50 (33639248)\n+65874B Created Zip Spec      14 (20) '2.0'\n+65874C Created OS            00 (0) 'MS-DOS'\n+65874D Extract Zip Spec      14 (20) '2.0'\n+65874E Extract OS            00 (0) 'MS-DOS'\n+65874F General Purpose Flag  0000 (0)\n+658751 Compression Method    0000 (0) 'Stored'\n+658753 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+658757 CRC                   00000000 (0)\n+65875B Compressed Size       00000000 (0)\n+65875F Uncompressed Size     00000000 (0)\n+658763 Filename Length       0067 (103)\n+658765 Extra Length          0009 (9)\n+658767 Comment Length        0000 (0)\n+658769 Disk Start            0000 (0)\n+65876B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65876D Ext File Attributes   00000000 (0)\n+658771 Local Header Offset   000AE099 (712857)\n+658775 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x658775: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6587DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6587DE   Length              0005 (5)\n+6587E0   Flags               01 (1) 'Modification'\n+6587E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6587E5 CENTRAL HEADER #293   02014B50 (33639248)\n+6587E9 Created Zip Spec      14 (20) '2.0'\n+6587EA Created OS            00 (0) 'MS-DOS'\n+6587EB Extract Zip Spec      14 (20) '2.0'\n+6587EC Extract OS            00 (0) 'MS-DOS'\n+6587ED General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6587EF Compression Method    0000 (0) 'Stored'\n+6587F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6587F5 CRC                   937A07E6 (2474248166)\n+6587F9 Compressed Size       00004869 (18537)\n+6587FD Uncompressed Size     00004869 (18537)\n+658801 Filename Length       007D (125)\n+658803 Extra Length          0009 (9)\n+658805 Comment Length        0000 (0)\n+658807 Disk Start            0000 (0)\n+658809 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65880B Ext File Attributes   00000000 (0)\n+65880F Local Header Offset   000AE127 (712999)\n+658813 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x658813: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+658890 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+658892   Length              0005 (5)\n+658894   Flags               01 (1) 'Modification'\n+658895   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+658899 CENTRAL HEADER #294   02014B50 (33639248)\n+65889D Created Zip Spec      14 (20) '2.0'\n+65889E Created OS            00 (0) 'MS-DOS'\n+65889F Extract Zip Spec      14 (20) '2.0'\n+6588A0 Extract OS            00 (0) 'MS-DOS'\n+6588A1 General Purpose Flag  0000 (0)\n+6588A3 Compression Method    0000 (0) 'Stored'\n+6588A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6588A9 CRC                   00000000 (0)\n+6588AD Compressed Size       00000000 (0)\n+6588B1 Uncompressed Size     00000000 (0)\n+6588B5 Filename Length       006B (107)\n+6588B7 Extra Length          0009 (9)\n+6588B9 Comment Length        0000 (0)\n+6588BB Disk Start            0000 (0)\n+6588BD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6588BF Ext File Attributes   00000000 (0)\n+6588C3 Local Header Offset   000B2A44 (731716)\n+6588C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6588C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+658932 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+658934   Length              0005 (5)\n+658936   Flags               01 (1) 'Modification'\n+658937   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65893B CENTRAL HEADER #295   02014B50 (33639248)\n+65893F Created Zip Spec      14 (20) '2.0'\n+658940 Created OS            00 (0) 'MS-DOS'\n+658941 Extract Zip Spec      14 (20) '2.0'\n+658942 Extract OS            00 (0) 'MS-DOS'\n+658943 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+658945 Compression Method    0000 (0) 'Stored'\n+658947 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65894B CRC                   53DFF1D7 (1407185367)\n+65894F Compressed Size       00000ADF (2783)\n+658953 Uncompressed Size     00000ADF (2783)\n+658957 Filename Length       0081 (129)\n+658959 Extra Length          0009 (9)\n+65895B Comment Length        0000 (0)\n+65895D Disk Start            0000 (0)\n+65895F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+658961 Ext File Attributes   00000000 (0)\n+658965 Local Header Offset   000B2AD6 (731862)\n+658969 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x658969: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6589EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6589EC   Length              0005 (5)\n+6589EE   Flags               01 (1) 'Modification'\n+6589EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6589F3 CENTRAL HEADER #296   02014B50 (33639248)\n+6589F7 Created Zip Spec      14 (20) '2.0'\n+6589F8 Created OS            00 (0) 'MS-DOS'\n+6589F9 Extract Zip Spec      14 (20) '2.0'\n+6589FA Extract OS            00 (0) 'MS-DOS'\n+6589FB General Purpose Flag  0000 (0)\n+6589FD Compression Method    0000 (0) 'Stored'\n+6589FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+658A03 CRC                   00000000 (0)\n+658A07 Compressed Size       00000000 (0)\n+658A0B Uncompressed Size     00000000 (0)\n+658A0F Filename Length       0067 (103)\n+658A11 Extra Length          0009 (9)\n+658A13 Comment Length        0000 (0)\n+658A15 Disk Start            0000 (0)\n+658A17 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+658A19 Ext File Attributes   00000000 (0)\n+658A1D Local Header Offset   000B366D (734829)\n+658A21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x658A21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+658A88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+658A8A   Length              0005 (5)\n+658A8C   Flags               01 (1) 'Modification'\n+658A8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+658A91 CENTRAL HEADER #297   02014B50 (33639248)\n+658A95 Created Zip Spec      14 (20) '2.0'\n+658A96 Created OS            00 (0) 'MS-DOS'\n+658A97 Extract Zip Spec      14 (20) '2.0'\n+658A98 Extract OS            00 (0) 'MS-DOS'\n+658A99 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+658A9B Compression Method    0000 (0) 'Stored'\n+658A9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+658AA1 CRC                   6D3A5445 (1832539205)\n+658AA5 Compressed Size       00000939 (2361)\n+658AA9 Uncompressed Size     00000939 (2361)\n+658AAD Filename Length       007D (125)\n+658AAF Extra Length          0009 (9)\n+658AB1 Comment Length        0000 (0)\n+658AB3 Disk Start            0000 (0)\n+658AB5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+658AB7 Ext File Attributes   00000000 (0)\n+658ABB Local Header Offset   000B36FB (734971)\n+658ABF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x658ABF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+658B3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+658B3E   Length              0005 (5)\n+658B40   Flags               01 (1) 'Modification'\n+658B41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+658B45 CENTRAL HEADER #298   02014B50 (33639248)\n+658B49 Created Zip Spec      14 (20) '2.0'\n+658B4A Created OS            00 (0) 'MS-DOS'\n+658B4B Extract Zip Spec      14 (20) '2.0'\n+658B4C Extract OS            00 (0) 'MS-DOS'\n+658B4D General Purpose Flag  0000 (0)\n+658B4F Compression Method    0000 (0) 'Stored'\n+658B51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+658B55 CRC                   00000000 (0)\n+658B59 Compressed Size       00000000 (0)\n+658B5D Uncompressed Size     00000000 (0)\n+658B61 Filename Length       0076 (118)\n+658B63 Extra Length          0009 (9)\n+658B65 Comment Length        0000 (0)\n+658B67 Disk Start            0000 (0)\n+658B69 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+658B6B Ext File Attributes   00000000 (0)\n+658B6F Local Header Offset   000B40E8 (737512)\n+658B73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x658B73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+658BE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+658BEB   Length              0005 (5)\n+658BED   Flags               01 (1) 'Modification'\n+658BEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+658BF2 CENTRAL HEADER #299   02014B50 (33639248)\n+658BF6 Created Zip Spec      14 (20) '2.0'\n+658BF7 Created OS            00 (0) 'MS-DOS'\n+658BF8 Extract Zip Spec      14 (20) '2.0'\n+658BF9 Extract OS            00 (0) 'MS-DOS'\n+658BFA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+658BFC Compression Method    0000 (0) 'Stored'\n+658BFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+658C02 CRC                   5C6B1924 (1550522660)\n+658C06 Compressed Size       00000DDD (3549)\n+658C0A Uncompressed Size     00000DDD (3549)\n+658C0E Filename Length       008C (140)\n+658C10 Extra Length          0009 (9)\n+658C12 Comment Length        0000 (0)\n+658C14 Disk Start            0000 (0)\n+658C16 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+658C18 Ext File Attributes   00000000 (0)\n+658C1C Local Header Offset   000B4185 (737669)\n+658C20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXX'\n #\n-# WARNING: Offset 0x659B53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x658C20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+658CAC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+658CAE   Length              0005 (5)\n+658CB0   Flags               01 (1) 'Modification'\n+658CB1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+658CB5 CENTRAL HEADER #300   02014B50 (33639248)\n+658CB9 Created Zip Spec      14 (20) '2.0'\n+658CBA Created OS            00 (0) 'MS-DOS'\n+658CBB Extract Zip Spec      14 (20) '2.0'\n+658CBC Extract OS            00 (0) 'MS-DOS'\n+658CBD General Purpose Flag  0000 (0)\n+658CBF Compression Method    0000 (0) 'Stored'\n+658CC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+658CC5 CRC                   00000000 (0)\n+658CC9 Compressed Size       00000000 (0)\n+658CCD Uncompressed Size     00000000 (0)\n+658CD1 Filename Length       0061 (97)\n+658CD3 Extra Length          0009 (9)\n+658CD5 Comment Length        0000 (0)\n+658CD7 Disk Start            0000 (0)\n+658CD9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+658CDB Ext File Attributes   00000000 (0)\n+658CDF Local Header Offset   000B5025 (741413)\n+658CE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x658CE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+658D44 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+658D46   Length              0005 (5)\n+658D48   Flags               01 (1) 'Modification'\n+658D49   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+658D4D CENTRAL HEADER #301   02014B50 (33639248)\n+658D51 Created Zip Spec      14 (20) '2.0'\n+658D52 Created OS            00 (0) 'MS-DOS'\n+658D53 Extract Zip Spec      14 (20) '2.0'\n+658D54 Extract OS            00 (0) 'MS-DOS'\n+658D55 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+658D57 Compression Method    0000 (0) 'Stored'\n+658D59 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+658D5D CRC                   C7DF88BB (3353315515)\n+658D61 Compressed Size       00009335 (37685)\n+658D65 Uncompressed Size     00009335 (37685)\n+658D69 Filename Length       0077 (119)\n+658D6B Extra Length          0009 (9)\n+658D6D Comment Length        0000 (0)\n+658D6F Disk Start            0000 (0)\n+658D71 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+658D73 Ext File Attributes   00000000 (0)\n+658D77 Local Header Offset   000B50AD (741549)\n+658D7B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x658D7B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+658DF2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+658DF4   Length              0005 (5)\n+658DF6   Flags               01 (1) 'Modification'\n+658DF7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+658DFB CENTRAL HEADER #302   02014B50 (33639248)\n+658DFF Created Zip Spec      14 (20) '2.0'\n+658E00 Created OS            00 (0) 'MS-DOS'\n+658E01 Extract Zip Spec      14 (20) '2.0'\n+658E02 Extract OS            00 (0) 'MS-DOS'\n+658E03 General Purpose Flag  0000 (0)\n+658E05 Compression Method    0000 (0) 'Stored'\n+658E07 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+658E0B CRC                   00000000 (0)\n+658E0F Compressed Size       00000000 (0)\n+658E13 Uncompressed Size     00000000 (0)\n+658E17 Filename Length       006A (106)\n+658E19 Extra Length          0009 (9)\n+658E1B Comment Length        0000 (0)\n+658E1D Disk Start            0000 (0)\n+658E1F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+658E21 Ext File Attributes   00000000 (0)\n+658E25 Local Header Offset   000BE490 (779408)\n+658E29 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x658E29: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+658E93 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+658E95   Length              0005 (5)\n+658E97   Flags               01 (1) 'Modification'\n+658E98   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+658E9C CENTRAL HEADER #303   02014B50 (33639248)\n+658EA0 Created Zip Spec      14 (20) '2.0'\n+658EA1 Created OS            00 (0) 'MS-DOS'\n+658EA2 Extract Zip Spec      14 (20) '2.0'\n+658EA3 Extract OS            00 (0) 'MS-DOS'\n+658EA4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+658EA6 Compression Method    0000 (0) 'Stored'\n+658EA8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+658EAC CRC                   217BBE0B (561757707)\n+658EB0 Compressed Size       00001BB1 (7089)\n+658EB4 Uncompressed Size     00001BB1 (7089)\n+658EB8 Filename Length       0080 (128)\n+658EBA Extra Length          0009 (9)\n+658EBC Comment Length        0000 (0)\n+658EBE Disk Start            0000 (0)\n+658EC0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+658EC2 Ext File Attributes   00000000 (0)\n+658EC6 Local Header Offset   000BE521 (779553)\n+658ECA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x658ECA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+658F4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+658F4C   Length              0005 (5)\n+658F4E   Flags               01 (1) 'Modification'\n+658F4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+658F53 CENTRAL HEADER #304   02014B50 (33639248)\n+658F57 Created Zip Spec      14 (20) '2.0'\n+658F58 Created OS            00 (0) 'MS-DOS'\n+658F59 Extract Zip Spec      14 (20) '2.0'\n+658F5A Extract OS            00 (0) 'MS-DOS'\n+658F5B General Purpose Flag  0000 (0)\n+658F5D Compression Method    0000 (0) 'Stored'\n+658F5F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+658F63 CRC                   00000000 (0)\n+658F67 Compressed Size       00000000 (0)\n+658F6B Uncompressed Size     00000000 (0)\n+658F6F Filename Length       0067 (103)\n+658F71 Extra Length          0009 (9)\n+658F73 Comment Length        0000 (0)\n+658F75 Disk Start            0000 (0)\n+658F77 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+658F79 Ext File Attributes   00000000 (0)\n+658F7D Local Header Offset   000C0189 (786825)\n+658F81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x658F81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+658FE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+658FEA   Length              0005 (5)\n+658FEC   Flags               01 (1) 'Modification'\n+658FED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+658FF1 CENTRAL HEADER #305   02014B50 (33639248)\n+658FF5 Created Zip Spec      14 (20) '2.0'\n+658FF6 Created OS            00 (0) 'MS-DOS'\n+658FF7 Extract Zip Spec      14 (20) '2.0'\n+658FF8 Extract OS            00 (0) 'MS-DOS'\n+658FF9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+658FFB Compression Method    0000 (0) 'Stored'\n+658FFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659001 CRC                   CF72F6D0 (3480418000)\n+659005 Compressed Size       00004A6A (19050)\n+659009 Uncompressed Size     00004A6A (19050)\n+65900D Filename Length       007D (125)\n+65900F Extra Length          0009 (9)\n+659011 Comment Length        0000 (0)\n+659013 Disk Start            0000 (0)\n+659015 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+659017 Ext File Attributes   00000000 (0)\n+65901B Local Header Offset   000C0217 (786967)\n+65901F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65901F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65909C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65909E   Length              0005 (5)\n+6590A0   Flags               01 (1) 'Modification'\n+6590A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6590A5 CENTRAL HEADER #306   02014B50 (33639248)\n+6590A9 Created Zip Spec      14 (20) '2.0'\n+6590AA Created OS            00 (0) 'MS-DOS'\n+6590AB Extract Zip Spec      14 (20) '2.0'\n+6590AC Extract OS            00 (0) 'MS-DOS'\n+6590AD General Purpose Flag  0000 (0)\n+6590AF Compression Method    0000 (0) 'Stored'\n+6590B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6590B5 CRC                   00000000 (0)\n+6590B9 Compressed Size       00000000 (0)\n+6590BD Uncompressed Size     00000000 (0)\n+6590C1 Filename Length       0029 (41)\n+6590C3 Extra Length          0009 (9)\n+6590C5 Comment Length        0000 (0)\n+6590C7 Disk Start            0000 (0)\n+6590C9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6590CB Ext File Attributes   00000000 (0)\n+6590CF Local Header Offset   000C4D35 (806197)\n+6590D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6590D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6590FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6590FE   Length              0005 (5)\n+659100   Flags               01 (1) 'Modification'\n+659101   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659105 CENTRAL HEADER #307   02014B50 (33639248)\n+659109 Created Zip Spec      14 (20) '2.0'\n+65910A Created OS            00 (0) 'MS-DOS'\n+65910B Extract Zip Spec      14 (20) '2.0'\n+65910C Extract OS            00 (0) 'MS-DOS'\n+65910D General Purpose Flag  0000 (0)\n+65910F Compression Method    0000 (0) 'Stored'\n+659111 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659115 CRC                   00000000 (0)\n+659119 Compressed Size       00000000 (0)\n+65911D Uncompressed Size     00000000 (0)\n+659121 Filename Length       0030 (48)\n+659123 Extra Length          0009 (9)\n+659125 Comment Length        0000 (0)\n+659127 Disk Start            0000 (0)\n+659129 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65912B Ext File Attributes   00000000 (0)\n+65912F Local Header Offset   000C4D85 (806277)\n+659133 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659133: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659163 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659165   Length              0005 (5)\n+659167   Flags               01 (1) 'Modification'\n+659168   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65916C CENTRAL HEADER #308   02014B50 (33639248)\n+659170 Created Zip Spec      14 (20) '2.0'\n+659171 Created OS            00 (0) 'MS-DOS'\n+659172 Extract Zip Spec      14 (20) '2.0'\n+659173 Extract OS            00 (0) 'MS-DOS'\n+659174 General Purpose Flag  0000 (0)\n+659176 Compression Method    0000 (0) 'Stored'\n+659178 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65917C CRC                   00000000 (0)\n+659180 Compressed Size       00000000 (0)\n+659184 Uncompressed Size     00000000 (0)\n+659188 Filename Length       006A (106)\n+65918A Extra Length          0009 (9)\n+65918C Comment Length        0000 (0)\n+65918E Disk Start            0000 (0)\n+659190 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+659192 Ext File Attributes   00000000 (0)\n+659196 Local Header Offset   000C4DDC (806364)\n+65919A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65919A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659204 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659206   Length              0005 (5)\n+659208   Flags               01 (1) 'Modification'\n+659209   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65920D CENTRAL HEADER #309   02014B50 (33639248)\n+659211 Created Zip Spec      14 (20) '2.0'\n+659212 Created OS            00 (0) 'MS-DOS'\n+659213 Extract Zip Spec      14 (20) '2.0'\n+659214 Extract OS            00 (0) 'MS-DOS'\n+659215 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+659217 Compression Method    0000 (0) 'Stored'\n+659219 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65921D CRC                   DCEFA272 (3706692210)\n+659221 Compressed Size       000009D3 (2515)\n+659225 Uncompressed Size     000009D3 (2515)\n+659229 Filename Length       0080 (128)\n+65922B Extra Length          0009 (9)\n+65922D Comment Length        0000 (0)\n+65922F Disk Start            0000 (0)\n+659231 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+659233 Ext File Attributes   00000000 (0)\n+659237 Local Header Offset   000C4E6D (806509)\n+65923B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65923B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6592BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6592BD   Length              0005 (5)\n+6592BF   Flags               01 (1) 'Modification'\n+6592C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6592C4 CENTRAL HEADER #310   02014B50 (33639248)\n+6592C8 Created Zip Spec      14 (20) '2.0'\n+6592C9 Created OS            00 (0) 'MS-DOS'\n+6592CA Extract Zip Spec      14 (20) '2.0'\n+6592CB Extract OS            00 (0) 'MS-DOS'\n+6592CC General Purpose Flag  0000 (0)\n+6592CE Compression Method    0000 (0) 'Stored'\n+6592D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6592D4 CRC                   00000000 (0)\n+6592D8 Compressed Size       00000000 (0)\n+6592DC Uncompressed Size     00000000 (0)\n+6592E0 Filename Length       006C (108)\n+6592E2 Extra Length          0009 (9)\n+6592E4 Comment Length        0000 (0)\n+6592E6 Disk Start            0000 (0)\n+6592E8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6592EA Ext File Attributes   00000000 (0)\n+6592EE Local Header Offset   000C58F7 (809207)\n+6592F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6592F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65935E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659360   Length              0005 (5)\n+659362   Flags               01 (1) 'Modification'\n+659363   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659367 CENTRAL HEADER #311   02014B50 (33639248)\n+65936B Created Zip Spec      14 (20) '2.0'\n+65936C Created OS            00 (0) 'MS-DOS'\n+65936D Extract Zip Spec      14 (20) '2.0'\n+65936E Extract OS            00 (0) 'MS-DOS'\n+65936F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+659371 Compression Method    0000 (0) 'Stored'\n+659373 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659377 CRC                   26E963FE (652829694)\n+65937B Compressed Size       00001276 (4726)\n+65937F Uncompressed Size     00001276 (4726)\n+659383 Filename Length       0082 (130)\n+659385 Extra Length          0009 (9)\n+659387 Comment Length        0000 (0)\n+659389 Disk Start            0000 (0)\n+65938B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65938D Ext File Attributes   00000000 (0)\n+659391 Local Header Offset   000C598A (809354)\n+659395 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659395: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659417 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659419   Length              0005 (5)\n+65941B   Flags               01 (1) 'Modification'\n+65941C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659420 CENTRAL HEADER #312   02014B50 (33639248)\n+659424 Created Zip Spec      14 (20) '2.0'\n+659425 Created OS            00 (0) 'MS-DOS'\n+659426 Extract Zip Spec      14 (20) '2.0'\n+659427 Extract OS            00 (0) 'MS-DOS'\n+659428 General Purpose Flag  0000 (0)\n+65942A Compression Method    0000 (0) 'Stored'\n+65942C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659430 CRC                   00000000 (0)\n+659434 Compressed Size       00000000 (0)\n+659438 Uncompressed Size     00000000 (0)\n+65943C Filename Length       0028 (40)\n+65943E Extra Length          0009 (9)\n+659440 Comment Length        0000 (0)\n+659442 Disk Start            0000 (0)\n+659444 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+659446 Ext File Attributes   00000000 (0)\n+65944A Local Header Offset   000C6CB9 (814265)\n+65944E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65944E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659476 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659478   Length              0005 (5)\n+65947A   Flags               01 (1) 'Modification'\n+65947B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65947F CENTRAL HEADER #313   02014B50 (33639248)\n+659483 Created Zip Spec      14 (20) '2.0'\n+659484 Created OS            00 (0) 'MS-DOS'\n+659485 Extract Zip Spec      14 (20) '2.0'\n+659486 Extract OS            00 (0) 'MS-DOS'\n+659487 General Purpose Flag  0000 (0)\n+659489 Compression Method    0000 (0) 'Stored'\n+65948B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65948F CRC                   00000000 (0)\n+659493 Compressed Size       00000000 (0)\n+659497 Uncompressed Size     00000000 (0)\n+65949B Filename Length       002F (47)\n+65949D Extra Length          0009 (9)\n+65949F Comment Length        0000 (0)\n+6594A1 Disk Start            0000 (0)\n+6594A3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6594A5 Ext File Attributes   00000000 (0)\n+6594A9 Local Header Offset   000C6D08 (814344)\n+6594AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6594AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6594DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6594DE   Length              0005 (5)\n+6594E0   Flags               01 (1) 'Modification'\n+6594E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6594E5 CENTRAL HEADER #314   02014B50 (33639248)\n+6594E9 Created Zip Spec      14 (20) '2.0'\n+6594EA Created OS            00 (0) 'MS-DOS'\n+6594EB Extract Zip Spec      14 (20) '2.0'\n+6594EC Extract OS            00 (0) 'MS-DOS'\n+6594ED General Purpose Flag  0000 (0)\n+6594EF Compression Method    0000 (0) 'Stored'\n+6594F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6594F5 CRC                   00000000 (0)\n+6594F9 Compressed Size       00000000 (0)\n+6594FD Uncompressed Size     00000000 (0)\n+659501 Filename Length       005F (95)\n+659503 Extra Length          0009 (9)\n+659505 Comment Length        0000 (0)\n+659507 Disk Start            0000 (0)\n+659509 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65950B Ext File Attributes   00000000 (0)\n+65950F Local Header Offset   000C6D5E (814430)\n+659513 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659513: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659572 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659574   Length              0005 (5)\n+659576   Flags               01 (1) 'Modification'\n+659577   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65957B CENTRAL HEADER #315   02014B50 (33639248)\n+65957F Created Zip Spec      14 (20) '2.0'\n+659580 Created OS            00 (0) 'MS-DOS'\n+659581 Extract Zip Spec      14 (20) '2.0'\n+659582 Extract OS            00 (0) 'MS-DOS'\n+659583 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+659585 Compression Method    0000 (0) 'Stored'\n+659587 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65958B CRC                   6B96B8CE (1805039822)\n+65958F Compressed Size       00008944 (35140)\n+659593 Uncompressed Size     00008944 (35140)\n+659597 Filename Length       0075 (117)\n+659599 Extra Length          0009 (9)\n+65959B Comment Length        0000 (0)\n+65959D Disk Start            0000 (0)\n+65959F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6595A1 Ext File Attributes   00000000 (0)\n+6595A5 Local Header Offset   000C6DE4 (814564)\n+6595A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6595A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65961E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659620   Length              0005 (5)\n+659622   Flags               01 (1) 'Modification'\n+659623   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659627 CENTRAL HEADER #316   02014B50 (33639248)\n+65962B Created Zip Spec      14 (20) '2.0'\n+65962C Created OS            00 (0) 'MS-DOS'\n+65962D Extract Zip Spec      14 (20) '2.0'\n+65962E Extract OS            00 (0) 'MS-DOS'\n+65962F General Purpose Flag  0000 (0)\n+659631 Compression Method    0000 (0) 'Stored'\n+659633 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659637 CRC                   00000000 (0)\n+65963B Compressed Size       00000000 (0)\n+65963F Uncompressed Size     00000000 (0)\n+659643 Filename Length       0066 (102)\n+659645 Extra Length          0009 (9)\n+659647 Comment Length        0000 (0)\n+659649 Disk Start            0000 (0)\n+65964B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65964D Ext File Attributes   00000000 (0)\n+659651 Local Header Offset   000CF7D4 (849876)\n+659655 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659655: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6596BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6596BD   Length              0005 (5)\n+6596BF   Flags               01 (1) 'Modification'\n+6596C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6596C4 CENTRAL HEADER #317   02014B50 (33639248)\n+6596C8 Created Zip Spec      14 (20) '2.0'\n+6596C9 Created OS            00 (0) 'MS-DOS'\n+6596CA Extract Zip Spec      14 (20) '2.0'\n+6596CB Extract OS            00 (0) 'MS-DOS'\n+6596CC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6596CE Compression Method    0000 (0) 'Stored'\n+6596D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6596D4 CRC                   DB2A8543 (3676996931)\n+6596D8 Compressed Size       00001C3A (7226)\n+6596DC Uncompressed Size     00001C3A (7226)\n+6596E0 Filename Length       007C (124)\n+6596E2 Extra Length          0009 (9)\n+6596E4 Comment Length        0000 (0)\n+6596E6 Disk Start            0000 (0)\n+6596E8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6596EA Ext File Attributes   00000000 (0)\n+6596EE Local Header Offset   000CF861 (850017)\n+6596F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6596F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65976E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659770   Length              0005 (5)\n+659772   Flags               01 (1) 'Modification'\n+659773   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659777 CENTRAL HEADER #318   02014B50 (33639248)\n+65977B Created Zip Spec      14 (20) '2.0'\n+65977C Created OS            00 (0) 'MS-DOS'\n+65977D Extract Zip Spec      14 (20) '2.0'\n+65977E Extract OS            00 (0) 'MS-DOS'\n+65977F General Purpose Flag  0000 (0)\n+659781 Compression Method    0000 (0) 'Stored'\n+659783 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659787 CRC                   00000000 (0)\n+65978B Compressed Size       00000000 (0)\n+65978F Uncompressed Size     00000000 (0)\n+659793 Filename Length       0069 (105)\n+659795 Extra Length          0009 (9)\n+659797 Comment Length        0000 (0)\n+659799 Disk Start            0000 (0)\n+65979B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65979D Ext File Attributes   00000000 (0)\n+6597A1 Local Header Offset   000D154E (857422)\n+6597A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6597A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65980E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659810   Length              0005 (5)\n+659812   Flags               01 (1) 'Modification'\n+659813   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659817 CENTRAL HEADER #319   02014B50 (33639248)\n+65981B Created Zip Spec      14 (20) '2.0'\n+65981C Created OS            00 (0) 'MS-DOS'\n+65981D Extract Zip Spec      14 (20) '2.0'\n+65981E Extract OS            00 (0) 'MS-DOS'\n+65981F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+659821 Compression Method    0000 (0) 'Stored'\n+659823 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659827 CRC                   FF5BC4DC (4284204252)\n+65982B Compressed Size       00001552 (5458)\n+65982F Uncompressed Size     00001552 (5458)\n+659833 Filename Length       007F (127)\n+659835 Extra Length          0009 (9)\n+659837 Comment Length        0000 (0)\n+659839 Disk Start            0000 (0)\n+65983B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65983D Ext File Attributes   00000000 (0)\n+659841 Local Header Offset   000D15DE (857566)\n+659845 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659845: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6598C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6598C6   Length              0005 (5)\n+6598C8   Flags               01 (1) 'Modification'\n+6598C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6598CD CENTRAL HEADER #320   02014B50 (33639248)\n+6598D1 Created Zip Spec      14 (20) '2.0'\n+6598D2 Created OS            00 (0) 'MS-DOS'\n+6598D3 Extract Zip Spec      14 (20) '2.0'\n+6598D4 Extract OS            00 (0) 'MS-DOS'\n+6598D5 General Purpose Flag  0000 (0)\n+6598D7 Compression Method    0000 (0) 'Stored'\n+6598D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6598DD CRC                   00000000 (0)\n+6598E1 Compressed Size       00000000 (0)\n+6598E5 Uncompressed Size     00000000 (0)\n+6598E9 Filename Length       0069 (105)\n+6598EB Extra Length          0009 (9)\n+6598ED Comment Length        0000 (0)\n+6598EF Disk Start            0000 (0)\n+6598F1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6598F3 Ext File Attributes   00000000 (0)\n+6598F7 Local Header Offset   000D2BE6 (863206)\n+6598FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6598FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659964 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659966   Length              0005 (5)\n+659968   Flags               01 (1) 'Modification'\n+659969   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65996D CENTRAL HEADER #321   02014B50 (33639248)\n+659971 Created Zip Spec      14 (20) '2.0'\n+659972 Created OS            00 (0) 'MS-DOS'\n+659973 Extract Zip Spec      14 (20) '2.0'\n+659974 Extract OS            00 (0) 'MS-DOS'\n+659975 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+659977 Compression Method    0000 (0) 'Stored'\n+659979 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65997D CRC                   D6140D51 (3591638353)\n+659981 Compressed Size       00003C2C (15404)\n+659985 Uncompressed Size     00003C2C (15404)\n+659989 Filename Length       007F (127)\n+65998B Extra Length          0009 (9)\n+65998D Comment Length        0000 (0)\n+65998F Disk Start            0000 (0)\n+659991 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+659993 Ext File Attributes   00000000 (0)\n+659997 Local Header Offset   000D2C76 (863350)\n+65999B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65999B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659A1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659A1C   Length              0005 (5)\n+659A1E   Flags               01 (1) 'Modification'\n+659A1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659A23 CENTRAL HEADER #322   02014B50 (33639248)\n+659A27 Created Zip Spec      14 (20) '2.0'\n+659A28 Created OS            00 (0) 'MS-DOS'\n+659A29 Extract Zip Spec      14 (20) '2.0'\n+659A2A Extract OS            00 (0) 'MS-DOS'\n+659A2B General Purpose Flag  0000 (0)\n+659A2D Compression Method    0000 (0) 'Stored'\n+659A2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659A33 CRC                   00000000 (0)\n+659A37 Compressed Size       00000000 (0)\n+659A3B Uncompressed Size     00000000 (0)\n+659A3F Filename Length       0068 (104)\n+659A41 Extra Length          0009 (9)\n+659A43 Comment Length        0000 (0)\n+659A45 Disk Start            0000 (0)\n+659A47 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+659A49 Ext File Attributes   00000000 (0)\n+659A4D Local Header Offset   000D6958 (878936)\n+659A51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659A51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659AB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659ABB   Length              0005 (5)\n+659ABD   Flags               01 (1) 'Modification'\n+659ABE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659AC2 CENTRAL HEADER #323   02014B50 (33639248)\n+659AC6 Created Zip Spec      14 (20) '2.0'\n+659AC7 Created OS            00 (0) 'MS-DOS'\n+659AC8 Extract Zip Spec      14 (20) '2.0'\n+659AC9 Extract OS            00 (0) 'MS-DOS'\n+659ACA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+659ACC Compression Method    0000 (0) 'Stored'\n+659ACE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659AD2 CRC                   86CE2079 (2261655673)\n+659AD6 Compressed Size       00002162 (8546)\n+659ADA Uncompressed Size     00002162 (8546)\n+659ADE Filename Length       007E (126)\n+659AE0 Extra Length          0009 (9)\n+659AE2 Comment Length        0000 (0)\n+659AE4 Disk Start            0000 (0)\n+659AE6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+659AE8 Ext File Attributes   00000000 (0)\n+659AEC Local Header Offset   000D69E7 (879079)\n+659AF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659AF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659B6E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659B70   Length              0005 (5)\n+659B72   Flags               01 (1) 'Modification'\n+659B73   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659B77 CENTRAL HEADER #324   02014B50 (33639248)\n+659B7B Created Zip Spec      14 (20) '2.0'\n+659B7C Created OS            00 (0) 'MS-DOS'\n+659B7D Extract Zip Spec      14 (20) '2.0'\n+659B7E Extract OS            00 (0) 'MS-DOS'\n+659B7F General Purpose Flag  0000 (0)\n+659B81 Compression Method    0000 (0) 'Stored'\n+659B83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659B87 CRC                   00000000 (0)\n+659B8B Compressed Size       00000000 (0)\n+659B8F Uncompressed Size     00000000 (0)\n+659B93 Filename Length       0026 (38)\n+659B95 Extra Length          0009 (9)\n+659B97 Comment Length        0000 (0)\n+659B99 Disk Start            0000 (0)\n+659B9B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+659B9D Ext File Attributes   00000000 (0)\n+659BA1 Local Header Offset   000D8BFE (887806)\n+659BA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659BA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 659BCB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 659BCD   Length              0005 (5)\n 659BCF   Flags               01 (1) 'Modification'\n 659BD0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n \n-659BD4 CENTRAL HEADER #426   02014B50 (33639248)\n+659BD4 CENTRAL HEADER #325   02014B50 (33639248)\n 659BD8 Created Zip Spec      14 (20) '2.0'\n 659BD9 Created OS            00 (0) 'MS-DOS'\n 659BDA Extract Zip Spec      14 (20) '2.0'\n 659BDB Extract OS            00 (0) 'MS-DOS'\n 659BDC General Purpose Flag  0000 (0)\n 659BDE Compression Method    0000 (0) 'Stored'\n 659BE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n 659BE4 CRC                   00000000 (0)\n 659BE8 Compressed Size       00000000 (0)\n 659BEC Uncompressed Size     00000000 (0)\n-659BF0 Filename Length       005B (91)\n+659BF0 Filename Length       002D (45)\n 659BF2 Extra Length          0009 (9)\n 659BF4 Comment Length        0000 (0)\n 659BF6 Disk Start            0000 (0)\n 659BF8 Int File Attributes   0000 (0)\n        [Bit 0]               0 'Binary Data'\n 659BFA Ext File Attributes   00000000 (0)\n-659BFE Local Header Offset   0010DE9A (1105562)\n-659C02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+659BFE Local Header Offset   000D8C4B (887883)\n+659C02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659C02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659C2F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659C31   Length              0005 (5)\n+659C33   Flags               01 (1) 'Modification'\n+659C34   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659C38 CENTRAL HEADER #326   02014B50 (33639248)\n+659C3C Created Zip Spec      14 (20) '2.0'\n+659C3D Created OS            00 (0) 'MS-DOS'\n+659C3E Extract Zip Spec      14 (20) '2.0'\n+659C3F Extract OS            00 (0) 'MS-DOS'\n+659C40 General Purpose Flag  0000 (0)\n+659C42 Compression Method    0000 (0) 'Stored'\n+659C44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659C48 CRC                   00000000 (0)\n+659C4C Compressed Size       00000000 (0)\n+659C50 Uncompressed Size     00000000 (0)\n+659C54 Filename Length       005B (91)\n+659C56 Extra Length          0009 (9)\n+659C58 Comment Length        0000 (0)\n+659C5A Disk Start            0000 (0)\n+659C5C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+659C5E Ext File Attributes   00000000 (0)\n+659C62 Local Header Offset   000D8C9F (887967)\n+659C66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659C66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659CC1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659CC3   Length              0005 (5)\n+659CC5   Flags               01 (1) 'Modification'\n+659CC6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659CCA CENTRAL HEADER #327   02014B50 (33639248)\n+659CCE Created Zip Spec      14 (20) '2.0'\n+659CCF Created OS            00 (0) 'MS-DOS'\n+659CD0 Extract Zip Spec      14 (20) '2.0'\n+659CD1 Extract OS            00 (0) 'MS-DOS'\n+659CD2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+659CD4 Compression Method    0000 (0) 'Stored'\n+659CD6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659CDA CRC                   B12610E6 (2972061926)\n+659CDE Compressed Size       00000A5B (2651)\n+659CE2 Uncompressed Size     00000A5B (2651)\n+659CE6 Filename Length       0071 (113)\n+659CE8 Extra Length          0009 (9)\n+659CEA Comment Length        0000 (0)\n+659CEC Disk Start            0000 (0)\n+659CEE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+659CF0 Ext File Attributes   00000000 (0)\n+659CF4 Local Header Offset   000D8D21 (888097)\n+659CF8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659CF8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659D69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659D6B   Length              0005 (5)\n+659D6D   Flags               01 (1) 'Modification'\n+659D6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659D72 CENTRAL HEADER #328   02014B50 (33639248)\n+659D76 Created Zip Spec      14 (20) '2.0'\n+659D77 Created OS            00 (0) 'MS-DOS'\n+659D78 Extract Zip Spec      14 (20) '2.0'\n+659D79 Extract OS            00 (0) 'MS-DOS'\n+659D7A General Purpose Flag  0000 (0)\n+659D7C Compression Method    0000 (0) 'Stored'\n+659D7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659D82 CRC                   00000000 (0)\n+659D86 Compressed Size       00000000 (0)\n+659D8A Uncompressed Size     00000000 (0)\n+659D8E Filename Length       0035 (53)\n+659D90 Extra Length          0009 (9)\n+659D92 Comment Length        0000 (0)\n+659D94 Disk Start            0000 (0)\n+659D96 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+659D98 Ext File Attributes   00000000 (0)\n+659D9C Local Header Offset   000D9824 (890916)\n+659DA0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659DA0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659DD5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659DD7   Length              0005 (5)\n+659DD9   Flags               01 (1) 'Modification'\n+659DDA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659DDE CENTRAL HEADER #329   02014B50 (33639248)\n+659DE2 Created Zip Spec      14 (20) '2.0'\n+659DE3 Created OS            00 (0) 'MS-DOS'\n+659DE4 Extract Zip Spec      14 (20) '2.0'\n+659DE5 Extract OS            00 (0) 'MS-DOS'\n+659DE6 General Purpose Flag  0000 (0)\n+659DE8 Compression Method    0000 (0) 'Stored'\n+659DEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659DEE CRC                   00000000 (0)\n+659DF2 Compressed Size       00000000 (0)\n+659DF6 Uncompressed Size     00000000 (0)\n+659DFA Filename Length       003C (60)\n+659DFC Extra Length          0009 (9)\n+659DFE Comment Length        0000 (0)\n+659E00 Disk Start            0000 (0)\n+659E02 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+659E04 Ext File Attributes   00000000 (0)\n+659E08 Local Header Offset   000D9880 (891008)\n+659E0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659E0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659E48 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659E4A   Length              0005 (5)\n+659E4C   Flags               01 (1) 'Modification'\n+659E4D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659E51 CENTRAL HEADER #330   02014B50 (33639248)\n+659E55 Created Zip Spec      14 (20) '2.0'\n+659E56 Created OS            00 (0) 'MS-DOS'\n+659E57 Extract Zip Spec      14 (20) '2.0'\n+659E58 Extract OS            00 (0) 'MS-DOS'\n+659E59 General Purpose Flag  0000 (0)\n+659E5B Compression Method    0000 (0) 'Stored'\n+659E5D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659E61 CRC                   00000000 (0)\n+659E65 Compressed Size       00000000 (0)\n+659E69 Uncompressed Size     00000000 (0)\n+659E6D Filename Length       0076 (118)\n+659E6F Extra Length          0009 (9)\n+659E71 Comment Length        0000 (0)\n+659E73 Disk Start            0000 (0)\n+659E75 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+659E77 Ext File Attributes   00000000 (0)\n+659E7B Local Header Offset   000D98E3 (891107)\n+659E7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659E7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659EF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659EF7   Length              0005 (5)\n+659EF9   Flags               01 (1) 'Modification'\n+659EFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659EFE CENTRAL HEADER #331   02014B50 (33639248)\n+659F02 Created Zip Spec      14 (20) '2.0'\n+659F03 Created OS            00 (0) 'MS-DOS'\n+659F04 Extract Zip Spec      14 (20) '2.0'\n+659F05 Extract OS            00 (0) 'MS-DOS'\n+659F06 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+659F08 Compression Method    0000 (0) 'Stored'\n+659F0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659F0E CRC                   041CE92B (69003563)\n+659F12 Compressed Size       00000B22 (2850)\n+659F16 Uncompressed Size     00000B22 (2850)\n+659F1A Filename Length       008C (140)\n+659F1C Extra Length          0009 (9)\n+659F1E Comment Length        0000 (0)\n+659F20 Disk Start            0000 (0)\n+659F22 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+659F24 Ext File Attributes   00000000 (0)\n+659F28 Local Header Offset   000D9980 (891264)\n+659F2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXX'\n+#\n+# WARNING: Offset 0x659F2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+659FB8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+659FBA   Length              0005 (5)\n+659FBC   Flags               01 (1) 'Modification'\n+659FBD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+659FC1 CENTRAL HEADER #332   02014B50 (33639248)\n+659FC5 Created Zip Spec      14 (20) '2.0'\n+659FC6 Created OS            00 (0) 'MS-DOS'\n+659FC7 Extract Zip Spec      14 (20) '2.0'\n+659FC8 Extract OS            00 (0) 'MS-DOS'\n+659FC9 General Purpose Flag  0000 (0)\n+659FCB Compression Method    0000 (0) 'Stored'\n+659FCD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+659FD1 CRC                   00000000 (0)\n+659FD5 Compressed Size       00000000 (0)\n+659FD9 Uncompressed Size     00000000 (0)\n+659FDD Filename Length       0075 (117)\n+659FDF Extra Length          0009 (9)\n+659FE1 Comment Length        0000 (0)\n+659FE3 Disk Start            0000 (0)\n+659FE5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+659FE7 Ext File Attributes   00000000 (0)\n+659FEB Local Header Offset   000DA565 (894309)\n+659FEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659FEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A064 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A066   Length              0005 (5)\n+65A068   Flags               01 (1) 'Modification'\n+65A069   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A06D CENTRAL HEADER #333   02014B50 (33639248)\n+65A071 Created Zip Spec      14 (20) '2.0'\n+65A072 Created OS            00 (0) 'MS-DOS'\n+65A073 Extract Zip Spec      14 (20) '2.0'\n+65A074 Extract OS            00 (0) 'MS-DOS'\n+65A075 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65A077 Compression Method    0000 (0) 'Stored'\n+65A079 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A07D CRC                   16A4BA93 (379894419)\n+65A081 Compressed Size       000016E4 (5860)\n+65A085 Uncompressed Size     000016E4 (5860)\n+65A089 Filename Length       008B (139)\n+65A08B Extra Length          0009 (9)\n+65A08D Comment Length        0000 (0)\n+65A08F Disk Start            0000 (0)\n+65A091 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A093 Ext File Attributes   00000000 (0)\n+65A097 Local Header Offset   000DA601 (894465)\n+65A09B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXX'\n+#\n+# WARNING: Offset 0x65A09B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A126 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A128   Length              0005 (5)\n+65A12A   Flags               01 (1) 'Modification'\n+65A12B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A12F CENTRAL HEADER #334   02014B50 (33639248)\n+65A133 Created Zip Spec      14 (20) '2.0'\n+65A134 Created OS            00 (0) 'MS-DOS'\n+65A135 Extract Zip Spec      14 (20) '2.0'\n+65A136 Extract OS            00 (0) 'MS-DOS'\n+65A137 General Purpose Flag  0000 (0)\n+65A139 Compression Method    0000 (0) 'Stored'\n+65A13B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A13F CRC                   00000000 (0)\n+65A143 Compressed Size       00000000 (0)\n+65A147 Uncompressed Size     00000000 (0)\n+65A14B Filename Length       0078 (120)\n+65A14D Extra Length          0009 (9)\n+65A14F Comment Length        0000 (0)\n+65A151 Disk Start            0000 (0)\n+65A153 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A155 Ext File Attributes   00000000 (0)\n+65A159 Local Header Offset   000DBDA7 (900519)\n+65A15D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65A15D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A1D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A1D7   Length              0005 (5)\n+65A1D9   Flags               01 (1) 'Modification'\n+65A1DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A1DE CENTRAL HEADER #335   02014B50 (33639248)\n+65A1E2 Created Zip Spec      14 (20) '2.0'\n+65A1E3 Created OS            00 (0) 'MS-DOS'\n+65A1E4 Extract Zip Spec      14 (20) '2.0'\n+65A1E5 Extract OS            00 (0) 'MS-DOS'\n+65A1E6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65A1E8 Compression Method    0000 (0) 'Stored'\n+65A1EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A1EE CRC                   390AB403 (957002755)\n+65A1F2 Compressed Size       00001068 (4200)\n+65A1F6 Uncompressed Size     00001068 (4200)\n+65A1FA Filename Length       008E (142)\n+65A1FC Extra Length          0009 (9)\n+65A1FE Comment Length        0000 (0)\n+65A200 Disk Start            0000 (0)\n+65A202 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A204 Ext File Attributes   00000000 (0)\n+65A208 Local Header Offset   000DBE46 (900678)\n+65A20C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65A20C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A29A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A29C   Length              0005 (5)\n+65A29E   Flags               01 (1) 'Modification'\n+65A29F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A2A3 CENTRAL HEADER #336   02014B50 (33639248)\n+65A2A7 Created Zip Spec      14 (20) '2.0'\n+65A2A8 Created OS            00 (0) 'MS-DOS'\n+65A2A9 Extract Zip Spec      14 (20) '2.0'\n+65A2AA Extract OS            00 (0) 'MS-DOS'\n+65A2AB General Purpose Flag  0000 (0)\n+65A2AD Compression Method    0000 (0) 'Stored'\n+65A2AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A2B3 CRC                   00000000 (0)\n+65A2B7 Compressed Size       00000000 (0)\n+65A2BB Uncompressed Size     00000000 (0)\n+65A2BF Filename Length       0074 (116)\n+65A2C1 Extra Length          0009 (9)\n+65A2C3 Comment Length        0000 (0)\n+65A2C5 Disk Start            0000 (0)\n+65A2C7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A2C9 Ext File Attributes   00000000 (0)\n+65A2CD Local Header Offset   000DCF73 (905075)\n+65A2D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65A2D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A345 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A347   Length              0005 (5)\n+65A349   Flags               01 (1) 'Modification'\n+65A34A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A34E CENTRAL HEADER #337   02014B50 (33639248)\n+65A352 Created Zip Spec      14 (20) '2.0'\n+65A353 Created OS            00 (0) 'MS-DOS'\n+65A354 Extract Zip Spec      14 (20) '2.0'\n+65A355 Extract OS            00 (0) 'MS-DOS'\n+65A356 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65A358 Compression Method    0000 (0) 'Stored'\n+65A35A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A35E CRC                   3DE98548 (1038714184)\n+65A362 Compressed Size       000016AA (5802)\n+65A366 Uncompressed Size     000016AA (5802)\n+65A36A Filename Length       008A (138)\n+65A36C Extra Length          0009 (9)\n+65A36E Comment Length        0000 (0)\n+65A370 Disk Start            0000 (0)\n+65A372 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A374 Ext File Attributes   00000000 (0)\n+65A378 Local Header Offset   000DD00E (905230)\n+65A37C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXX'\n #\n-# WARNING: Offset 0x659C02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x65A37C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-659C5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659C5F   Length              0005 (5)\n-659C61   Flags               01 (1) 'Modification'\n-659C62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-659C66 CENTRAL HEADER #427   02014B50 (33639248)\n-659C6A Created Zip Spec      14 (20) '2.0'\n-659C6B Created OS            00 (0) 'MS-DOS'\n-659C6C Extract Zip Spec      14 (20) '2.0'\n-659C6D Extract OS            00 (0) 'MS-DOS'\n-659C6E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-659C70 Compression Method    0000 (0) 'Stored'\n-659C72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-659C76 CRC                   C4FC7EA2 (3304881826)\n-659C7A Compressed Size       000011DC (4572)\n-659C7E Uncompressed Size     000011DC (4572)\n-659C82 Filename Length       0071 (113)\n-659C84 Extra Length          0009 (9)\n-659C86 Comment Length        0000 (0)\n-659C88 Disk Start            0000 (0)\n-659C8A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659C8C Ext File Attributes   00000000 (0)\n-659C90 Local Header Offset   0010DF1C (1105692)\n-659C94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x659C94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659D05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659D07   Length              0005 (5)\n-659D09   Flags               01 (1) 'Modification'\n-659D0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-659D0E CENTRAL HEADER #428   02014B50 (33639248)\n-659D12 Created Zip Spec      14 (20) '2.0'\n-659D13 Created OS            00 (0) 'MS-DOS'\n-659D14 Extract Zip Spec      14 (20) '2.0'\n-659D15 Extract OS            00 (0) 'MS-DOS'\n-659D16 General Purpose Flag  0000 (0)\n-659D18 Compression Method    0000 (0) 'Stored'\n-659D1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-659D1E CRC                   00000000 (0)\n-659D22 Compressed Size       00000000 (0)\n-659D26 Uncompressed Size     00000000 (0)\n-659D2A Filename Length       005E (94)\n-659D2C Extra Length          0009 (9)\n-659D2E Comment Length        0000 (0)\n-659D30 Disk Start            0000 (0)\n-659D32 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659D34 Ext File Attributes   00000000 (0)\n-659D38 Local Header Offset   0010F1A0 (1110432)\n-659D3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x659D3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659D9A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659D9C   Length              0005 (5)\n-659D9E   Flags               01 (1) 'Modification'\n-659D9F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-659DA3 CENTRAL HEADER #429   02014B50 (33639248)\n-659DA7 Created Zip Spec      14 (20) '2.0'\n-659DA8 Created OS            00 (0) 'MS-DOS'\n-659DA9 Extract Zip Spec      14 (20) '2.0'\n-659DAA Extract OS            00 (0) 'MS-DOS'\n-659DAB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-659DAD Compression Method    0000 (0) 'Stored'\n-659DAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-659DB3 CRC                   EE30A8D8 (3996166360)\n-659DB7 Compressed Size       000072FB (29435)\n-659DBB Uncompressed Size     000072FB (29435)\n-659DBF Filename Length       0074 (116)\n-659DC1 Extra Length          0009 (9)\n-659DC3 Comment Length        0000 (0)\n-659DC5 Disk Start            0000 (0)\n-659DC7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659DC9 Ext File Attributes   00000000 (0)\n-659DCD Local Header Offset   0010F225 (1110565)\n-659DD1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x659DD1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659E45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659E47   Length              0005 (5)\n-659E49   Flags               01 (1) 'Modification'\n-659E4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-659E4E CENTRAL HEADER #430   02014B50 (33639248)\n-659E52 Created Zip Spec      14 (20) '2.0'\n-659E53 Created OS            00 (0) 'MS-DOS'\n-659E54 Extract Zip Spec      14 (20) '2.0'\n-659E55 Extract OS            00 (0) 'MS-DOS'\n-659E56 General Purpose Flag  0000 (0)\n-659E58 Compression Method    0000 (0) 'Stored'\n-659E5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-659E5E CRC                   00000000 (0)\n-659E62 Compressed Size       00000000 (0)\n-659E66 Uncompressed Size     00000000 (0)\n-659E6A Filename Length       0064 (100)\n-659E6C Extra Length          0009 (9)\n-659E6E Comment Length        0000 (0)\n-659E70 Disk Start            0000 (0)\n-659E72 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659E74 Ext File Attributes   00000000 (0)\n-659E78 Local Header Offset   001165CB (1140171)\n-659E7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x659E7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659EE0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659EE2   Length              0005 (5)\n-659EE4   Flags               01 (1) 'Modification'\n-659EE5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-659EE9 CENTRAL HEADER #431   02014B50 (33639248)\n-659EED Created Zip Spec      14 (20) '2.0'\n-659EEE Created OS            00 (0) 'MS-DOS'\n-659EEF Extract Zip Spec      14 (20) '2.0'\n-659EF0 Extract OS            00 (0) 'MS-DOS'\n-659EF1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-659EF3 Compression Method    0000 (0) 'Stored'\n-659EF5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-659EF9 CRC                   EA36353C (3929421116)\n-659EFD Compressed Size       0000480E (18446)\n-659F01 Uncompressed Size     0000480E (18446)\n-659F05 Filename Length       007A (122)\n-659F07 Extra Length          0009 (9)\n-659F09 Comment Length        0000 (0)\n-659F0B Disk Start            0000 (0)\n-659F0D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659F0F Ext File Attributes   00000000 (0)\n-659F13 Local Header Offset   00116656 (1140310)\n-659F17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x659F17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-659F91 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-659F93   Length              0005 (5)\n-659F95   Flags               01 (1) 'Modification'\n-659F96   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-659F9A CENTRAL HEADER #432   02014B50 (33639248)\n-659F9E Created Zip Spec      14 (20) '2.0'\n-659F9F Created OS            00 (0) 'MS-DOS'\n-659FA0 Extract Zip Spec      14 (20) '2.0'\n-659FA1 Extract OS            00 (0) 'MS-DOS'\n-659FA2 General Purpose Flag  0000 (0)\n-659FA4 Compression Method    0000 (0) 'Stored'\n-659FA6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-659FAA CRC                   00000000 (0)\n-659FAE Compressed Size       00000000 (0)\n-659FB2 Uncompressed Size     00000000 (0)\n-659FB6 Filename Length       0063 (99)\n-659FB8 Extra Length          0009 (9)\n-659FBA Comment Length        0000 (0)\n-659FBC Disk Start            0000 (0)\n-659FBE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-659FC0 Ext File Attributes   00000000 (0)\n-659FC4 Local Header Offset   0011AF15 (1158933)\n-659FC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x659FC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A02B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A02D   Length              0005 (5)\n-65A02F   Flags               01 (1) 'Modification'\n-65A030   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A034 CENTRAL HEADER #433   02014B50 (33639248)\n-65A038 Created Zip Spec      14 (20) '2.0'\n-65A039 Created OS            00 (0) 'MS-DOS'\n-65A03A Extract Zip Spec      14 (20) '2.0'\n-65A03B Extract OS            00 (0) 'MS-DOS'\n-65A03C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65A03E Compression Method    0000 (0) 'Stored'\n-65A040 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A044 CRC                   CA474DE0 (3393670624)\n-65A048 Compressed Size       000007B6 (1974)\n-65A04C Uncompressed Size     000007B6 (1974)\n-65A050 Filename Length       0079 (121)\n-65A052 Extra Length          0009 (9)\n-65A054 Comment Length        0000 (0)\n-65A056 Disk Start            0000 (0)\n-65A058 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A05A Ext File Attributes   00000000 (0)\n-65A05E Local Header Offset   0011AF9F (1159071)\n-65A062 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A062: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A0DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A0DD   Length              0005 (5)\n-65A0DF   Flags               01 (1) 'Modification'\n-65A0E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A0E4 CENTRAL HEADER #434   02014B50 (33639248)\n-65A0E8 Created Zip Spec      14 (20) '2.0'\n-65A0E9 Created OS            00 (0) 'MS-DOS'\n-65A0EA Extract Zip Spec      14 (20) '2.0'\n-65A0EB Extract OS            00 (0) 'MS-DOS'\n-65A0EC General Purpose Flag  0000 (0)\n-65A0EE Compression Method    0000 (0) 'Stored'\n-65A0F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A0F4 CRC                   00000000 (0)\n-65A0F8 Compressed Size       00000000 (0)\n-65A0FC Uncompressed Size     00000000 (0)\n-65A100 Filename Length       005F (95)\n-65A102 Extra Length          0009 (9)\n-65A104 Comment Length        0000 (0)\n-65A106 Disk Start            0000 (0)\n-65A108 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A10A Ext File Attributes   00000000 (0)\n-65A10E Local Header Offset   0011B805 (1161221)\n-65A112 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A112: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A171 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A173   Length              0005 (5)\n-65A175   Flags               01 (1) 'Modification'\n-65A176   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A17A CENTRAL HEADER #435   02014B50 (33639248)\n-65A17E Created Zip Spec      14 (20) '2.0'\n-65A17F Created OS            00 (0) 'MS-DOS'\n-65A180 Extract Zip Spec      14 (20) '2.0'\n-65A181 Extract OS            00 (0) 'MS-DOS'\n-65A182 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65A184 Compression Method    0000 (0) 'Stored'\n-65A186 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A18A CRC                   A19F99D4 (2711591380)\n-65A18E Compressed Size       000011CB (4555)\n-65A192 Uncompressed Size     000011CB (4555)\n-65A196 Filename Length       0075 (117)\n-65A198 Extra Length          0009 (9)\n-65A19A Comment Length        0000 (0)\n-65A19C Disk Start            0000 (0)\n-65A19E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A1A0 Ext File Attributes   00000000 (0)\n-65A1A4 Local Header Offset   0011B88B (1161355)\n-65A1A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A1A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A21D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A21F   Length              0005 (5)\n-65A221   Flags               01 (1) 'Modification'\n-65A222   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A226 CENTRAL HEADER #436   02014B50 (33639248)\n-65A22A Created Zip Spec      14 (20) '2.0'\n-65A22B Created OS            00 (0) 'MS-DOS'\n-65A22C Extract Zip Spec      14 (20) '2.0'\n-65A22D Extract OS            00 (0) 'MS-DOS'\n-65A22E General Purpose Flag  0000 (0)\n-65A230 Compression Method    0000 (0) 'Stored'\n-65A232 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A236 CRC                   00000000 (0)\n-65A23A Compressed Size       00000000 (0)\n-65A23E Uncompressed Size     00000000 (0)\n-65A242 Filename Length       005B (91)\n-65A244 Extra Length          0009 (9)\n-65A246 Comment Length        0000 (0)\n-65A248 Disk Start            0000 (0)\n-65A24A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A24C Ext File Attributes   00000000 (0)\n-65A250 Local Header Offset   0011CB02 (1166082)\n-65A254 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A254: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A2AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A2B1   Length              0005 (5)\n-65A2B3   Flags               01 (1) 'Modification'\n-65A2B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A2B8 CENTRAL HEADER #437   02014B50 (33639248)\n-65A2BC Created Zip Spec      14 (20) '2.0'\n-65A2BD Created OS            00 (0) 'MS-DOS'\n-65A2BE Extract Zip Spec      14 (20) '2.0'\n-65A2BF Extract OS            00 (0) 'MS-DOS'\n-65A2C0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65A2C2 Compression Method    0000 (0) 'Stored'\n-65A2C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A2C8 CRC                   7573E84B (1970530379)\n-65A2CC Compressed Size       0000284F (10319)\n-65A2D0 Uncompressed Size     0000284F (10319)\n-65A2D4 Filename Length       0071 (113)\n-65A2D6 Extra Length          0009 (9)\n-65A2D8 Comment Length        0000 (0)\n-65A2DA Disk Start            0000 (0)\n-65A2DC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A2DE Ext File Attributes   00000000 (0)\n-65A2E2 Local Header Offset   0011CB84 (1166212)\n-65A2E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A2E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A357 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A359   Length              0005 (5)\n-65A35B   Flags               01 (1) 'Modification'\n-65A35C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A360 CENTRAL HEADER #438   02014B50 (33639248)\n-65A364 Created Zip Spec      14 (20) '2.0'\n-65A365 Created OS            00 (0) 'MS-DOS'\n-65A366 Extract Zip Spec      14 (20) '2.0'\n-65A367 Extract OS            00 (0) 'MS-DOS'\n-65A368 General Purpose Flag  0000 (0)\n-65A36A Compression Method    0000 (0) 'Stored'\n-65A36C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A370 CRC                   00000000 (0)\n-65A374 Compressed Size       00000000 (0)\n-65A378 Uncompressed Size     00000000 (0)\n-65A37C Filename Length       005F (95)\n-65A37E Extra Length          0009 (9)\n-65A380 Comment Length        0000 (0)\n-65A382 Disk Start            0000 (0)\n-65A384 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A386 Ext File Attributes   00000000 (0)\n-65A38A Local Header Offset   0011F47B (1176699)\n-65A38E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A38E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A3ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A3EF   Length              0005 (5)\n-65A3F1   Flags               01 (1) 'Modification'\n-65A3F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A3F6 CENTRAL HEADER #439   02014B50 (33639248)\n-65A3FA Created Zip Spec      14 (20) '2.0'\n-65A3FB Created OS            00 (0) 'MS-DOS'\n-65A3FC Extract Zip Spec      14 (20) '2.0'\n-65A3FD Extract OS            00 (0) 'MS-DOS'\n-65A3FE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65A400 Compression Method    0000 (0) 'Stored'\n-65A402 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A406 CRC                   131CB9D8 (320649688)\n-65A40A Compressed Size       00002777 (10103)\n-65A40E Uncompressed Size     00002777 (10103)\n-65A412 Filename Length       0075 (117)\n-65A414 Extra Length          0009 (9)\n-65A416 Comment Length        0000 (0)\n-65A418 Disk Start            0000 (0)\n-65A41A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A41C Ext File Attributes   00000000 (0)\n-65A420 Local Header Offset   0011F501 (1176833)\n-65A424 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A424: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A499 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A49B   Length              0005 (5)\n-65A49D   Flags               01 (1) 'Modification'\n-65A49E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A4A2 CENTRAL HEADER #440   02014B50 (33639248)\n-65A4A6 Created Zip Spec      14 (20) '2.0'\n-65A4A7 Created OS            00 (0) 'MS-DOS'\n-65A4A8 Extract Zip Spec      14 (20) '2.0'\n-65A4A9 Extract OS            00 (0) 'MS-DOS'\n-65A4AA General Purpose Flag  0000 (0)\n-65A4AC Compression Method    0000 (0) 'Stored'\n-65A4AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A4B2 CRC                   00000000 (0)\n-65A4B6 Compressed Size       00000000 (0)\n-65A4BA Uncompressed Size     00000000 (0)\n-65A4BE Filename Length       005E (94)\n-65A4C0 Extra Length          0009 (9)\n-65A4C2 Comment Length        0000 (0)\n-65A4C4 Disk Start            0000 (0)\n-65A4C6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A4C8 Ext File Attributes   00000000 (0)\n-65A4CC Local Header Offset   00121D24 (1187108)\n-65A4D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A4D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A52E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A530   Length              0005 (5)\n-65A532   Flags               01 (1) 'Modification'\n-65A533   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A537 CENTRAL HEADER #441   02014B50 (33639248)\n-65A53B Created Zip Spec      14 (20) '2.0'\n-65A53C Created OS            00 (0) 'MS-DOS'\n-65A53D Extract Zip Spec      14 (20) '2.0'\n-65A53E Extract OS            00 (0) 'MS-DOS'\n-65A53F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65A541 Compression Method    0000 (0) 'Stored'\n-65A543 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A547 CRC                   95FAB1DA (2516234714)\n-65A54B Compressed Size       0000110D (4365)\n-65A54F Uncompressed Size     0000110D (4365)\n-65A553 Filename Length       0074 (116)\n-65A555 Extra Length          0009 (9)\n-65A557 Comment Length        0000 (0)\n-65A559 Disk Start            0000 (0)\n-65A55B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A55D Ext File Attributes   00000000 (0)\n-65A561 Local Header Offset   00121DA9 (1187241)\n-65A565 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A565: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A5D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A5DB   Length              0005 (5)\n-65A5DD   Flags               01 (1) 'Modification'\n-65A5DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A5E2 CENTRAL HEADER #442   02014B50 (33639248)\n-65A5E6 Created Zip Spec      14 (20) '2.0'\n-65A5E7 Created OS            00 (0) 'MS-DOS'\n-65A5E8 Extract Zip Spec      14 (20) '2.0'\n-65A5E9 Extract OS            00 (0) 'MS-DOS'\n-65A5EA General Purpose Flag  0000 (0)\n-65A5EC Compression Method    0000 (0) 'Stored'\n-65A5EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A5F2 CRC                   00000000 (0)\n-65A5F6 Compressed Size       00000000 (0)\n-65A5FA Uncompressed Size     00000000 (0)\n-65A5FE Filename Length       0061 (97)\n-65A600 Extra Length          0009 (9)\n-65A602 Comment Length        0000 (0)\n-65A604 Disk Start            0000 (0)\n-65A606 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A608 Ext File Attributes   00000000 (0)\n-65A60C Local Header Offset   00122F61 (1191777)\n-65A610 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A610: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A671 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A673   Length              0005 (5)\n-65A675   Flags               01 (1) 'Modification'\n-65A676   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A67A CENTRAL HEADER #443   02014B50 (33639248)\n-65A67E Created Zip Spec      14 (20) '2.0'\n-65A67F Created OS            00 (0) 'MS-DOS'\n-65A680 Extract Zip Spec      14 (20) '2.0'\n-65A681 Extract OS            00 (0) 'MS-DOS'\n-65A682 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65A684 Compression Method    0000 (0) 'Stored'\n-65A686 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A68A CRC                   B1E82858 (2984781912)\n-65A68E Compressed Size       000019D6 (6614)\n-65A692 Uncompressed Size     000019D6 (6614)\n-65A696 Filename Length       0077 (119)\n-65A698 Extra Length          0009 (9)\n-65A69A Comment Length        0000 (0)\n-65A69C Disk Start            0000 (0)\n-65A69E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A6A0 Ext File Attributes   00000000 (0)\n-65A6A4 Local Header Offset   00122FE9 (1191913)\n-65A6A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A6A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A71F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A721   Length              0005 (5)\n-65A723   Flags               01 (1) 'Modification'\n-65A724   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A728 CENTRAL HEADER #444   02014B50 (33639248)\n-65A72C Created Zip Spec      14 (20) '2.0'\n-65A72D Created OS            00 (0) 'MS-DOS'\n-65A72E Extract Zip Spec      14 (20) '2.0'\n-65A72F Extract OS            00 (0) 'MS-DOS'\n-65A730 General Purpose Flag  0000 (0)\n-65A732 Compression Method    0000 (0) 'Stored'\n-65A734 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A738 CRC                   00000000 (0)\n-65A73C Compressed Size       00000000 (0)\n-65A740 Uncompressed Size     00000000 (0)\n-65A744 Filename Length       005E (94)\n-65A746 Extra Length          0009 (9)\n-65A748 Comment Length        0000 (0)\n-65A74A Disk Start            0000 (0)\n-65A74C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A74E Ext File Attributes   00000000 (0)\n-65A752 Local Header Offset   00124A6D (1198701)\n-65A756 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A756: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A7B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A7B6   Length              0005 (5)\n-65A7B8   Flags               01 (1) 'Modification'\n-65A7B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A7BD CENTRAL HEADER #445   02014B50 (33639248)\n-65A7C1 Created Zip Spec      14 (20) '2.0'\n-65A7C2 Created OS            00 (0) 'MS-DOS'\n-65A7C3 Extract Zip Spec      14 (20) '2.0'\n-65A7C4 Extract OS            00 (0) 'MS-DOS'\n-65A7C5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65A7C7 Compression Method    0000 (0) 'Stored'\n-65A7C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A7CD CRC                   EA13965E (3927152222)\n-65A7D1 Compressed Size       00000F7E (3966)\n-65A7D5 Uncompressed Size     00000F7E (3966)\n-65A7D9 Filename Length       0074 (116)\n-65A7DB Extra Length          0009 (9)\n-65A7DD Comment Length        0000 (0)\n-65A7DF Disk Start            0000 (0)\n-65A7E1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A7E3 Ext File Attributes   00000000 (0)\n-65A7E7 Local Header Offset   00124AF2 (1198834)\n-65A7EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A7EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A85F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A861   Length              0005 (5)\n-65A863   Flags               01 (1) 'Modification'\n-65A864   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A868 CENTRAL HEADER #446   02014B50 (33639248)\n-65A86C Created Zip Spec      14 (20) '2.0'\n-65A86D Created OS            00 (0) 'MS-DOS'\n-65A86E Extract Zip Spec      14 (20) '2.0'\n-65A86F Extract OS            00 (0) 'MS-DOS'\n-65A870 General Purpose Flag  0000 (0)\n-65A872 Compression Method    0000 (0) 'Stored'\n-65A874 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A878 CRC                   00000000 (0)\n-65A87C Compressed Size       00000000 (0)\n-65A880 Uncompressed Size     00000000 (0)\n-65A884 Filename Length       0057 (87)\n-65A886 Extra Length          0009 (9)\n-65A888 Comment Length        0000 (0)\n-65A88A Disk Start            0000 (0)\n-65A88C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A88E Ext File Attributes   00000000 (0)\n-65A892 Local Header Offset   00125B1B (1202971)\n-65A896 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A896: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A8ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A8EF   Length              0005 (5)\n-65A8F1   Flags               01 (1) 'Modification'\n-65A8F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A8F6 CENTRAL HEADER #447   02014B50 (33639248)\n-65A8FA Created Zip Spec      14 (20) '2.0'\n-65A8FB Created OS            00 (0) 'MS-DOS'\n-65A8FC Extract Zip Spec      14 (20) '2.0'\n-65A8FD Extract OS            00 (0) 'MS-DOS'\n-65A8FE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65A900 Compression Method    0000 (0) 'Stored'\n-65A902 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A906 CRC                   C8903588 (3364894088)\n-65A90A Compressed Size       00002CD6 (11478)\n-65A90E Uncompressed Size     00002CD6 (11478)\n-65A912 Filename Length       006D (109)\n-65A914 Extra Length          0009 (9)\n-65A916 Comment Length        0000 (0)\n-65A918 Disk Start            0000 (0)\n-65A91A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A91C Ext File Attributes   00000000 (0)\n-65A920 Local Header Offset   00125B99 (1203097)\n-65A924 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A924: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65A991 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65A993   Length              0005 (5)\n-65A995   Flags               01 (1) 'Modification'\n-65A996   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65A99A CENTRAL HEADER #448   02014B50 (33639248)\n-65A99E Created Zip Spec      14 (20) '2.0'\n-65A99F Created OS            00 (0) 'MS-DOS'\n-65A9A0 Extract Zip Spec      14 (20) '2.0'\n-65A9A1 Extract OS            00 (0) 'MS-DOS'\n-65A9A2 General Purpose Flag  0000 (0)\n-65A9A4 Compression Method    0000 (0) 'Stored'\n-65A9A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65A9AA CRC                   00000000 (0)\n-65A9AE Compressed Size       00000000 (0)\n-65A9B2 Uncompressed Size     00000000 (0)\n-65A9B6 Filename Length       0068 (104)\n-65A9B8 Extra Length          0009 (9)\n-65A9BA Comment Length        0000 (0)\n-65A9BC Disk Start            0000 (0)\n-65A9BE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65A9C0 Ext File Attributes   00000000 (0)\n-65A9C4 Local Header Offset   00128913 (1214739)\n-65A9C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65A9C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65AA30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65AA32   Length              0005 (5)\n-65AA34   Flags               01 (1) 'Modification'\n-65AA35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65AA39 CENTRAL HEADER #449   02014B50 (33639248)\n-65AA3D Created Zip Spec      14 (20) '2.0'\n-65AA3E Created OS            00 (0) 'MS-DOS'\n-65AA3F Extract Zip Spec      14 (20) '2.0'\n-65AA40 Extract OS            00 (0) 'MS-DOS'\n-65AA41 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65AA43 Compression Method    0000 (0) 'Stored'\n-65AA45 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65AA49 CRC                   D19560D0 (3516227792)\n-65AA4D Compressed Size       00000A2F (2607)\n-65AA51 Uncompressed Size     00000A2F (2607)\n-65AA55 Filename Length       007E (126)\n-65AA57 Extra Length          0009 (9)\n-65AA59 Comment Length        0000 (0)\n-65AA5B Disk Start            0000 (0)\n-65AA5D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65AA5F Ext File Attributes   00000000 (0)\n-65AA63 Local Header Offset   001289A2 (1214882)\n-65AA67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65AA67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65AAE5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65AAE7   Length              0005 (5)\n-65AAE9   Flags               01 (1) 'Modification'\n-65AAEA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65AAEE CENTRAL HEADER #450   02014B50 (33639248)\n-65AAF2 Created Zip Spec      14 (20) '2.0'\n-65AAF3 Created OS            00 (0) 'MS-DOS'\n-65AAF4 Extract Zip Spec      14 (20) '2.0'\n-65AAF5 Extract OS            00 (0) 'MS-DOS'\n-65AAF6 General Purpose Flag  0000 (0)\n-65AAF8 Compression Method    0000 (0) 'Stored'\n-65AAFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65AAFE CRC                   00000000 (0)\n-65AB02 Compressed Size       00000000 (0)\n-65AB06 Uncompressed Size     00000000 (0)\n-65AB0A Filename Length       0032 (50)\n-65AB0C Extra Length          0009 (9)\n-65AB0E Comment Length        0000 (0)\n-65AB10 Disk Start            0000 (0)\n-65AB12 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65AB14 Ext File Attributes   00000000 (0)\n-65AB18 Local Header Offset   00129486 (1217670)\n-65AB1C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65AB1C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65AB4E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65AB50   Length              0005 (5)\n-65AB52   Flags               01 (1) 'Modification'\n-65AB53   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65AB57 CENTRAL HEADER #451   02014B50 (33639248)\n-65AB5B Created Zip Spec      14 (20) '2.0'\n-65AB5C Created OS            00 (0) 'MS-DOS'\n-65AB5D Extract Zip Spec      14 (20) '2.0'\n-65AB5E Extract OS            00 (0) 'MS-DOS'\n-65AB5F General Purpose Flag  0000 (0)\n-65AB61 Compression Method    0000 (0) 'Stored'\n-65AB63 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65AB67 CRC                   00000000 (0)\n-65AB6B Compressed Size       00000000 (0)\n-65AB6F Uncompressed Size     00000000 (0)\n-65AB73 Filename Length       0039 (57)\n-65AB75 Extra Length          0009 (9)\n-65AB77 Comment Length        0000 (0)\n-65AB79 Disk Start            0000 (0)\n-65AB7B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65AB7D Ext File Attributes   00000000 (0)\n-65AB81 Local Header Offset   001294DF (1217759)\n-65AB85 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65AB85: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65ABBE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65ABC0   Length              0005 (5)\n-65ABC2   Flags               01 (1) 'Modification'\n-65ABC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65ABC7 CENTRAL HEADER #452   02014B50 (33639248)\n-65ABCB Created Zip Spec      14 (20) '2.0'\n-65ABCC Created OS            00 (0) 'MS-DOS'\n-65ABCD Extract Zip Spec      14 (20) '2.0'\n-65ABCE Extract OS            00 (0) 'MS-DOS'\n-65ABCF General Purpose Flag  0000 (0)\n-65ABD1 Compression Method    0000 (0) 'Stored'\n-65ABD3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65ABD7 CRC                   00000000 (0)\n-65ABDB Compressed Size       00000000 (0)\n-65ABDF Uncompressed Size     00000000 (0)\n-65ABE3 Filename Length       006F (111)\n-65ABE5 Extra Length          0009 (9)\n-65ABE7 Comment Length        0000 (0)\n-65ABE9 Disk Start            0000 (0)\n-65ABEB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65ABED Ext File Attributes   00000000 (0)\n-65ABF1 Local Header Offset   0012953F (1217855)\n-65ABF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65ABF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65AC64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65AC66   Length              0005 (5)\n-65AC68   Flags               01 (1) 'Modification'\n-65AC69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65AC6D CENTRAL HEADER #453   02014B50 (33639248)\n-65AC71 Created Zip Spec      14 (20) '2.0'\n-65AC72 Created OS            00 (0) 'MS-DOS'\n-65AC73 Extract Zip Spec      14 (20) '2.0'\n-65AC74 Extract OS            00 (0) 'MS-DOS'\n-65AC75 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65AC77 Compression Method    0000 (0) 'Stored'\n-65AC79 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65AC7D CRC                   A1414F13 (2705411859)\n-65AC81 Compressed Size       0000521D (21021)\n-65AC85 Uncompressed Size     0000521D (21021)\n-65AC89 Filename Length       0085 (133)\n-65AC8B Extra Length          0009 (9)\n-65AC8D Comment Length        0000 (0)\n-65AC8F Disk Start            0000 (0)\n-65AC91 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65AC93 Ext File Attributes   00000000 (0)\n-65AC97 Local Header Offset   001295D5 (1218005)\n-65AC9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+65A406 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A408   Length              0005 (5)\n+65A40A   Flags               01 (1) 'Modification'\n+65A40B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A40F CENTRAL HEADER #338   02014B50 (33639248)\n+65A413 Created Zip Spec      14 (20) '2.0'\n+65A414 Created OS            00 (0) 'MS-DOS'\n+65A415 Extract Zip Spec      14 (20) '2.0'\n+65A416 Extract OS            00 (0) 'MS-DOS'\n+65A417 General Purpose Flag  0000 (0)\n+65A419 Compression Method    0000 (0) 'Stored'\n+65A41B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A41F CRC                   00000000 (0)\n+65A423 Compressed Size       00000000 (0)\n+65A427 Uncompressed Size     00000000 (0)\n+65A42B Filename Length       0024 (36)\n+65A42D Extra Length          0009 (9)\n+65A42F Comment Length        0000 (0)\n+65A431 Disk Start            0000 (0)\n+65A433 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A435 Ext File Attributes   00000000 (0)\n+65A439 Local Header Offset   000DE779 (911225)\n+65A43D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65A43D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A461 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A463   Length              0005 (5)\n+65A465   Flags               01 (1) 'Modification'\n+65A466   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A46A CENTRAL HEADER #339   02014B50 (33639248)\n+65A46E Created Zip Spec      14 (20) '2.0'\n+65A46F Created OS            00 (0) 'MS-DOS'\n+65A470 Extract Zip Spec      14 (20) '2.0'\n+65A471 Extract OS            00 (0) 'MS-DOS'\n+65A472 General Purpose Flag  0000 (0)\n+65A474 Compression Method    0000 (0) 'Stored'\n+65A476 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A47A CRC                   00000000 (0)\n+65A47E Compressed Size       00000000 (0)\n+65A482 Uncompressed Size     00000000 (0)\n+65A486 Filename Length       002B (43)\n+65A488 Extra Length          0009 (9)\n+65A48A Comment Length        0000 (0)\n+65A48C Disk Start            0000 (0)\n+65A48E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A490 Ext File Attributes   00000000 (0)\n+65A494 Local Header Offset   000DE7C4 (911300)\n+65A498 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65A498: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A4C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A4C5   Length              0005 (5)\n+65A4C7   Flags               01 (1) 'Modification'\n+65A4C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A4CC CENTRAL HEADER #340   02014B50 (33639248)\n+65A4D0 Created Zip Spec      14 (20) '2.0'\n+65A4D1 Created OS            00 (0) 'MS-DOS'\n+65A4D2 Extract Zip Spec      14 (20) '2.0'\n+65A4D3 Extract OS            00 (0) 'MS-DOS'\n+65A4D4 General Purpose Flag  0000 (0)\n+65A4D6 Compression Method    0000 (0) 'Stored'\n+65A4D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A4DC CRC                   00000000 (0)\n+65A4E0 Compressed Size       00000000 (0)\n+65A4E4 Uncompressed Size     00000000 (0)\n+65A4E8 Filename Length       0056 (86)\n+65A4EA Extra Length          0009 (9)\n+65A4EC Comment Length        0000 (0)\n+65A4EE Disk Start            0000 (0)\n+65A4F0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A4F2 Ext File Attributes   00000000 (0)\n+65A4F6 Local Header Offset   000DE816 (911382)\n+65A4FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65A4FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A550 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A552   Length              0005 (5)\n+65A554   Flags               01 (1) 'Modification'\n+65A555   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A559 CENTRAL HEADER #341   02014B50 (33639248)\n+65A55D Created Zip Spec      14 (20) '2.0'\n+65A55E Created OS            00 (0) 'MS-DOS'\n+65A55F Extract Zip Spec      14 (20) '2.0'\n+65A560 Extract OS            00 (0) 'MS-DOS'\n+65A561 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65A563 Compression Method    0000 (0) 'Stored'\n+65A565 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A569 CRC                   F32265E7 (4079117799)\n+65A56D Compressed Size       00001595 (5525)\n+65A571 Uncompressed Size     00001595 (5525)\n+65A575 Filename Length       006C (108)\n+65A577 Extra Length          0009 (9)\n+65A579 Comment Length        0000 (0)\n+65A57B Disk Start            0000 (0)\n+65A57D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A57F Ext File Attributes   00000000 (0)\n+65A583 Local Header Offset   000DE893 (911507)\n+65A587 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65A587: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A5F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A5F5   Length              0005 (5)\n+65A5F7   Flags               01 (1) 'Modification'\n+65A5F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A5FC CENTRAL HEADER #342   02014B50 (33639248)\n+65A600 Created Zip Spec      14 (20) '2.0'\n+65A601 Created OS            00 (0) 'MS-DOS'\n+65A602 Extract Zip Spec      14 (20) '2.0'\n+65A603 Extract OS            00 (0) 'MS-DOS'\n+65A604 General Purpose Flag  0000 (0)\n+65A606 Compression Method    0000 (0) 'Stored'\n+65A608 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A60C CRC                   00000000 (0)\n+65A610 Compressed Size       00000000 (0)\n+65A614 Uncompressed Size     00000000 (0)\n+65A618 Filename Length       0059 (89)\n+65A61A Extra Length          0009 (9)\n+65A61C Comment Length        0000 (0)\n+65A61E Disk Start            0000 (0)\n+65A620 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A622 Ext File Attributes   00000000 (0)\n+65A626 Local Header Offset   000DFECB (917195)\n+65A62A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65A62A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A683 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A685   Length              0005 (5)\n+65A687   Flags               01 (1) 'Modification'\n+65A688   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A68C CENTRAL HEADER #343   02014B50 (33639248)\n+65A690 Created Zip Spec      14 (20) '2.0'\n+65A691 Created OS            00 (0) 'MS-DOS'\n+65A692 Extract Zip Spec      14 (20) '2.0'\n+65A693 Extract OS            00 (0) 'MS-DOS'\n+65A694 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65A696 Compression Method    0000 (0) 'Stored'\n+65A698 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A69C CRC                   33231FD5 (857939925)\n+65A6A0 Compressed Size       00001399 (5017)\n+65A6A4 Uncompressed Size     00001399 (5017)\n+65A6A8 Filename Length       006F (111)\n+65A6AA Extra Length          0009 (9)\n+65A6AC Comment Length        0000 (0)\n+65A6AE Disk Start            0000 (0)\n+65A6B0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A6B2 Ext File Attributes   00000000 (0)\n+65A6B6 Local Header Offset   000DFF4B (917323)\n+65A6BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65A6BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A729 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A72B   Length              0005 (5)\n+65A72D   Flags               01 (1) 'Modification'\n+65A72E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A732 CENTRAL HEADER #344   02014B50 (33639248)\n+65A736 Created Zip Spec      14 (20) '2.0'\n+65A737 Created OS            00 (0) 'MS-DOS'\n+65A738 Extract Zip Spec      14 (20) '2.0'\n+65A739 Extract OS            00 (0) 'MS-DOS'\n+65A73A General Purpose Flag  0000 (0)\n+65A73C Compression Method    0000 (0) 'Stored'\n+65A73E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A742 CRC                   00000000 (0)\n+65A746 Compressed Size       00000000 (0)\n+65A74A Uncompressed Size     00000000 (0)\n+65A74E Filename Length       0055 (85)\n+65A750 Extra Length          0009 (9)\n+65A752 Comment Length        0000 (0)\n+65A754 Disk Start            0000 (0)\n+65A756 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A758 Ext File Attributes   00000000 (0)\n+65A75C Local Header Offset   000E138A (922506)\n+65A760 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65A760: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A7B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A7B7   Length              0005 (5)\n+65A7B9   Flags               01 (1) 'Modification'\n+65A7BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A7BE CENTRAL HEADER #345   02014B50 (33639248)\n+65A7C2 Created Zip Spec      14 (20) '2.0'\n+65A7C3 Created OS            00 (0) 'MS-DOS'\n+65A7C4 Extract Zip Spec      14 (20) '2.0'\n+65A7C5 Extract OS            00 (0) 'MS-DOS'\n+65A7C6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65A7C8 Compression Method    0000 (0) 'Stored'\n+65A7CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A7CE CRC                   62A57B9F (1655012255)\n+65A7D2 Compressed Size       00000AFB (2811)\n+65A7D6 Uncompressed Size     00000AFB (2811)\n+65A7DA Filename Length       006B (107)\n+65A7DC Extra Length          0009 (9)\n+65A7DE Comment Length        0000 (0)\n+65A7E0 Disk Start            0000 (0)\n+65A7E2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A7E4 Ext File Attributes   00000000 (0)\n+65A7E8 Local Header Offset   000E1406 (922630)\n+65A7EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65A7EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A857 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A859   Length              0005 (5)\n+65A85B   Flags               01 (1) 'Modification'\n+65A85C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A860 CENTRAL HEADER #346   02014B50 (33639248)\n+65A864 Created Zip Spec      14 (20) '2.0'\n+65A865 Created OS            00 (0) 'MS-DOS'\n+65A866 Extract Zip Spec      14 (20) '2.0'\n+65A867 Extract OS            00 (0) 'MS-DOS'\n+65A868 General Purpose Flag  0000 (0)\n+65A86A Compression Method    0000 (0) 'Stored'\n+65A86C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A870 CRC                   00000000 (0)\n+65A874 Compressed Size       00000000 (0)\n+65A878 Uncompressed Size     00000000 (0)\n+65A87C Filename Length       0023 (35)\n+65A87E Extra Length          0009 (9)\n+65A880 Comment Length        0000 (0)\n+65A882 Disk Start            0000 (0)\n+65A884 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A886 Ext File Attributes   00000000 (0)\n+65A88A Local Header Offset   000E1FA3 (925603)\n+65A88E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65A88E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A8B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A8B3   Length              0005 (5)\n+65A8B5   Flags               01 (1) 'Modification'\n+65A8B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A8BA CENTRAL HEADER #347   02014B50 (33639248)\n+65A8BE Created Zip Spec      14 (20) '2.0'\n+65A8BF Created OS            00 (0) 'MS-DOS'\n+65A8C0 Extract Zip Spec      14 (20) '2.0'\n+65A8C1 Extract OS            00 (0) 'MS-DOS'\n+65A8C2 General Purpose Flag  0000 (0)\n+65A8C4 Compression Method    0000 (0) 'Stored'\n+65A8C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A8CA CRC                   00000000 (0)\n+65A8CE Compressed Size       00000000 (0)\n+65A8D2 Uncompressed Size     00000000 (0)\n+65A8D6 Filename Length       002A (42)\n+65A8D8 Extra Length          0009 (9)\n+65A8DA Comment Length        0000 (0)\n+65A8DC Disk Start            0000 (0)\n+65A8DE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A8E0 Ext File Attributes   00000000 (0)\n+65A8E4 Local Header Offset   000E1FED (925677)\n+65A8E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65A8E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A912 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A914   Length              0005 (5)\n+65A916   Flags               01 (1) 'Modification'\n+65A917   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A91B CENTRAL HEADER #348   02014B50 (33639248)\n+65A91F Created Zip Spec      14 (20) '2.0'\n+65A920 Created OS            00 (0) 'MS-DOS'\n+65A921 Extract Zip Spec      14 (20) '2.0'\n+65A922 Extract OS            00 (0) 'MS-DOS'\n+65A923 General Purpose Flag  0000 (0)\n+65A925 Compression Method    0000 (0) 'Stored'\n+65A927 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A92B CRC                   00000000 (0)\n+65A92F Compressed Size       00000000 (0)\n+65A933 Uncompressed Size     00000000 (0)\n+65A937 Filename Length       0052 (82)\n+65A939 Extra Length          0009 (9)\n+65A93B Comment Length        0000 (0)\n+65A93D Disk Start            0000 (0)\n+65A93F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A941 Ext File Attributes   00000000 (0)\n+65A945 Local Header Offset   000E203E (925758)\n+65A949 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65A949: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65A99B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65A99D   Length              0005 (5)\n+65A99F   Flags               01 (1) 'Modification'\n+65A9A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65A9A4 CENTRAL HEADER #349   02014B50 (33639248)\n+65A9A8 Created Zip Spec      14 (20) '2.0'\n+65A9A9 Created OS            00 (0) 'MS-DOS'\n+65A9AA Extract Zip Spec      14 (20) '2.0'\n+65A9AB Extract OS            00 (0) 'MS-DOS'\n+65A9AC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65A9AE Compression Method    0000 (0) 'Stored'\n+65A9B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65A9B4 CRC                   63C353AF (1673745327)\n+65A9B8 Compressed Size       00000CF8 (3320)\n+65A9BC Uncompressed Size     00000CF8 (3320)\n+65A9C0 Filename Length       0068 (104)\n+65A9C2 Extra Length          0009 (9)\n+65A9C4 Comment Length        0000 (0)\n+65A9C6 Disk Start            0000 (0)\n+65A9C8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65A9CA Ext File Attributes   00000000 (0)\n+65A9CE Local Header Offset   000E20B7 (925879)\n+65A9D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65A9D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65AA3A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65AA3C   Length              0005 (5)\n+65AA3E   Flags               01 (1) 'Modification'\n+65AA3F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65AA43 CENTRAL HEADER #350   02014B50 (33639248)\n+65AA47 Created Zip Spec      14 (20) '2.0'\n+65AA48 Created OS            00 (0) 'MS-DOS'\n+65AA49 Extract Zip Spec      14 (20) '2.0'\n+65AA4A Extract OS            00 (0) 'MS-DOS'\n+65AA4B General Purpose Flag  0000 (0)\n+65AA4D Compression Method    0000 (0) 'Stored'\n+65AA4F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65AA53 CRC                   00000000 (0)\n+65AA57 Compressed Size       00000000 (0)\n+65AA5B Uncompressed Size     00000000 (0)\n+65AA5F Filename Length       0059 (89)\n+65AA61 Extra Length          0009 (9)\n+65AA63 Comment Length        0000 (0)\n+65AA65 Disk Start            0000 (0)\n+65AA67 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65AA69 Ext File Attributes   00000000 (0)\n+65AA6D Local Header Offset   000E2E4E (929358)\n+65AA71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65AA71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65AACA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65AACC   Length              0005 (5)\n+65AACE   Flags               01 (1) 'Modification'\n+65AACF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65AAD3 CENTRAL HEADER #351   02014B50 (33639248)\n+65AAD7 Created Zip Spec      14 (20) '2.0'\n+65AAD8 Created OS            00 (0) 'MS-DOS'\n+65AAD9 Extract Zip Spec      14 (20) '2.0'\n+65AADA Extract OS            00 (0) 'MS-DOS'\n+65AADB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65AADD Compression Method    0000 (0) 'Stored'\n+65AADF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65AAE3 CRC                   C64481A5 (3326378405)\n+65AAE7 Compressed Size       00000723 (1827)\n+65AAEB Uncompressed Size     00000723 (1827)\n+65AAEF Filename Length       006F (111)\n+65AAF1 Extra Length          0009 (9)\n+65AAF3 Comment Length        0000 (0)\n+65AAF5 Disk Start            0000 (0)\n+65AAF7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65AAF9 Ext File Attributes   00000000 (0)\n+65AAFD Local Header Offset   000E2ECE (929486)\n+65AB01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65AB01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65AB70 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65AB72   Length              0005 (5)\n+65AB74   Flags               01 (1) 'Modification'\n+65AB75   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65AB79 CENTRAL HEADER #352   02014B50 (33639248)\n+65AB7D Created Zip Spec      14 (20) '2.0'\n+65AB7E Created OS            00 (0) 'MS-DOS'\n+65AB7F Extract Zip Spec      14 (20) '2.0'\n+65AB80 Extract OS            00 (0) 'MS-DOS'\n+65AB81 General Purpose Flag  0000 (0)\n+65AB83 Compression Method    0000 (0) 'Stored'\n+65AB85 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65AB89 CRC                   00000000 (0)\n+65AB8D Compressed Size       00000000 (0)\n+65AB91 Uncompressed Size     00000000 (0)\n+65AB95 Filename Length       0057 (87)\n+65AB97 Extra Length          0009 (9)\n+65AB99 Comment Length        0000 (0)\n+65AB9B Disk Start            0000 (0)\n+65AB9D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65AB9F Ext File Attributes   00000000 (0)\n+65ABA3 Local Header Offset   000E3697 (931479)\n+65ABA7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65ABA7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65ABFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65AC00   Length              0005 (5)\n+65AC02   Flags               01 (1) 'Modification'\n+65AC03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65AC07 CENTRAL HEADER #353   02014B50 (33639248)\n+65AC0B Created Zip Spec      14 (20) '2.0'\n+65AC0C Created OS            00 (0) 'MS-DOS'\n+65AC0D Extract Zip Spec      14 (20) '2.0'\n+65AC0E Extract OS            00 (0) 'MS-DOS'\n+65AC0F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65AC11 Compression Method    0000 (0) 'Stored'\n+65AC13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65AC17 CRC                   39649106 (962892038)\n+65AC1B Compressed Size       000006E2 (1762)\n+65AC1F Uncompressed Size     000006E2 (1762)\n+65AC23 Filename Length       006D (109)\n+65AC25 Extra Length          0009 (9)\n+65AC27 Comment Length        0000 (0)\n+65AC29 Disk Start            0000 (0)\n+65AC2B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65AC2D Ext File Attributes   00000000 (0)\n+65AC31 Local Header Offset   000E3715 (931605)\n+65AC35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65AC35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65ACA2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65ACA4   Length              0005 (5)\n+65ACA6   Flags               01 (1) 'Modification'\n+65ACA7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65ACAB CENTRAL HEADER #354   02014B50 (33639248)\n+65ACAF Created Zip Spec      14 (20) '2.0'\n+65ACB0 Created OS            00 (0) 'MS-DOS'\n+65ACB1 Extract Zip Spec      14 (20) '2.0'\n+65ACB2 Extract OS            00 (0) 'MS-DOS'\n+65ACB3 General Purpose Flag  0000 (0)\n+65ACB5 Compression Method    0000 (0) 'Stored'\n+65ACB7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65ACBB CRC                   00000000 (0)\n+65ACBF Compressed Size       00000000 (0)\n+65ACC3 Uncompressed Size     00000000 (0)\n+65ACC7 Filename Length       0052 (82)\n+65ACC9 Extra Length          0009 (9)\n+65ACCB Comment Length        0000 (0)\n+65ACCD Disk Start            0000 (0)\n+65ACCF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65ACD1 Ext File Attributes   00000000 (0)\n+65ACD5 Local Header Offset   000E3E9B (933531)\n+65ACD9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65ACD9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65AD2B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65AD2D   Length              0005 (5)\n+65AD2F   Flags               01 (1) 'Modification'\n+65AD30   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65AD34 CENTRAL HEADER #355   02014B50 (33639248)\n+65AD38 Created Zip Spec      14 (20) '2.0'\n+65AD39 Created OS            00 (0) 'MS-DOS'\n+65AD3A Extract Zip Spec      14 (20) '2.0'\n+65AD3B Extract OS            00 (0) 'MS-DOS'\n+65AD3C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65AD3E Compression Method    0000 (0) 'Stored'\n+65AD40 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65AD44 CRC                   8DC8B44C (2378740812)\n+65AD48 Compressed Size       00000782 (1922)\n+65AD4C Uncompressed Size     00000782 (1922)\n+65AD50 Filename Length       0068 (104)\n+65AD52 Extra Length          0009 (9)\n+65AD54 Comment Length        0000 (0)\n+65AD56 Disk Start            0000 (0)\n+65AD58 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65AD5A Ext File Attributes   00000000 (0)\n+65AD5E Local Header Offset   000E3F14 (933652)\n+65AD62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65AD62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65ADCA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65ADCC   Length              0005 (5)\n+65ADCE   Flags               01 (1) 'Modification'\n+65ADCF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65ADD3 CENTRAL HEADER #356   02014B50 (33639248)\n+65ADD7 Created Zip Spec      14 (20) '2.0'\n+65ADD8 Created OS            00 (0) 'MS-DOS'\n+65ADD9 Extract Zip Spec      14 (20) '2.0'\n+65ADDA Extract OS            00 (0) 'MS-DOS'\n+65ADDB General Purpose Flag  0000 (0)\n+65ADDD Compression Method    0000 (0) 'Stored'\n+65ADDF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65ADE3 CRC                   00000000 (0)\n+65ADE7 Compressed Size       00000000 (0)\n+65ADEB Uncompressed Size     00000000 (0)\n+65ADEF Filename Length       0023 (35)\n+65ADF1 Extra Length          0009 (9)\n+65ADF3 Comment Length        0000 (0)\n+65ADF5 Disk Start            0000 (0)\n+65ADF7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65ADF9 Ext File Attributes   00000000 (0)\n+65ADFD Local Header Offset   000E4735 (935733)\n+65AE01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65AE01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65AE24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65AE26   Length              0005 (5)\n+65AE28   Flags               01 (1) 'Modification'\n+65AE29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65AE2D CENTRAL HEADER #357   02014B50 (33639248)\n+65AE31 Created Zip Spec      14 (20) '2.0'\n+65AE32 Created OS            00 (0) 'MS-DOS'\n+65AE33 Extract Zip Spec      14 (20) '2.0'\n+65AE34 Extract OS            00 (0) 'MS-DOS'\n+65AE35 General Purpose Flag  0000 (0)\n+65AE37 Compression Method    0000 (0) 'Stored'\n+65AE39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65AE3D CRC                   00000000 (0)\n+65AE41 Compressed Size       00000000 (0)\n+65AE45 Uncompressed Size     00000000 (0)\n+65AE49 Filename Length       002A (42)\n+65AE4B Extra Length          0009 (9)\n+65AE4D Comment Length        0000 (0)\n+65AE4F Disk Start            0000 (0)\n+65AE51 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65AE53 Ext File Attributes   00000000 (0)\n+65AE57 Local Header Offset   000E477F (935807)\n+65AE5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65AE5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65AE85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65AE87   Length              0005 (5)\n+65AE89   Flags               01 (1) 'Modification'\n+65AE8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65AE8E CENTRAL HEADER #358   02014B50 (33639248)\n+65AE92 Created Zip Spec      14 (20) '2.0'\n+65AE93 Created OS            00 (0) 'MS-DOS'\n+65AE94 Extract Zip Spec      14 (20) '2.0'\n+65AE95 Extract OS            00 (0) 'MS-DOS'\n+65AE96 General Purpose Flag  0000 (0)\n+65AE98 Compression Method    0000 (0) 'Stored'\n+65AE9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65AE9E CRC                   00000000 (0)\n+65AEA2 Compressed Size       00000000 (0)\n+65AEA6 Uncompressed Size     00000000 (0)\n+65AEAA Filename Length       0052 (82)\n+65AEAC Extra Length          0009 (9)\n+65AEAE Comment Length        0000 (0)\n+65AEB0 Disk Start            0000 (0)\n+65AEB2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65AEB4 Ext File Attributes   00000000 (0)\n+65AEB8 Local Header Offset   000E47D0 (935888)\n+65AEBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65AEBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65AF0E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65AF10   Length              0005 (5)\n+65AF12   Flags               01 (1) 'Modification'\n+65AF13   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65AF17 CENTRAL HEADER #359   02014B50 (33639248)\n+65AF1B Created Zip Spec      14 (20) '2.0'\n+65AF1C Created OS            00 (0) 'MS-DOS'\n+65AF1D Extract Zip Spec      14 (20) '2.0'\n+65AF1E Extract OS            00 (0) 'MS-DOS'\n+65AF1F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65AF21 Compression Method    0000 (0) 'Stored'\n+65AF23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65AF27 CRC                   605D4301 (1616724737)\n+65AF2B Compressed Size       00000914 (2324)\n+65AF2F Uncompressed Size     00000914 (2324)\n+65AF33 Filename Length       0068 (104)\n+65AF35 Extra Length          0009 (9)\n+65AF37 Comment Length        0000 (0)\n+65AF39 Disk Start            0000 (0)\n+65AF3B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65AF3D Ext File Attributes   00000000 (0)\n+65AF41 Local Header Offset   000E4849 (936009)\n+65AF45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65AF45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65AFAD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65AFAF   Length              0005 (5)\n+65AFB1   Flags               01 (1) 'Modification'\n+65AFB2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65AFB6 CENTRAL HEADER #360   02014B50 (33639248)\n+65AFBA Created Zip Spec      14 (20) '2.0'\n+65AFBB Created OS            00 (0) 'MS-DOS'\n+65AFBC Extract Zip Spec      14 (20) '2.0'\n+65AFBD Extract OS            00 (0) 'MS-DOS'\n+65AFBE General Purpose Flag  0000 (0)\n+65AFC0 Compression Method    0000 (0) 'Stored'\n+65AFC2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65AFC6 CRC                   00000000 (0)\n+65AFCA Compressed Size       00000000 (0)\n+65AFCE Uncompressed Size     00000000 (0)\n+65AFD2 Filename Length       005F (95)\n+65AFD4 Extra Length          0009 (9)\n+65AFD6 Comment Length        0000 (0)\n+65AFD8 Disk Start            0000 (0)\n+65AFDA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65AFDC Ext File Attributes   00000000 (0)\n+65AFE0 Local Header Offset   000E51FC (938492)\n+65AFE4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65AFE4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B043 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B045   Length              0005 (5)\n+65B047   Flags               01 (1) 'Modification'\n+65B048   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B04C CENTRAL HEADER #361   02014B50 (33639248)\n+65B050 Created Zip Spec      14 (20) '2.0'\n+65B051 Created OS            00 (0) 'MS-DOS'\n+65B052 Extract Zip Spec      14 (20) '2.0'\n+65B053 Extract OS            00 (0) 'MS-DOS'\n+65B054 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65B056 Compression Method    0000 (0) 'Stored'\n+65B058 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B05C CRC                   A64E298E (2790140302)\n+65B060 Compressed Size       000007A5 (1957)\n+65B064 Uncompressed Size     000007A5 (1957)\n+65B068 Filename Length       0075 (117)\n+65B06A Extra Length          0009 (9)\n+65B06C Comment Length        0000 (0)\n+65B06E Disk Start            0000 (0)\n+65B070 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B072 Ext File Attributes   00000000 (0)\n+65B076 Local Header Offset   000E5282 (938626)\n+65B07A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B07A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B0EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B0F1   Length              0005 (5)\n+65B0F3   Flags               01 (1) 'Modification'\n+65B0F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B0F8 CENTRAL HEADER #362   02014B50 (33639248)\n+65B0FC Created Zip Spec      14 (20) '2.0'\n+65B0FD Created OS            00 (0) 'MS-DOS'\n+65B0FE Extract Zip Spec      14 (20) '2.0'\n+65B0FF Extract OS            00 (0) 'MS-DOS'\n+65B100 General Purpose Flag  0000 (0)\n+65B102 Compression Method    0000 (0) 'Stored'\n+65B104 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B108 CRC                   00000000 (0)\n+65B10C Compressed Size       00000000 (0)\n+65B110 Uncompressed Size     00000000 (0)\n+65B114 Filename Length       0058 (88)\n+65B116 Extra Length          0009 (9)\n+65B118 Comment Length        0000 (0)\n+65B11A Disk Start            0000 (0)\n+65B11C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B11E Ext File Attributes   00000000 (0)\n+65B122 Local Header Offset   000E5AD3 (940755)\n+65B126 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B126: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B17E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B180   Length              0005 (5)\n+65B182   Flags               01 (1) 'Modification'\n+65B183   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B187 CENTRAL HEADER #363   02014B50 (33639248)\n+65B18B Created Zip Spec      14 (20) '2.0'\n+65B18C Created OS            00 (0) 'MS-DOS'\n+65B18D Extract Zip Spec      14 (20) '2.0'\n+65B18E Extract OS            00 (0) 'MS-DOS'\n+65B18F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65B191 Compression Method    0000 (0) 'Stored'\n+65B193 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B197 CRC                   937D5C9D (2474466461)\n+65B19B Compressed Size       00000F43 (3907)\n+65B19F Uncompressed Size     00000F43 (3907)\n+65B1A3 Filename Length       006E (110)\n+65B1A5 Extra Length          0009 (9)\n+65B1A7 Comment Length        0000 (0)\n+65B1A9 Disk Start            0000 (0)\n+65B1AB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B1AD Ext File Attributes   00000000 (0)\n+65B1B1 Local Header Offset   000E5B52 (940882)\n+65B1B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B1B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B223 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B225   Length              0005 (5)\n+65B227   Flags               01 (1) 'Modification'\n+65B228   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B22C CENTRAL HEADER #364   02014B50 (33639248)\n+65B230 Created Zip Spec      14 (20) '2.0'\n+65B231 Created OS            00 (0) 'MS-DOS'\n+65B232 Extract Zip Spec      14 (20) '2.0'\n+65B233 Extract OS            00 (0) 'MS-DOS'\n+65B234 General Purpose Flag  0000 (0)\n+65B236 Compression Method    0000 (0) 'Stored'\n+65B238 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B23C CRC                   00000000 (0)\n+65B240 Compressed Size       00000000 (0)\n+65B244 Uncompressed Size     00000000 (0)\n+65B248 Filename Length       0025 (37)\n+65B24A Extra Length          0009 (9)\n+65B24C Comment Length        0000 (0)\n+65B24E Disk Start            0000 (0)\n+65B250 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B252 Ext File Attributes   00000000 (0)\n+65B256 Local Header Offset   000E6B3A (944954)\n+65B25A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B25A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B27F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B281   Length              0005 (5)\n+65B283   Flags               01 (1) 'Modification'\n+65B284   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B288 CENTRAL HEADER #365   02014B50 (33639248)\n+65B28C Created Zip Spec      14 (20) '2.0'\n+65B28D Created OS            00 (0) 'MS-DOS'\n+65B28E Extract Zip Spec      14 (20) '2.0'\n+65B28F Extract OS            00 (0) 'MS-DOS'\n+65B290 General Purpose Flag  0000 (0)\n+65B292 Compression Method    0000 (0) 'Stored'\n+65B294 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B298 CRC                   00000000 (0)\n+65B29C Compressed Size       00000000 (0)\n+65B2A0 Uncompressed Size     00000000 (0)\n+65B2A4 Filename Length       002C (44)\n+65B2A6 Extra Length          0009 (9)\n+65B2A8 Comment Length        0000 (0)\n+65B2AA Disk Start            0000 (0)\n+65B2AC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B2AE Ext File Attributes   00000000 (0)\n+65B2B2 Local Header Offset   000E6B86 (945030)\n+65B2B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B2B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B2E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B2E4   Length              0005 (5)\n+65B2E6   Flags               01 (1) 'Modification'\n+65B2E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B2EB CENTRAL HEADER #366   02014B50 (33639248)\n+65B2EF Created Zip Spec      14 (20) '2.0'\n+65B2F0 Created OS            00 (0) 'MS-DOS'\n+65B2F1 Extract Zip Spec      14 (20) '2.0'\n+65B2F2 Extract OS            00 (0) 'MS-DOS'\n+65B2F3 General Purpose Flag  0000 (0)\n+65B2F5 Compression Method    0000 (0) 'Stored'\n+65B2F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B2FB CRC                   00000000 (0)\n+65B2FF Compressed Size       00000000 (0)\n+65B303 Uncompressed Size     00000000 (0)\n+65B307 Filename Length       005C (92)\n+65B309 Extra Length          0009 (9)\n+65B30B Comment Length        0000 (0)\n+65B30D Disk Start            0000 (0)\n+65B30F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B311 Ext File Attributes   00000000 (0)\n+65B315 Local Header Offset   000E6BD9 (945113)\n+65B319 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B319: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B375 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B377   Length              0005 (5)\n+65B379   Flags               01 (1) 'Modification'\n+65B37A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B37E CENTRAL HEADER #367   02014B50 (33639248)\n+65B382 Created Zip Spec      14 (20) '2.0'\n+65B383 Created OS            00 (0) 'MS-DOS'\n+65B384 Extract Zip Spec      14 (20) '2.0'\n+65B385 Extract OS            00 (0) 'MS-DOS'\n+65B386 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65B388 Compression Method    0000 (0) 'Stored'\n+65B38A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B38E CRC                   335CA1CD (861708749)\n+65B392 Compressed Size       00000E9A (3738)\n+65B396 Uncompressed Size     00000E9A (3738)\n+65B39A Filename Length       0072 (114)\n+65B39C Extra Length          0009 (9)\n+65B39E Comment Length        0000 (0)\n+65B3A0 Disk Start            0000 (0)\n+65B3A2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B3A4 Ext File Attributes   00000000 (0)\n+65B3A8 Local Header Offset   000E6C5C (945244)\n+65B3AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B3AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B41E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B420   Length              0005 (5)\n+65B422   Flags               01 (1) 'Modification'\n+65B423   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B427 CENTRAL HEADER #368   02014B50 (33639248)\n+65B42B Created Zip Spec      14 (20) '2.0'\n+65B42C Created OS            00 (0) 'MS-DOS'\n+65B42D Extract Zip Spec      14 (20) '2.0'\n+65B42E Extract OS            00 (0) 'MS-DOS'\n+65B42F General Purpose Flag  0000 (0)\n+65B431 Compression Method    0000 (0) 'Stored'\n+65B433 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B437 CRC                   00000000 (0)\n+65B43B Compressed Size       00000000 (0)\n+65B43F Uncompressed Size     00000000 (0)\n+65B443 Filename Length       0068 (104)\n+65B445 Extra Length          0009 (9)\n+65B447 Comment Length        0000 (0)\n+65B449 Disk Start            0000 (0)\n+65B44B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B44D Ext File Attributes   00000000 (0)\n+65B451 Local Header Offset   000E7B9F (949151)\n+65B455 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B455: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B4BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B4BF   Length              0005 (5)\n+65B4C1   Flags               01 (1) 'Modification'\n+65B4C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B4C6 CENTRAL HEADER #369   02014B50 (33639248)\n+65B4CA Created Zip Spec      14 (20) '2.0'\n+65B4CB Created OS            00 (0) 'MS-DOS'\n+65B4CC Extract Zip Spec      14 (20) '2.0'\n+65B4CD Extract OS            00 (0) 'MS-DOS'\n+65B4CE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65B4D0 Compression Method    0000 (0) 'Stored'\n+65B4D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B4D6 CRC                   3EE7FDDD (1055391197)\n+65B4DA Compressed Size       00001059 (4185)\n+65B4DE Uncompressed Size     00001059 (4185)\n+65B4E2 Filename Length       007E (126)\n+65B4E4 Extra Length          0009 (9)\n+65B4E6 Comment Length        0000 (0)\n+65B4E8 Disk Start            0000 (0)\n+65B4EA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B4EC Ext File Attributes   00000000 (0)\n+65B4F0 Local Header Offset   000E7C2E (949294)\n+65B4F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B4F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B572 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B574   Length              0005 (5)\n+65B576   Flags               01 (1) 'Modification'\n+65B577   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B57B CENTRAL HEADER #370   02014B50 (33639248)\n+65B57F Created Zip Spec      14 (20) '2.0'\n+65B580 Created OS            00 (0) 'MS-DOS'\n+65B581 Extract Zip Spec      14 (20) '2.0'\n+65B582 Extract OS            00 (0) 'MS-DOS'\n+65B583 General Purpose Flag  0000 (0)\n+65B585 Compression Method    0000 (0) 'Stored'\n+65B587 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B58B CRC                   00000000 (0)\n+65B58F Compressed Size       00000000 (0)\n+65B593 Uncompressed Size     00000000 (0)\n+65B597 Filename Length       0025 (37)\n+65B599 Extra Length          0009 (9)\n+65B59B Comment Length        0000 (0)\n+65B59D Disk Start            0000 (0)\n+65B59F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B5A1 Ext File Attributes   00000000 (0)\n+65B5A5 Local Header Offset   000E8D3C (953660)\n+65B5A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B5A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B5CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B5D0   Length              0005 (5)\n+65B5D2   Flags               01 (1) 'Modification'\n+65B5D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B5D7 CENTRAL HEADER #371   02014B50 (33639248)\n+65B5DB Created Zip Spec      14 (20) '2.0'\n+65B5DC Created OS            00 (0) 'MS-DOS'\n+65B5DD Extract Zip Spec      14 (20) '2.0'\n+65B5DE Extract OS            00 (0) 'MS-DOS'\n+65B5DF General Purpose Flag  0000 (0)\n+65B5E1 Compression Method    0000 (0) 'Stored'\n+65B5E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B5E7 CRC                   00000000 (0)\n+65B5EB Compressed Size       00000000 (0)\n+65B5EF Uncompressed Size     00000000 (0)\n+65B5F3 Filename Length       002C (44)\n+65B5F5 Extra Length          0009 (9)\n+65B5F7 Comment Length        0000 (0)\n+65B5F9 Disk Start            0000 (0)\n+65B5FB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B5FD Ext File Attributes   00000000 (0)\n+65B601 Local Header Offset   000E8D88 (953736)\n+65B605 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B605: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B631 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B633   Length              0005 (5)\n+65B635   Flags               01 (1) 'Modification'\n+65B636   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B63A CENTRAL HEADER #372   02014B50 (33639248)\n+65B63E Created Zip Spec      14 (20) '2.0'\n+65B63F Created OS            00 (0) 'MS-DOS'\n+65B640 Extract Zip Spec      14 (20) '2.0'\n+65B641 Extract OS            00 (0) 'MS-DOS'\n+65B642 General Purpose Flag  0000 (0)\n+65B644 Compression Method    0000 (0) 'Stored'\n+65B646 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B64A CRC                   00000000 (0)\n+65B64E Compressed Size       00000000 (0)\n+65B652 Uncompressed Size     00000000 (0)\n+65B656 Filename Length       005A (90)\n+65B658 Extra Length          0009 (9)\n+65B65A Comment Length        0000 (0)\n+65B65C Disk Start            0000 (0)\n+65B65E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B660 Ext File Attributes   00000000 (0)\n+65B664 Local Header Offset   000E8DDB (953819)\n+65B668 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B668: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B6C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B6C4   Length              0005 (5)\n+65B6C6   Flags               01 (1) 'Modification'\n+65B6C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B6CB CENTRAL HEADER #373   02014B50 (33639248)\n+65B6CF Created Zip Spec      14 (20) '2.0'\n+65B6D0 Created OS            00 (0) 'MS-DOS'\n+65B6D1 Extract Zip Spec      14 (20) '2.0'\n+65B6D2 Extract OS            00 (0) 'MS-DOS'\n+65B6D3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65B6D5 Compression Method    0000 (0) 'Stored'\n+65B6D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B6DB CRC                   0944969F (155489951)\n+65B6DF Compressed Size       000017C7 (6087)\n+65B6E3 Uncompressed Size     000017C7 (6087)\n+65B6E7 Filename Length       0070 (112)\n+65B6E9 Extra Length          0009 (9)\n+65B6EB Comment Length        0000 (0)\n+65B6ED Disk Start            0000 (0)\n+65B6EF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B6F1 Ext File Attributes   00000000 (0)\n+65B6F5 Local Header Offset   000E8E5C (953948)\n+65B6F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B6F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B769 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B76B   Length              0005 (5)\n+65B76D   Flags               01 (1) 'Modification'\n+65B76E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B772 CENTRAL HEADER #374   02014B50 (33639248)\n+65B776 Created Zip Spec      14 (20) '2.0'\n+65B777 Created OS            00 (0) 'MS-DOS'\n+65B778 Extract Zip Spec      14 (20) '2.0'\n+65B779 Extract OS            00 (0) 'MS-DOS'\n+65B77A General Purpose Flag  0000 (0)\n+65B77C Compression Method    0000 (0) 'Stored'\n+65B77E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B782 CRC                   00000000 (0)\n+65B786 Compressed Size       00000000 (0)\n+65B78A Uncompressed Size     00000000 (0)\n+65B78E Filename Length       0027 (39)\n+65B790 Extra Length          0009 (9)\n+65B792 Comment Length        0000 (0)\n+65B794 Disk Start            0000 (0)\n+65B796 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B798 Ext File Attributes   00000000 (0)\n+65B79C Local Header Offset   000EA6CA (960202)\n+65B7A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B7A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B7C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B7C9   Length              0005 (5)\n+65B7CB   Flags               01 (1) 'Modification'\n+65B7CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B7D0 CENTRAL HEADER #375   02014B50 (33639248)\n+65B7D4 Created Zip Spec      14 (20) '2.0'\n+65B7D5 Created OS            00 (0) 'MS-DOS'\n+65B7D6 Extract Zip Spec      14 (20) '2.0'\n+65B7D7 Extract OS            00 (0) 'MS-DOS'\n+65B7D8 General Purpose Flag  0000 (0)\n+65B7DA Compression Method    0000 (0) 'Stored'\n+65B7DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B7E0 CRC                   00000000 (0)\n+65B7E4 Compressed Size       00000000 (0)\n+65B7E8 Uncompressed Size     00000000 (0)\n+65B7EC Filename Length       002E (46)\n+65B7EE Extra Length          0009 (9)\n+65B7F0 Comment Length        0000 (0)\n+65B7F2 Disk Start            0000 (0)\n+65B7F4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B7F6 Ext File Attributes   00000000 (0)\n+65B7FA Local Header Offset   000EA718 (960280)\n+65B7FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B7FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B82C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B82E   Length              0005 (5)\n+65B830   Flags               01 (1) 'Modification'\n+65B831   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B835 CENTRAL HEADER #376   02014B50 (33639248)\n+65B839 Created Zip Spec      14 (20) '2.0'\n+65B83A Created OS            00 (0) 'MS-DOS'\n+65B83B Extract Zip Spec      14 (20) '2.0'\n+65B83C Extract OS            00 (0) 'MS-DOS'\n+65B83D General Purpose Flag  0000 (0)\n+65B83F Compression Method    0000 (0) 'Stored'\n+65B841 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B845 CRC                   00000000 (0)\n+65B849 Compressed Size       00000000 (0)\n+65B84D Uncompressed Size     00000000 (0)\n+65B851 Filename Length       0067 (103)\n+65B853 Extra Length          0009 (9)\n+65B855 Comment Length        0000 (0)\n+65B857 Disk Start            0000 (0)\n+65B859 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B85B Ext File Attributes   00000000 (0)\n+65B85F Local Header Offset   000EA76D (960365)\n+65B863 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B863: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B8CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B8CC   Length              0005 (5)\n+65B8CE   Flags               01 (1) 'Modification'\n+65B8CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B8D3 CENTRAL HEADER #377   02014B50 (33639248)\n+65B8D7 Created Zip Spec      14 (20) '2.0'\n+65B8D8 Created OS            00 (0) 'MS-DOS'\n+65B8D9 Extract Zip Spec      14 (20) '2.0'\n+65B8DA Extract OS            00 (0) 'MS-DOS'\n+65B8DB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65B8DD Compression Method    0000 (0) 'Stored'\n+65B8DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B8E3 CRC                   67FA3A91 (1744452241)\n+65B8E7 Compressed Size       00000C5B (3163)\n+65B8EB Uncompressed Size     00000C5B (3163)\n+65B8EF Filename Length       007D (125)\n+65B8F1 Extra Length          0009 (9)\n+65B8F3 Comment Length        0000 (0)\n+65B8F5 Disk Start            0000 (0)\n+65B8F7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B8F9 Ext File Attributes   00000000 (0)\n+65B8FD Local Header Offset   000EA7FB (960507)\n+65B901 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B901: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65B97E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65B980   Length              0005 (5)\n+65B982   Flags               01 (1) 'Modification'\n+65B983   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65B987 CENTRAL HEADER #378   02014B50 (33639248)\n+65B98B Created Zip Spec      14 (20) '2.0'\n+65B98C Created OS            00 (0) 'MS-DOS'\n+65B98D Extract Zip Spec      14 (20) '2.0'\n+65B98E Extract OS            00 (0) 'MS-DOS'\n+65B98F General Purpose Flag  0000 (0)\n+65B991 Compression Method    0000 (0) 'Stored'\n+65B993 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65B997 CRC                   00000000 (0)\n+65B99B Compressed Size       00000000 (0)\n+65B99F Uncompressed Size     00000000 (0)\n+65B9A3 Filename Length       0067 (103)\n+65B9A5 Extra Length          0009 (9)\n+65B9A7 Comment Length        0000 (0)\n+65B9A9 Disk Start            0000 (0)\n+65B9AB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65B9AD Ext File Attributes   00000000 (0)\n+65B9B1 Local Header Offset   000EB50A (963850)\n+65B9B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65B9B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65BA1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65BA1E   Length              0005 (5)\n+65BA20   Flags               01 (1) 'Modification'\n+65BA21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65BA25 CENTRAL HEADER #379   02014B50 (33639248)\n+65BA29 Created Zip Spec      14 (20) '2.0'\n+65BA2A Created OS            00 (0) 'MS-DOS'\n+65BA2B Extract Zip Spec      14 (20) '2.0'\n+65BA2C Extract OS            00 (0) 'MS-DOS'\n+65BA2D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65BA2F Compression Method    0000 (0) 'Stored'\n+65BA31 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65BA35 CRC                   63513D5C (1666268508)\n+65BA39 Compressed Size       000007C0 (1984)\n+65BA3D Uncompressed Size     000007C0 (1984)\n+65BA41 Filename Length       007D (125)\n+65BA43 Extra Length          0009 (9)\n+65BA45 Comment Length        0000 (0)\n+65BA47 Disk Start            0000 (0)\n+65BA49 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65BA4B Ext File Attributes   00000000 (0)\n+65BA4F Local Header Offset   000EB598 (963992)\n+65BA53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65BA53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65BAD0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65BAD2   Length              0005 (5)\n+65BAD4   Flags               01 (1) 'Modification'\n+65BAD5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65BAD9 CENTRAL HEADER #380   02014B50 (33639248)\n+65BADD Created Zip Spec      14 (20) '2.0'\n+65BADE Created OS            00 (0) 'MS-DOS'\n+65BADF Extract Zip Spec      14 (20) '2.0'\n+65BAE0 Extract OS            00 (0) 'MS-DOS'\n+65BAE1 General Purpose Flag  0000 (0)\n+65BAE3 Compression Method    0000 (0) 'Stored'\n+65BAE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65BAE9 CRC                   00000000 (0)\n+65BAED Compressed Size       00000000 (0)\n+65BAF1 Uncompressed Size     00000000 (0)\n+65BAF5 Filename Length       005E (94)\n+65BAF7 Extra Length          0009 (9)\n+65BAF9 Comment Length        0000 (0)\n+65BAFB Disk Start            0000 (0)\n+65BAFD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65BAFF Ext File Attributes   00000000 (0)\n+65BB03 Local Header Offset   000EBE0C (966156)\n+65BB07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65BB07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65BB65 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65BB67   Length              0005 (5)\n+65BB69   Flags               01 (1) 'Modification'\n+65BB6A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65BB6E CENTRAL HEADER #381   02014B50 (33639248)\n+65BB72 Created Zip Spec      14 (20) '2.0'\n+65BB73 Created OS            00 (0) 'MS-DOS'\n+65BB74 Extract Zip Spec      14 (20) '2.0'\n+65BB75 Extract OS            00 (0) 'MS-DOS'\n+65BB76 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65BB78 Compression Method    0000 (0) 'Stored'\n+65BB7A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65BB7E CRC                   99929518 (2576520472)\n+65BB82 Compressed Size       00000EDA (3802)\n+65BB86 Uncompressed Size     00000EDA (3802)\n+65BB8A Filename Length       0074 (116)\n+65BB8C Extra Length          0009 (9)\n+65BB8E Comment Length        0000 (0)\n+65BB90 Disk Start            0000 (0)\n+65BB92 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65BB94 Ext File Attributes   00000000 (0)\n+65BB98 Local Header Offset   000EBE91 (966289)\n+65BB9C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65BB9C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65BC10 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65BC12   Length              0005 (5)\n+65BC14   Flags               01 (1) 'Modification'\n+65BC15   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65BC19 CENTRAL HEADER #382   02014B50 (33639248)\n+65BC1D Created Zip Spec      14 (20) '2.0'\n+65BC1E Created OS            00 (0) 'MS-DOS'\n+65BC1F Extract Zip Spec      14 (20) '2.0'\n+65BC20 Extract OS            00 (0) 'MS-DOS'\n+65BC21 General Purpose Flag  0000 (0)\n+65BC23 Compression Method    0000 (0) 'Stored'\n+65BC25 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65BC29 CRC                   00000000 (0)\n+65BC2D Compressed Size       00000000 (0)\n+65BC31 Uncompressed Size     00000000 (0)\n+65BC35 Filename Length       005C (92)\n+65BC37 Extra Length          0009 (9)\n+65BC39 Comment Length        0000 (0)\n+65BC3B Disk Start            0000 (0)\n+65BC3D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65BC3F Ext File Attributes   00000000 (0)\n+65BC43 Local Header Offset   000ECE16 (970262)\n+65BC47 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65BC47: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65BCA3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65BCA5   Length              0005 (5)\n+65BCA7   Flags               01 (1) 'Modification'\n+65BCA8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65BCAC CENTRAL HEADER #383   02014B50 (33639248)\n+65BCB0 Created Zip Spec      14 (20) '2.0'\n+65BCB1 Created OS            00 (0) 'MS-DOS'\n+65BCB2 Extract Zip Spec      14 (20) '2.0'\n+65BCB3 Extract OS            00 (0) 'MS-DOS'\n+65BCB4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65BCB6 Compression Method    0000 (0) 'Stored'\n+65BCB8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65BCBC CRC                   E6BF62E0 (3871302368)\n+65BCC0 Compressed Size       000008F8 (2296)\n+65BCC4 Uncompressed Size     000008F8 (2296)\n+65BCC8 Filename Length       0072 (114)\n+65BCCA Extra Length          0009 (9)\n+65BCCC Comment Length        0000 (0)\n+65BCCE Disk Start            0000 (0)\n+65BCD0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65BCD2 Ext File Attributes   00000000 (0)\n+65BCD6 Local Header Offset   000ECE99 (970393)\n+65BCDA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65BCDA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65BD4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65BD4E   Length              0005 (5)\n+65BD50   Flags               01 (1) 'Modification'\n+65BD51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65BD55 CENTRAL HEADER #384   02014B50 (33639248)\n+65BD59 Created Zip Spec      14 (20) '2.0'\n+65BD5A Created OS            00 (0) 'MS-DOS'\n+65BD5B Extract Zip Spec      14 (20) '2.0'\n+65BD5C Extract OS            00 (0) 'MS-DOS'\n+65BD5D General Purpose Flag  0000 (0)\n+65BD5F Compression Method    0000 (0) 'Stored'\n+65BD61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65BD65 CRC                   00000000 (0)\n+65BD69 Compressed Size       00000000 (0)\n+65BD6D Uncompressed Size     00000000 (0)\n+65BD71 Filename Length       0061 (97)\n+65BD73 Extra Length          0009 (9)\n+65BD75 Comment Length        0000 (0)\n+65BD77 Disk Start            0000 (0)\n+65BD79 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65BD7B Ext File Attributes   00000000 (0)\n+65BD7F Local Header Offset   000ED83A (972858)\n+65BD83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65BD83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65BDE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65BDE6   Length              0005 (5)\n+65BDE8   Flags               01 (1) 'Modification'\n+65BDE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65BDED CENTRAL HEADER #385   02014B50 (33639248)\n+65BDF1 Created Zip Spec      14 (20) '2.0'\n+65BDF2 Created OS            00 (0) 'MS-DOS'\n+65BDF3 Extract Zip Spec      14 (20) '2.0'\n+65BDF4 Extract OS            00 (0) 'MS-DOS'\n+65BDF5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65BDF7 Compression Method    0000 (0) 'Stored'\n+65BDF9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65BDFD CRC                   01130591 (18023825)\n+65BE01 Compressed Size       00000594 (1428)\n+65BE05 Uncompressed Size     00000594 (1428)\n+65BE09 Filename Length       0077 (119)\n+65BE0B Extra Length          0009 (9)\n+65BE0D Comment Length        0000 (0)\n+65BE0F Disk Start            0000 (0)\n+65BE11 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65BE13 Ext File Attributes   00000000 (0)\n+65BE17 Local Header Offset   000ED8C2 (972994)\n+65BE1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65BE1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65BE92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65BE94   Length              0005 (5)\n+65BE96   Flags               01 (1) 'Modification'\n+65BE97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65BE9B CENTRAL HEADER #386   02014B50 (33639248)\n+65BE9F Created Zip Spec      14 (20) '2.0'\n+65BEA0 Created OS            00 (0) 'MS-DOS'\n+65BEA1 Extract Zip Spec      14 (20) '2.0'\n+65BEA2 Extract OS            00 (0) 'MS-DOS'\n+65BEA3 General Purpose Flag  0000 (0)\n+65BEA5 Compression Method    0000 (0) 'Stored'\n+65BEA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65BEAB CRC                   00000000 (0)\n+65BEAF Compressed Size       00000000 (0)\n+65BEB3 Uncompressed Size     00000000 (0)\n+65BEB7 Filename Length       0063 (99)\n+65BEB9 Extra Length          0009 (9)\n+65BEBB Comment Length        0000 (0)\n+65BEBD Disk Start            0000 (0)\n+65BEBF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65BEC1 Ext File Attributes   00000000 (0)\n+65BEC5 Local Header Offset   000EDF04 (974596)\n+65BEC9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65BEC9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65BF2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65BF2E   Length              0005 (5)\n+65BF30   Flags               01 (1) 'Modification'\n+65BF31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65BF35 CENTRAL HEADER #387   02014B50 (33639248)\n+65BF39 Created Zip Spec      14 (20) '2.0'\n+65BF3A Created OS            00 (0) 'MS-DOS'\n+65BF3B Extract Zip Spec      14 (20) '2.0'\n+65BF3C Extract OS            00 (0) 'MS-DOS'\n+65BF3D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65BF3F Compression Method    0000 (0) 'Stored'\n+65BF41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65BF45 CRC                   F05E2331 (4032701233)\n+65BF49 Compressed Size       00000831 (2097)\n+65BF4D Uncompressed Size     00000831 (2097)\n+65BF51 Filename Length       0079 (121)\n+65BF53 Extra Length          0009 (9)\n+65BF55 Comment Length        0000 (0)\n+65BF57 Disk Start            0000 (0)\n+65BF59 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65BF5B Ext File Attributes   00000000 (0)\n+65BF5F Local Header Offset   000EDF8E (974734)\n+65BF63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65BF63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65BFDC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65BFDE   Length              0005 (5)\n+65BFE0   Flags               01 (1) 'Modification'\n+65BFE1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65BFE5 CENTRAL HEADER #388   02014B50 (33639248)\n+65BFE9 Created Zip Spec      14 (20) '2.0'\n+65BFEA Created OS            00 (0) 'MS-DOS'\n+65BFEB Extract Zip Spec      14 (20) '2.0'\n+65BFEC Extract OS            00 (0) 'MS-DOS'\n+65BFED General Purpose Flag  0000 (0)\n+65BFEF Compression Method    0000 (0) 'Stored'\n+65BFF1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65BFF5 CRC                   00000000 (0)\n+65BFF9 Compressed Size       00000000 (0)\n+65BFFD Uncompressed Size     00000000 (0)\n+65C001 Filename Length       0061 (97)\n+65C003 Extra Length          0009 (9)\n+65C005 Comment Length        0000 (0)\n+65C007 Disk Start            0000 (0)\n+65C009 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C00B Ext File Attributes   00000000 (0)\n+65C00F Local Header Offset   000EE86F (977007)\n+65C013 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C013: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65C074 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65C076   Length              0005 (5)\n+65C078   Flags               01 (1) 'Modification'\n+65C079   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65C07D CENTRAL HEADER #389   02014B50 (33639248)\n+65C081 Created Zip Spec      14 (20) '2.0'\n+65C082 Created OS            00 (0) 'MS-DOS'\n+65C083 Extract Zip Spec      14 (20) '2.0'\n+65C084 Extract OS            00 (0) 'MS-DOS'\n+65C085 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65C087 Compression Method    0000 (0) 'Stored'\n+65C089 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65C08D CRC                   80ED3BA4 (2163030948)\n+65C091 Compressed Size       000015D0 (5584)\n+65C095 Uncompressed Size     000015D0 (5584)\n+65C099 Filename Length       0077 (119)\n+65C09B Extra Length          0009 (9)\n+65C09D Comment Length        0000 (0)\n+65C09F Disk Start            0000 (0)\n+65C0A1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C0A3 Ext File Attributes   00000000 (0)\n+65C0A7 Local Header Offset   000EE8F7 (977143)\n+65C0AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C0AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65C122 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65C124   Length              0005 (5)\n+65C126   Flags               01 (1) 'Modification'\n+65C127   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65C12B CENTRAL HEADER #390   02014B50 (33639248)\n+65C12F Created Zip Spec      14 (20) '2.0'\n+65C130 Created OS            00 (0) 'MS-DOS'\n+65C131 Extract Zip Spec      14 (20) '2.0'\n+65C132 Extract OS            00 (0) 'MS-DOS'\n+65C133 General Purpose Flag  0000 (0)\n+65C135 Compression Method    0000 (0) 'Stored'\n+65C137 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65C13B CRC                   00000000 (0)\n+65C13F Compressed Size       00000000 (0)\n+65C143 Uncompressed Size     00000000 (0)\n+65C147 Filename Length       0067 (103)\n+65C149 Extra Length          0009 (9)\n+65C14B Comment Length        0000 (0)\n+65C14D Disk Start            0000 (0)\n+65C14F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C151 Ext File Attributes   00000000 (0)\n+65C155 Local Header Offset   000EFF75 (982901)\n+65C159 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C159: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65C1C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65C1C2   Length              0005 (5)\n+65C1C4   Flags               01 (1) 'Modification'\n+65C1C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65C1C9 CENTRAL HEADER #391   02014B50 (33639248)\n+65C1CD Created Zip Spec      14 (20) '2.0'\n+65C1CE Created OS            00 (0) 'MS-DOS'\n+65C1CF Extract Zip Spec      14 (20) '2.0'\n+65C1D0 Extract OS            00 (0) 'MS-DOS'\n+65C1D1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65C1D3 Compression Method    0000 (0) 'Stored'\n+65C1D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65C1D9 CRC                   7018E446 (1880679494)\n+65C1DD Compressed Size       00001FAE (8110)\n+65C1E1 Uncompressed Size     00001FAE (8110)\n+65C1E5 Filename Length       007D (125)\n+65C1E7 Extra Length          0009 (9)\n+65C1E9 Comment Length        0000 (0)\n+65C1EB Disk Start            0000 (0)\n+65C1ED Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C1EF Ext File Attributes   00000000 (0)\n+65C1F3 Local Header Offset   000F0003 (983043)\n+65C1F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C1F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65C274 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65C276   Length              0005 (5)\n+65C278   Flags               01 (1) 'Modification'\n+65C279   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65C27D CENTRAL HEADER #392   02014B50 (33639248)\n+65C281 Created Zip Spec      14 (20) '2.0'\n+65C282 Created OS            00 (0) 'MS-DOS'\n+65C283 Extract Zip Spec      14 (20) '2.0'\n+65C284 Extract OS            00 (0) 'MS-DOS'\n+65C285 General Purpose Flag  0000 (0)\n+65C287 Compression Method    0000 (0) 'Stored'\n+65C289 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65C28D CRC                   00000000 (0)\n+65C291 Compressed Size       00000000 (0)\n+65C295 Uncompressed Size     00000000 (0)\n+65C299 Filename Length       005E (94)\n+65C29B Extra Length          0009 (9)\n+65C29D Comment Length        0000 (0)\n+65C29F Disk Start            0000 (0)\n+65C2A1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C2A3 Ext File Attributes   00000000 (0)\n+65C2A7 Local Header Offset   000F2065 (991333)\n+65C2AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C2AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65C309 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65C30B   Length              0005 (5)\n+65C30D   Flags               01 (1) 'Modification'\n+65C30E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65C312 CENTRAL HEADER #393   02014B50 (33639248)\n+65C316 Created Zip Spec      14 (20) '2.0'\n+65C317 Created OS            00 (0) 'MS-DOS'\n+65C318 Extract Zip Spec      14 (20) '2.0'\n+65C319 Extract OS            00 (0) 'MS-DOS'\n+65C31A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65C31C Compression Method    0000 (0) 'Stored'\n+65C31E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65C322 CRC                   61A0CE5A (1637928538)\n+65C326 Compressed Size       000012FA (4858)\n+65C32A Uncompressed Size     000012FA (4858)\n+65C32E Filename Length       0074 (116)\n+65C330 Extra Length          0009 (9)\n+65C332 Comment Length        0000 (0)\n+65C334 Disk Start            0000 (0)\n+65C336 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C338 Ext File Attributes   00000000 (0)\n+65C33C Local Header Offset   000F20EA (991466)\n+65C340 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C340: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65C3B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65C3B6   Length              0005 (5)\n+65C3B8   Flags               01 (1) 'Modification'\n+65C3B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65C3BD CENTRAL HEADER #394   02014B50 (33639248)\n+65C3C1 Created Zip Spec      14 (20) '2.0'\n+65C3C2 Created OS            00 (0) 'MS-DOS'\n+65C3C3 Extract Zip Spec      14 (20) '2.0'\n+65C3C4 Extract OS            00 (0) 'MS-DOS'\n+65C3C5 General Purpose Flag  0000 (0)\n+65C3C7 Compression Method    0000 (0) 'Stored'\n+65C3C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65C3CD CRC                   00000000 (0)\n+65C3D1 Compressed Size       00000000 (0)\n+65C3D5 Uncompressed Size     00000000 (0)\n+65C3D9 Filename Length       0061 (97)\n+65C3DB Extra Length          0009 (9)\n+65C3DD Comment Length        0000 (0)\n+65C3DF Disk Start            0000 (0)\n+65C3E1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C3E3 Ext File Attributes   00000000 (0)\n+65C3E7 Local Header Offset   000F348F (996495)\n+65C3EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C3EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65C44C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65C44E   Length              0005 (5)\n+65C450   Flags               01 (1) 'Modification'\n+65C451   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65C455 CENTRAL HEADER #395   02014B50 (33639248)\n+65C459 Created Zip Spec      14 (20) '2.0'\n+65C45A Created OS            00 (0) 'MS-DOS'\n+65C45B Extract Zip Spec      14 (20) '2.0'\n+65C45C Extract OS            00 (0) 'MS-DOS'\n+65C45D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65C45F Compression Method    0000 (0) 'Stored'\n+65C461 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65C465 CRC                   624BE63E (1649141310)\n+65C469 Compressed Size       00001315 (4885)\n+65C46D Uncompressed Size     00001315 (4885)\n+65C471 Filename Length       0077 (119)\n+65C473 Extra Length          0009 (9)\n+65C475 Comment Length        0000 (0)\n+65C477 Disk Start            0000 (0)\n+65C479 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C47B Ext File Attributes   00000000 (0)\n+65C47F Local Header Offset   000F3517 (996631)\n+65C483 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C483: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65C4FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65C4FC   Length              0005 (5)\n+65C4FE   Flags               01 (1) 'Modification'\n+65C4FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65C503 CENTRAL HEADER #396   02014B50 (33639248)\n+65C507 Created Zip Spec      14 (20) '2.0'\n+65C508 Created OS            00 (0) 'MS-DOS'\n+65C509 Extract Zip Spec      14 (20) '2.0'\n+65C50A Extract OS            00 (0) 'MS-DOS'\n+65C50B General Purpose Flag  0000 (0)\n+65C50D Compression Method    0000 (0) 'Stored'\n+65C50F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65C513 CRC                   00000000 (0)\n+65C517 Compressed Size       00000000 (0)\n+65C51B Uncompressed Size     00000000 (0)\n+65C51F Filename Length       005D (93)\n+65C521 Extra Length          0009 (9)\n+65C523 Comment Length        0000 (0)\n+65C525 Disk Start            0000 (0)\n+65C527 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C529 Ext File Attributes   00000000 (0)\n+65C52D Local Header Offset   000F48DA (1001690)\n+65C531 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C531: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65C58E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65C590   Length              0005 (5)\n+65C592   Flags               01 (1) 'Modification'\n+65C593   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65C597 CENTRAL HEADER #397   02014B50 (33639248)\n+65C59B Created Zip Spec      14 (20) '2.0'\n+65C59C Created OS            00 (0) 'MS-DOS'\n+65C59D Extract Zip Spec      14 (20) '2.0'\n+65C59E Extract OS            00 (0) 'MS-DOS'\n+65C59F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65C5A1 Compression Method    0000 (0) 'Stored'\n+65C5A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65C5A7 CRC                   F4A07CA3 (4104158371)\n+65C5AB Compressed Size       000027E4 (10212)\n+65C5AF Uncompressed Size     000027E4 (10212)\n+65C5B3 Filename Length       0073 (115)\n+65C5B5 Extra Length          0009 (9)\n+65C5B7 Comment Length        0000 (0)\n+65C5B9 Disk Start            0000 (0)\n+65C5BB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C5BD Ext File Attributes   00000000 (0)\n+65C5C1 Local Header Offset   000F495E (1001822)\n+65C5C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C5C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65C638 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65C63A   Length              0005 (5)\n+65C63C   Flags               01 (1) 'Modification'\n+65C63D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65C641 CENTRAL HEADER #398   02014B50 (33639248)\n+65C645 Created Zip Spec      14 (20) '2.0'\n+65C646 Created OS            00 (0) 'MS-DOS'\n+65C647 Extract Zip Spec      14 (20) '2.0'\n+65C648 Extract OS            00 (0) 'MS-DOS'\n+65C649 General Purpose Flag  0000 (0)\n+65C64B Compression Method    0000 (0) 'Stored'\n+65C64D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65C651 CRC                   00000000 (0)\n+65C655 Compressed Size       00000000 (0)\n+65C659 Uncompressed Size     00000000 (0)\n+65C65D Filename Length       0065 (101)\n+65C65F Extra Length          0009 (9)\n+65C661 Comment Length        0000 (0)\n+65C663 Disk Start            0000 (0)\n+65C665 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C667 Ext File Attributes   00000000 (0)\n+65C66B Local Header Offset   000F71EC (1012204)\n+65C66F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C66F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65C6D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65C6D6   Length              0005 (5)\n+65C6D8   Flags               01 (1) 'Modification'\n+65C6D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65C6DD CENTRAL HEADER #399   02014B50 (33639248)\n+65C6E1 Created Zip Spec      14 (20) '2.0'\n+65C6E2 Created OS            00 (0) 'MS-DOS'\n+65C6E3 Extract Zip Spec      14 (20) '2.0'\n+65C6E4 Extract OS            00 (0) 'MS-DOS'\n+65C6E5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65C6E7 Compression Method    0000 (0) 'Stored'\n+65C6E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65C6ED CRC                   6E031E40 (1845698112)\n+65C6F1 Compressed Size       00001276 (4726)\n+65C6F5 Uncompressed Size     00001276 (4726)\n+65C6F9 Filename Length       007B (123)\n+65C6FB Extra Length          0009 (9)\n+65C6FD Comment Length        0000 (0)\n+65C6FF Disk Start            0000 (0)\n+65C701 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C703 Ext File Attributes   00000000 (0)\n+65C707 Local Header Offset   000F7278 (1012344)\n+65C70B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C70B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65C786 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65C788   Length              0005 (5)\n+65C78A   Flags               01 (1) 'Modification'\n+65C78B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65C78F CENTRAL HEADER #400   02014B50 (33639248)\n+65C793 Created Zip Spec      14 (20) '2.0'\n+65C794 Created OS            00 (0) 'MS-DOS'\n+65C795 Extract Zip Spec      14 (20) '2.0'\n+65C796 Extract OS            00 (0) 'MS-DOS'\n+65C797 General Purpose Flag  0000 (0)\n+65C799 Compression Method    0000 (0) 'Stored'\n+65C79B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65C79F CRC                   00000000 (0)\n+65C7A3 Compressed Size       00000000 (0)\n+65C7A7 Uncompressed Size     00000000 (0)\n+65C7AB Filename Length       0064 (100)\n+65C7AD Extra Length          0009 (9)\n+65C7AF Comment Length        0000 (0)\n+65C7B1 Disk Start            0000 (0)\n+65C7B3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C7B5 Ext File Attributes   00000000 (0)\n+65C7B9 Local Header Offset   000F85A0 (1017248)\n+65C7BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C7BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65C821 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65C823   Length              0005 (5)\n+65C825   Flags               01 (1) 'Modification'\n+65C826   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65C82A CENTRAL HEADER #401   02014B50 (33639248)\n+65C82E Created Zip Spec      14 (20) '2.0'\n+65C82F Created OS            00 (0) 'MS-DOS'\n+65C830 Extract Zip Spec      14 (20) '2.0'\n+65C831 Extract OS            00 (0) 'MS-DOS'\n+65C832 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65C834 Compression Method    0000 (0) 'Stored'\n+65C836 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65C83A CRC                   5987930A (1502057226)\n+65C83E Compressed Size       00000BDE (3038)\n+65C842 Uncompressed Size     00000BDE (3038)\n+65C846 Filename Length       007A (122)\n+65C848 Extra Length          0009 (9)\n+65C84A Comment Length        0000 (0)\n+65C84C Disk Start            0000 (0)\n+65C84E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C850 Ext File Attributes   00000000 (0)\n+65C854 Local Header Offset   000F862B (1017387)\n+65C858 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C858: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65C8D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65C8D4   Length              0005 (5)\n+65C8D6   Flags               01 (1) 'Modification'\n+65C8D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65C8DB CENTRAL HEADER #402   02014B50 (33639248)\n+65C8DF Created Zip Spec      14 (20) '2.0'\n+65C8E0 Created OS            00 (0) 'MS-DOS'\n+65C8E1 Extract Zip Spec      14 (20) '2.0'\n+65C8E2 Extract OS            00 (0) 'MS-DOS'\n+65C8E3 General Purpose Flag  0000 (0)\n+65C8E5 Compression Method    0000 (0) 'Stored'\n+65C8E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65C8EB CRC                   00000000 (0)\n+65C8EF Compressed Size       00000000 (0)\n+65C8F3 Uncompressed Size     00000000 (0)\n+65C8F7 Filename Length       0065 (101)\n+65C8F9 Extra Length          0009 (9)\n+65C8FB Comment Length        0000 (0)\n+65C8FD Disk Start            0000 (0)\n+65C8FF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C901 Ext File Attributes   00000000 (0)\n+65C905 Local Header Offset   000F92BA (1020602)\n+65C909 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C909: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65C96E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65C970   Length              0005 (5)\n+65C972   Flags               01 (1) 'Modification'\n+65C973   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65C977 CENTRAL HEADER #403   02014B50 (33639248)\n+65C97B Created Zip Spec      14 (20) '2.0'\n+65C97C Created OS            00 (0) 'MS-DOS'\n+65C97D Extract Zip Spec      14 (20) '2.0'\n+65C97E Extract OS            00 (0) 'MS-DOS'\n+65C97F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65C981 Compression Method    0000 (0) 'Stored'\n+65C983 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65C987 CRC                   CA93F7B9 (3398694841)\n+65C98B Compressed Size       000008CF (2255)\n+65C98F Uncompressed Size     000008CF (2255)\n+65C993 Filename Length       007B (123)\n+65C995 Extra Length          0009 (9)\n+65C997 Comment Length        0000 (0)\n+65C999 Disk Start            0000 (0)\n+65C99B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65C99D Ext File Attributes   00000000 (0)\n+65C9A1 Local Header Offset   000F9346 (1020742)\n+65C9A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65C9A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65CA20 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65CA22   Length              0005 (5)\n+65CA24   Flags               01 (1) 'Modification'\n+65CA25   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65CA29 CENTRAL HEADER #404   02014B50 (33639248)\n+65CA2D Created Zip Spec      14 (20) '2.0'\n+65CA2E Created OS            00 (0) 'MS-DOS'\n+65CA2F Extract Zip Spec      14 (20) '2.0'\n+65CA30 Extract OS            00 (0) 'MS-DOS'\n+65CA31 General Purpose Flag  0000 (0)\n+65CA33 Compression Method    0000 (0) 'Stored'\n+65CA35 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65CA39 CRC                   00000000 (0)\n+65CA3D Compressed Size       00000000 (0)\n+65CA41 Uncompressed Size     00000000 (0)\n+65CA45 Filename Length       0063 (99)\n+65CA47 Extra Length          0009 (9)\n+65CA49 Comment Length        0000 (0)\n+65CA4B Disk Start            0000 (0)\n+65CA4D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65CA4F Ext File Attributes   00000000 (0)\n+65CA53 Local Header Offset   000F9CC7 (1023175)\n+65CA57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65CA57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65CABA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65CABC   Length              0005 (5)\n+65CABE   Flags               01 (1) 'Modification'\n+65CABF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65CAC3 CENTRAL HEADER #405   02014B50 (33639248)\n+65CAC7 Created Zip Spec      14 (20) '2.0'\n+65CAC8 Created OS            00 (0) 'MS-DOS'\n+65CAC9 Extract Zip Spec      14 (20) '2.0'\n+65CACA Extract OS            00 (0) 'MS-DOS'\n+65CACB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65CACD Compression Method    0000 (0) 'Stored'\n+65CACF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65CAD3 CRC                   673E5975 (1732139381)\n+65CAD7 Compressed Size       00000CA9 (3241)\n+65CADB Uncompressed Size     00000CA9 (3241)\n+65CADF Filename Length       0079 (121)\n+65CAE1 Extra Length          0009 (9)\n+65CAE3 Comment Length        0000 (0)\n+65CAE5 Disk Start            0000 (0)\n+65CAE7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65CAE9 Ext File Attributes   00000000 (0)\n+65CAED Local Header Offset   000F9D51 (1023313)\n+65CAF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65CAF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65CB6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65CB6C   Length              0005 (5)\n+65CB6E   Flags               01 (1) 'Modification'\n+65CB6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65CB73 CENTRAL HEADER #406   02014B50 (33639248)\n+65CB77 Created Zip Spec      14 (20) '2.0'\n+65CB78 Created OS            00 (0) 'MS-DOS'\n+65CB79 Extract Zip Spec      14 (20) '2.0'\n+65CB7A Extract OS            00 (0) 'MS-DOS'\n+65CB7B General Purpose Flag  0000 (0)\n+65CB7D Compression Method    0000 (0) 'Stored'\n+65CB7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65CB83 CRC                   00000000 (0)\n+65CB87 Compressed Size       00000000 (0)\n+65CB8B Uncompressed Size     00000000 (0)\n+65CB8F Filename Length       0061 (97)\n+65CB91 Extra Length          0009 (9)\n+65CB93 Comment Length        0000 (0)\n+65CB95 Disk Start            0000 (0)\n+65CB97 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65CB99 Ext File Attributes   00000000 (0)\n+65CB9D Local Header Offset   000FAAAA (1026730)\n+65CBA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65CBA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65CC02 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65CC04   Length              0005 (5)\n+65CC06   Flags               01 (1) 'Modification'\n+65CC07   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65CC0B CENTRAL HEADER #407   02014B50 (33639248)\n+65CC0F Created Zip Spec      14 (20) '2.0'\n+65CC10 Created OS            00 (0) 'MS-DOS'\n+65CC11 Extract Zip Spec      14 (20) '2.0'\n+65CC12 Extract OS            00 (0) 'MS-DOS'\n+65CC13 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65CC15 Compression Method    0000 (0) 'Stored'\n+65CC17 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65CC1B CRC                   33033645 (855848517)\n+65CC1F Compressed Size       0000503C (20540)\n+65CC23 Uncompressed Size     0000503C (20540)\n+65CC27 Filename Length       0077 (119)\n+65CC29 Extra Length          0009 (9)\n+65CC2B Comment Length        0000 (0)\n+65CC2D Disk Start            0000 (0)\n+65CC2F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65CC31 Ext File Attributes   00000000 (0)\n+65CC35 Local Header Offset   000FAB32 (1026866)\n+65CC39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65CC39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65CCB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65CCB2   Length              0005 (5)\n+65CCB4   Flags               01 (1) 'Modification'\n+65CCB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65CCB9 CENTRAL HEADER #408   02014B50 (33639248)\n+65CCBD Created Zip Spec      14 (20) '2.0'\n+65CCBE Created OS            00 (0) 'MS-DOS'\n+65CCBF Extract Zip Spec      14 (20) '2.0'\n+65CCC0 Extract OS            00 (0) 'MS-DOS'\n+65CCC1 General Purpose Flag  0000 (0)\n+65CCC3 Compression Method    0000 (0) 'Stored'\n+65CCC5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65CCC9 CRC                   00000000 (0)\n+65CCCD Compressed Size       00000000 (0)\n+65CCD1 Uncompressed Size     00000000 (0)\n+65CCD5 Filename Length       0064 (100)\n+65CCD7 Extra Length          0009 (9)\n+65CCD9 Comment Length        0000 (0)\n+65CCDB Disk Start            0000 (0)\n+65CCDD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65CCDF Ext File Attributes   00000000 (0)\n+65CCE3 Local Header Offset   000FFC1C (1047580)\n+65CCE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65CCE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65CD4B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65CD4D   Length              0005 (5)\n+65CD4F   Flags               01 (1) 'Modification'\n+65CD50   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65CD54 CENTRAL HEADER #409   02014B50 (33639248)\n+65CD58 Created Zip Spec      14 (20) '2.0'\n+65CD59 Created OS            00 (0) 'MS-DOS'\n+65CD5A Extract Zip Spec      14 (20) '2.0'\n+65CD5B Extract OS            00 (0) 'MS-DOS'\n+65CD5C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65CD5E Compression Method    0000 (0) 'Stored'\n+65CD60 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65CD64 CRC                   F5037A64 (4110645860)\n+65CD68 Compressed Size       0000080E (2062)\n+65CD6C Uncompressed Size     0000080E (2062)\n+65CD70 Filename Length       007A (122)\n+65CD72 Extra Length          0009 (9)\n+65CD74 Comment Length        0000 (0)\n+65CD76 Disk Start            0000 (0)\n+65CD78 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65CD7A Ext File Attributes   00000000 (0)\n+65CD7E Local Header Offset   000FFCA7 (1047719)\n+65CD82 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65CD82: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65CDFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65CDFE   Length              0005 (5)\n+65CE00   Flags               01 (1) 'Modification'\n+65CE01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65CE05 CENTRAL HEADER #410   02014B50 (33639248)\n+65CE09 Created Zip Spec      14 (20) '2.0'\n+65CE0A Created OS            00 (0) 'MS-DOS'\n+65CE0B Extract Zip Spec      14 (20) '2.0'\n+65CE0C Extract OS            00 (0) 'MS-DOS'\n+65CE0D General Purpose Flag  0000 (0)\n+65CE0F Compression Method    0000 (0) 'Stored'\n+65CE11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65CE15 CRC                   00000000 (0)\n+65CE19 Compressed Size       00000000 (0)\n+65CE1D Uncompressed Size     00000000 (0)\n+65CE21 Filename Length       005A (90)\n+65CE23 Extra Length          0009 (9)\n+65CE25 Comment Length        0000 (0)\n+65CE27 Disk Start            0000 (0)\n+65CE29 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65CE2B Ext File Attributes   00000000 (0)\n+65CE2F Local Header Offset   00100566 (1049958)\n+65CE33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65CE33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65CE8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65CE8F   Length              0005 (5)\n+65CE91   Flags               01 (1) 'Modification'\n+65CE92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65CE96 CENTRAL HEADER #411   02014B50 (33639248)\n+65CE9A Created Zip Spec      14 (20) '2.0'\n+65CE9B Created OS            00 (0) 'MS-DOS'\n+65CE9C Extract Zip Spec      14 (20) '2.0'\n+65CE9D Extract OS            00 (0) 'MS-DOS'\n+65CE9E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65CEA0 Compression Method    0000 (0) 'Stored'\n+65CEA2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65CEA6 CRC                   DB187B38 (3675814712)\n+65CEAA Compressed Size       00001A85 (6789)\n+65CEAE Uncompressed Size     00001A85 (6789)\n+65CEB2 Filename Length       0070 (112)\n+65CEB4 Extra Length          0009 (9)\n+65CEB6 Comment Length        0000 (0)\n+65CEB8 Disk Start            0000 (0)\n+65CEBA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65CEBC Ext File Attributes   00000000 (0)\n+65CEC0 Local Header Offset   001005E7 (1050087)\n+65CEC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65CEC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65CF34 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65CF36   Length              0005 (5)\n+65CF38   Flags               01 (1) 'Modification'\n+65CF39   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65CF3D CENTRAL HEADER #412   02014B50 (33639248)\n+65CF41 Created Zip Spec      14 (20) '2.0'\n+65CF42 Created OS            00 (0) 'MS-DOS'\n+65CF43 Extract Zip Spec      14 (20) '2.0'\n+65CF44 Extract OS            00 (0) 'MS-DOS'\n+65CF45 General Purpose Flag  0000 (0)\n+65CF47 Compression Method    0000 (0) 'Stored'\n+65CF49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65CF4D CRC                   00000000 (0)\n+65CF51 Compressed Size       00000000 (0)\n+65CF55 Uncompressed Size     00000000 (0)\n+65CF59 Filename Length       005B (91)\n+65CF5B Extra Length          0009 (9)\n+65CF5D Comment Length        0000 (0)\n+65CF5F Disk Start            0000 (0)\n+65CF61 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65CF63 Ext File Attributes   00000000 (0)\n+65CF67 Local Header Offset   00102113 (1057043)\n+65CF6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65CF6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65CFC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65CFC8   Length              0005 (5)\n+65CFCA   Flags               01 (1) 'Modification'\n+65CFCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65CFCF CENTRAL HEADER #413   02014B50 (33639248)\n+65CFD3 Created Zip Spec      14 (20) '2.0'\n+65CFD4 Created OS            00 (0) 'MS-DOS'\n+65CFD5 Extract Zip Spec      14 (20) '2.0'\n+65CFD6 Extract OS            00 (0) 'MS-DOS'\n+65CFD7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65CFD9 Compression Method    0000 (0) 'Stored'\n+65CFDB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65CFDF CRC                   CD183667 (3440916071)\n+65CFE3 Compressed Size       00001A6E (6766)\n+65CFE7 Uncompressed Size     00001A6E (6766)\n+65CFEB Filename Length       0071 (113)\n+65CFED Extra Length          0009 (9)\n+65CFEF Comment Length        0000 (0)\n+65CFF1 Disk Start            0000 (0)\n+65CFF3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65CFF5 Ext File Attributes   00000000 (0)\n+65CFF9 Local Header Offset   00102195 (1057173)\n+65CFFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65CFFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D06E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D070   Length              0005 (5)\n+65D072   Flags               01 (1) 'Modification'\n+65D073   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D077 CENTRAL HEADER #414   02014B50 (33639248)\n+65D07B Created Zip Spec      14 (20) '2.0'\n+65D07C Created OS            00 (0) 'MS-DOS'\n+65D07D Extract Zip Spec      14 (20) '2.0'\n+65D07E Extract OS            00 (0) 'MS-DOS'\n+65D07F General Purpose Flag  0000 (0)\n+65D081 Compression Method    0000 (0) 'Stored'\n+65D083 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D087 CRC                   00000000 (0)\n+65D08B Compressed Size       00000000 (0)\n+65D08F Uncompressed Size     00000000 (0)\n+65D093 Filename Length       005B (91)\n+65D095 Extra Length          0009 (9)\n+65D097 Comment Length        0000 (0)\n+65D099 Disk Start            0000 (0)\n+65D09B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D09D Ext File Attributes   00000000 (0)\n+65D0A1 Local Header Offset   00103CAB (1064107)\n+65D0A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D0A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D100 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D102   Length              0005 (5)\n+65D104   Flags               01 (1) 'Modification'\n+65D105   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D109 CENTRAL HEADER #415   02014B50 (33639248)\n+65D10D Created Zip Spec      14 (20) '2.0'\n+65D10E Created OS            00 (0) 'MS-DOS'\n+65D10F Extract Zip Spec      14 (20) '2.0'\n+65D110 Extract OS            00 (0) 'MS-DOS'\n+65D111 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65D113 Compression Method    0000 (0) 'Stored'\n+65D115 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D119 CRC                   0C7DD276 (209572470)\n+65D11D Compressed Size       00001A92 (6802)\n+65D121 Uncompressed Size     00001A92 (6802)\n+65D125 Filename Length       0071 (113)\n+65D127 Extra Length          0009 (9)\n+65D129 Comment Length        0000 (0)\n+65D12B Disk Start            0000 (0)\n+65D12D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D12F Ext File Attributes   00000000 (0)\n+65D133 Local Header Offset   00103D2D (1064237)\n+65D137 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D137: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D1A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D1AA   Length              0005 (5)\n+65D1AC   Flags               01 (1) 'Modification'\n+65D1AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D1B1 CENTRAL HEADER #416   02014B50 (33639248)\n+65D1B5 Created Zip Spec      14 (20) '2.0'\n+65D1B6 Created OS            00 (0) 'MS-DOS'\n+65D1B7 Extract Zip Spec      14 (20) '2.0'\n+65D1B8 Extract OS            00 (0) 'MS-DOS'\n+65D1B9 General Purpose Flag  0000 (0)\n+65D1BB Compression Method    0000 (0) 'Stored'\n+65D1BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D1C1 CRC                   00000000 (0)\n+65D1C5 Compressed Size       00000000 (0)\n+65D1C9 Uncompressed Size     00000000 (0)\n+65D1CD Filename Length       005C (92)\n+65D1CF Extra Length          0009 (9)\n+65D1D1 Comment Length        0000 (0)\n+65D1D3 Disk Start            0000 (0)\n+65D1D5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D1D7 Ext File Attributes   00000000 (0)\n+65D1DB Local Header Offset   00105867 (1071207)\n+65D1DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D1DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D23B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D23D   Length              0005 (5)\n+65D23F   Flags               01 (1) 'Modification'\n+65D240   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D244 CENTRAL HEADER #417   02014B50 (33639248)\n+65D248 Created Zip Spec      14 (20) '2.0'\n+65D249 Created OS            00 (0) 'MS-DOS'\n+65D24A Extract Zip Spec      14 (20) '2.0'\n+65D24B Extract OS            00 (0) 'MS-DOS'\n+65D24C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65D24E Compression Method    0000 (0) 'Stored'\n+65D250 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D254 CRC                   60EA12C2 (1625952962)\n+65D258 Compressed Size       00001733 (5939)\n+65D25C Uncompressed Size     00001733 (5939)\n+65D260 Filename Length       0072 (114)\n+65D262 Extra Length          0009 (9)\n+65D264 Comment Length        0000 (0)\n+65D266 Disk Start            0000 (0)\n+65D268 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D26A Ext File Attributes   00000000 (0)\n+65D26E Local Header Offset   001058EA (1071338)\n+65D272 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D272: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D2E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D2E6   Length              0005 (5)\n+65D2E8   Flags               01 (1) 'Modification'\n+65D2E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D2ED CENTRAL HEADER #418   02014B50 (33639248)\n+65D2F1 Created Zip Spec      14 (20) '2.0'\n+65D2F2 Created OS            00 (0) 'MS-DOS'\n+65D2F3 Extract Zip Spec      14 (20) '2.0'\n+65D2F4 Extract OS            00 (0) 'MS-DOS'\n+65D2F5 General Purpose Flag  0000 (0)\n+65D2F7 Compression Method    0000 (0) 'Stored'\n+65D2F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D2FD CRC                   00000000 (0)\n+65D301 Compressed Size       00000000 (0)\n+65D305 Uncompressed Size     00000000 (0)\n+65D309 Filename Length       005F (95)\n+65D30B Extra Length          0009 (9)\n+65D30D Comment Length        0000 (0)\n+65D30F Disk Start            0000 (0)\n+65D311 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D313 Ext File Attributes   00000000 (0)\n+65D317 Local Header Offset   001070C6 (1077446)\n+65D31B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D31B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D37A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D37C   Length              0005 (5)\n+65D37E   Flags               01 (1) 'Modification'\n+65D37F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D383 CENTRAL HEADER #419   02014B50 (33639248)\n+65D387 Created Zip Spec      14 (20) '2.0'\n+65D388 Created OS            00 (0) 'MS-DOS'\n+65D389 Extract Zip Spec      14 (20) '2.0'\n+65D38A Extract OS            00 (0) 'MS-DOS'\n+65D38B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65D38D Compression Method    0000 (0) 'Stored'\n+65D38F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D393 CRC                   4BB1EABD (1269951165)\n+65D397 Compressed Size       0000167D (5757)\n+65D39B Uncompressed Size     0000167D (5757)\n+65D39F Filename Length       0075 (117)\n+65D3A1 Extra Length          0009 (9)\n+65D3A3 Comment Length        0000 (0)\n+65D3A5 Disk Start            0000 (0)\n+65D3A7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D3A9 Ext File Attributes   00000000 (0)\n+65D3AD Local Header Offset   0010714C (1077580)\n+65D3B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D3B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D426 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D428   Length              0005 (5)\n+65D42A   Flags               01 (1) 'Modification'\n+65D42B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D42F CENTRAL HEADER #420   02014B50 (33639248)\n+65D433 Created Zip Spec      14 (20) '2.0'\n+65D434 Created OS            00 (0) 'MS-DOS'\n+65D435 Extract Zip Spec      14 (20) '2.0'\n+65D436 Extract OS            00 (0) 'MS-DOS'\n+65D437 General Purpose Flag  0000 (0)\n+65D439 Compression Method    0000 (0) 'Stored'\n+65D43B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D43F CRC                   00000000 (0)\n+65D443 Compressed Size       00000000 (0)\n+65D447 Uncompressed Size     00000000 (0)\n+65D44B Filename Length       005F (95)\n+65D44D Extra Length          0009 (9)\n+65D44F Comment Length        0000 (0)\n+65D451 Disk Start            0000 (0)\n+65D453 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D455 Ext File Attributes   00000000 (0)\n+65D459 Local Header Offset   00108875 (1083509)\n+65D45D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D45D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D4BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D4BE   Length              0005 (5)\n+65D4C0   Flags               01 (1) 'Modification'\n+65D4C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D4C5 CENTRAL HEADER #421   02014B50 (33639248)\n+65D4C9 Created Zip Spec      14 (20) '2.0'\n+65D4CA Created OS            00 (0) 'MS-DOS'\n+65D4CB Extract Zip Spec      14 (20) '2.0'\n+65D4CC Extract OS            00 (0) 'MS-DOS'\n+65D4CD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65D4CF Compression Method    0000 (0) 'Stored'\n+65D4D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D4D5 CRC                   A18A8EB9 (2710212281)\n+65D4D9 Compressed Size       0000328A (12938)\n+65D4DD Uncompressed Size     0000328A (12938)\n+65D4E1 Filename Length       0075 (117)\n+65D4E3 Extra Length          0009 (9)\n+65D4E5 Comment Length        0000 (0)\n+65D4E7 Disk Start            0000 (0)\n+65D4E9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D4EB Ext File Attributes   00000000 (0)\n+65D4EF Local Header Offset   001088FB (1083643)\n+65D4F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D4F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D568 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D56A   Length              0005 (5)\n+65D56C   Flags               01 (1) 'Modification'\n+65D56D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D571 CENTRAL HEADER #422   02014B50 (33639248)\n+65D575 Created Zip Spec      14 (20) '2.0'\n+65D576 Created OS            00 (0) 'MS-DOS'\n+65D577 Extract Zip Spec      14 (20) '2.0'\n+65D578 Extract OS            00 (0) 'MS-DOS'\n+65D579 General Purpose Flag  0000 (0)\n+65D57B Compression Method    0000 (0) 'Stored'\n+65D57D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D581 CRC                   00000000 (0)\n+65D585 Compressed Size       00000000 (0)\n+65D589 Uncompressed Size     00000000 (0)\n+65D58D Filename Length       005E (94)\n+65D58F Extra Length          0009 (9)\n+65D591 Comment Length        0000 (0)\n+65D593 Disk Start            0000 (0)\n+65D595 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D597 Ext File Attributes   00000000 (0)\n+65D59B Local Header Offset   0010BC31 (1096753)\n+65D59F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D59F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D5FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D5FF   Length              0005 (5)\n+65D601   Flags               01 (1) 'Modification'\n+65D602   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D606 CENTRAL HEADER #423   02014B50 (33639248)\n+65D60A Created Zip Spec      14 (20) '2.0'\n+65D60B Created OS            00 (0) 'MS-DOS'\n+65D60C Extract Zip Spec      14 (20) '2.0'\n+65D60D Extract OS            00 (0) 'MS-DOS'\n+65D60E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65D610 Compression Method    0000 (0) 'Stored'\n+65D612 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D616 CRC                   B7B762D6 (3082248918)\n+65D61A Compressed Size       00003879 (14457)\n+65D61E Uncompressed Size     00003879 (14457)\n+65D622 Filename Length       0074 (116)\n+65D624 Extra Length          0009 (9)\n+65D626 Comment Length        0000 (0)\n+65D628 Disk Start            0000 (0)\n+65D62A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D62C Ext File Attributes   00000000 (0)\n+65D630 Local Header Offset   0010BCB6 (1096886)\n+65D634 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D634: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D6A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D6AA   Length              0005 (5)\n+65D6AC   Flags               01 (1) 'Modification'\n+65D6AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D6B1 CENTRAL HEADER #424   02014B50 (33639248)\n+65D6B5 Created Zip Spec      14 (20) '2.0'\n+65D6B6 Created OS            00 (0) 'MS-DOS'\n+65D6B7 Extract Zip Spec      14 (20) '2.0'\n+65D6B8 Extract OS            00 (0) 'MS-DOS'\n+65D6B9 General Purpose Flag  0000 (0)\n+65D6BB Compression Method    0000 (0) 'Stored'\n+65D6BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D6C1 CRC                   00000000 (0)\n+65D6C5 Compressed Size       00000000 (0)\n+65D6C9 Uncompressed Size     00000000 (0)\n+65D6CD Filename Length       0062 (98)\n+65D6CF Extra Length          0009 (9)\n+65D6D1 Comment Length        0000 (0)\n+65D6D3 Disk Start            0000 (0)\n+65D6D5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D6D7 Ext File Attributes   00000000 (0)\n+65D6DB Local Header Offset   0010F5DA (1111514)\n+65D6DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D6DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D741 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D743   Length              0005 (5)\n+65D745   Flags               01 (1) 'Modification'\n+65D746   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D74A CENTRAL HEADER #425   02014B50 (33639248)\n+65D74E Created Zip Spec      14 (20) '2.0'\n+65D74F Created OS            00 (0) 'MS-DOS'\n+65D750 Extract Zip Spec      14 (20) '2.0'\n+65D751 Extract OS            00 (0) 'MS-DOS'\n+65D752 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65D754 Compression Method    0000 (0) 'Stored'\n+65D756 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D75A CRC                   A2B9D29A (2730087066)\n+65D75E Compressed Size       00002150 (8528)\n+65D762 Uncompressed Size     00002150 (8528)\n+65D766 Filename Length       0078 (120)\n+65D768 Extra Length          0009 (9)\n+65D76A Comment Length        0000 (0)\n+65D76C Disk Start            0000 (0)\n+65D76E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D770 Ext File Attributes   00000000 (0)\n+65D774 Local Header Offset   0010F663 (1111651)\n+65D778 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D778: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D7F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D7F2   Length              0005 (5)\n+65D7F4   Flags               01 (1) 'Modification'\n+65D7F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D7F9 CENTRAL HEADER #426   02014B50 (33639248)\n+65D7FD Created Zip Spec      14 (20) '2.0'\n+65D7FE Created OS            00 (0) 'MS-DOS'\n+65D7FF Extract Zip Spec      14 (20) '2.0'\n+65D800 Extract OS            00 (0) 'MS-DOS'\n+65D801 General Purpose Flag  0000 (0)\n+65D803 Compression Method    0000 (0) 'Stored'\n+65D805 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D809 CRC                   00000000 (0)\n+65D80D Compressed Size       00000000 (0)\n+65D811 Uncompressed Size     00000000 (0)\n+65D815 Filename Length       005B (91)\n+65D817 Extra Length          0009 (9)\n+65D819 Comment Length        0000 (0)\n+65D81B Disk Start            0000 (0)\n+65D81D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D81F Ext File Attributes   00000000 (0)\n+65D823 Local Header Offset   00111862 (1120354)\n+65D827 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D827: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D882 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D884   Length              0005 (5)\n+65D886   Flags               01 (1) 'Modification'\n+65D887   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D88B CENTRAL HEADER #427   02014B50 (33639248)\n+65D88F Created Zip Spec      14 (20) '2.0'\n+65D890 Created OS            00 (0) 'MS-DOS'\n+65D891 Extract Zip Spec      14 (20) '2.0'\n+65D892 Extract OS            00 (0) 'MS-DOS'\n+65D893 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65D895 Compression Method    0000 (0) 'Stored'\n+65D897 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D89B CRC                   C4FC7EA2 (3304881826)\n+65D89F Compressed Size       000011DC (4572)\n+65D8A3 Uncompressed Size     000011DC (4572)\n+65D8A7 Filename Length       0071 (113)\n+65D8A9 Extra Length          0009 (9)\n+65D8AB Comment Length        0000 (0)\n+65D8AD Disk Start            0000 (0)\n+65D8AF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D8B1 Ext File Attributes   00000000 (0)\n+65D8B5 Local Header Offset   001118E4 (1120484)\n+65D8B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D8B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D92A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D92C   Length              0005 (5)\n+65D92E   Flags               01 (1) 'Modification'\n+65D92F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D933 CENTRAL HEADER #428   02014B50 (33639248)\n+65D937 Created Zip Spec      14 (20) '2.0'\n+65D938 Created OS            00 (0) 'MS-DOS'\n+65D939 Extract Zip Spec      14 (20) '2.0'\n+65D93A Extract OS            00 (0) 'MS-DOS'\n+65D93B General Purpose Flag  0000 (0)\n+65D93D Compression Method    0000 (0) 'Stored'\n+65D93F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D943 CRC                   00000000 (0)\n+65D947 Compressed Size       00000000 (0)\n+65D94B Uncompressed Size     00000000 (0)\n+65D94F Filename Length       005E (94)\n+65D951 Extra Length          0009 (9)\n+65D953 Comment Length        0000 (0)\n+65D955 Disk Start            0000 (0)\n+65D957 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D959 Ext File Attributes   00000000 (0)\n+65D95D Local Header Offset   00112B68 (1125224)\n+65D961 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D961: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65D9BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65D9C1   Length              0005 (5)\n+65D9C3   Flags               01 (1) 'Modification'\n+65D9C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65D9C8 CENTRAL HEADER #429   02014B50 (33639248)\n+65D9CC Created Zip Spec      14 (20) '2.0'\n+65D9CD Created OS            00 (0) 'MS-DOS'\n+65D9CE Extract Zip Spec      14 (20) '2.0'\n+65D9CF Extract OS            00 (0) 'MS-DOS'\n+65D9D0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65D9D2 Compression Method    0000 (0) 'Stored'\n+65D9D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65D9D8 CRC                   EE30A8D8 (3996166360)\n+65D9DC Compressed Size       000072FB (29435)\n+65D9E0 Uncompressed Size     000072FB (29435)\n+65D9E4 Filename Length       0074 (116)\n+65D9E6 Extra Length          0009 (9)\n+65D9E8 Comment Length        0000 (0)\n+65D9EA Disk Start            0000 (0)\n+65D9EC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65D9EE Ext File Attributes   00000000 (0)\n+65D9F2 Local Header Offset   00112BED (1125357)\n+65D9F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65D9F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65DA6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65DA6C   Length              0005 (5)\n+65DA6E   Flags               01 (1) 'Modification'\n+65DA6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65DA73 CENTRAL HEADER #430   02014B50 (33639248)\n+65DA77 Created Zip Spec      14 (20) '2.0'\n+65DA78 Created OS            00 (0) 'MS-DOS'\n+65DA79 Extract Zip Spec      14 (20) '2.0'\n+65DA7A Extract OS            00 (0) 'MS-DOS'\n+65DA7B General Purpose Flag  0000 (0)\n+65DA7D Compression Method    0000 (0) 'Stored'\n+65DA7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65DA83 CRC                   00000000 (0)\n+65DA87 Compressed Size       00000000 (0)\n+65DA8B Uncompressed Size     00000000 (0)\n+65DA8F Filename Length       0064 (100)\n+65DA91 Extra Length          0009 (9)\n+65DA93 Comment Length        0000 (0)\n+65DA95 Disk Start            0000 (0)\n+65DA97 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65DA99 Ext File Attributes   00000000 (0)\n+65DA9D Local Header Offset   00119F93 (1154963)\n+65DAA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65DAA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65DB05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65DB07   Length              0005 (5)\n+65DB09   Flags               01 (1) 'Modification'\n+65DB0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65DB0E CENTRAL HEADER #431   02014B50 (33639248)\n+65DB12 Created Zip Spec      14 (20) '2.0'\n+65DB13 Created OS            00 (0) 'MS-DOS'\n+65DB14 Extract Zip Spec      14 (20) '2.0'\n+65DB15 Extract OS            00 (0) 'MS-DOS'\n+65DB16 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65DB18 Compression Method    0000 (0) 'Stored'\n+65DB1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65DB1E CRC                   EA36353C (3929421116)\n+65DB22 Compressed Size       0000480E (18446)\n+65DB26 Uncompressed Size     0000480E (18446)\n+65DB2A Filename Length       007A (122)\n+65DB2C Extra Length          0009 (9)\n+65DB2E Comment Length        0000 (0)\n+65DB30 Disk Start            0000 (0)\n+65DB32 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65DB34 Ext File Attributes   00000000 (0)\n+65DB38 Local Header Offset   0011A01E (1155102)\n+65DB3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65DB3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65DBB6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65DBB8   Length              0005 (5)\n+65DBBA   Flags               01 (1) 'Modification'\n+65DBBB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65DBBF CENTRAL HEADER #432   02014B50 (33639248)\n+65DBC3 Created Zip Spec      14 (20) '2.0'\n+65DBC4 Created OS            00 (0) 'MS-DOS'\n+65DBC5 Extract Zip Spec      14 (20) '2.0'\n+65DBC6 Extract OS            00 (0) 'MS-DOS'\n+65DBC7 General Purpose Flag  0000 (0)\n+65DBC9 Compression Method    0000 (0) 'Stored'\n+65DBCB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65DBCF CRC                   00000000 (0)\n+65DBD3 Compressed Size       00000000 (0)\n+65DBD7 Uncompressed Size     00000000 (0)\n+65DBDB Filename Length       0063 (99)\n+65DBDD Extra Length          0009 (9)\n+65DBDF Comment Length        0000 (0)\n+65DBE1 Disk Start            0000 (0)\n+65DBE3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65DBE5 Ext File Attributes   00000000 (0)\n+65DBE9 Local Header Offset   0011E8DD (1173725)\n+65DBED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65DBED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65DC50 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65DC52   Length              0005 (5)\n+65DC54   Flags               01 (1) 'Modification'\n+65DC55   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65DC59 CENTRAL HEADER #433   02014B50 (33639248)\n+65DC5D Created Zip Spec      14 (20) '2.0'\n+65DC5E Created OS            00 (0) 'MS-DOS'\n+65DC5F Extract Zip Spec      14 (20) '2.0'\n+65DC60 Extract OS            00 (0) 'MS-DOS'\n+65DC61 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65DC63 Compression Method    0000 (0) 'Stored'\n+65DC65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65DC69 CRC                   CA474DE0 (3393670624)\n+65DC6D Compressed Size       000007B6 (1974)\n+65DC71 Uncompressed Size     000007B6 (1974)\n+65DC75 Filename Length       0079 (121)\n+65DC77 Extra Length          0009 (9)\n+65DC79 Comment Length        0000 (0)\n+65DC7B Disk Start            0000 (0)\n+65DC7D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65DC7F Ext File Attributes   00000000 (0)\n+65DC83 Local Header Offset   0011E967 (1173863)\n+65DC87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65DC87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65DD00 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65DD02   Length              0005 (5)\n+65DD04   Flags               01 (1) 'Modification'\n+65DD05   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65DD09 CENTRAL HEADER #434   02014B50 (33639248)\n+65DD0D Created Zip Spec      14 (20) '2.0'\n+65DD0E Created OS            00 (0) 'MS-DOS'\n+65DD0F Extract Zip Spec      14 (20) '2.0'\n+65DD10 Extract OS            00 (0) 'MS-DOS'\n+65DD11 General Purpose Flag  0000 (0)\n+65DD13 Compression Method    0000 (0) 'Stored'\n+65DD15 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65DD19 CRC                   00000000 (0)\n+65DD1D Compressed Size       00000000 (0)\n+65DD21 Uncompressed Size     00000000 (0)\n+65DD25 Filename Length       005F (95)\n+65DD27 Extra Length          0009 (9)\n+65DD29 Comment Length        0000 (0)\n+65DD2B Disk Start            0000 (0)\n+65DD2D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65DD2F Ext File Attributes   00000000 (0)\n+65DD33 Local Header Offset   0011F1CD (1176013)\n+65DD37 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65DD37: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65DD96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65DD98   Length              0005 (5)\n+65DD9A   Flags               01 (1) 'Modification'\n+65DD9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65DD9F CENTRAL HEADER #435   02014B50 (33639248)\n+65DDA3 Created Zip Spec      14 (20) '2.0'\n+65DDA4 Created OS            00 (0) 'MS-DOS'\n+65DDA5 Extract Zip Spec      14 (20) '2.0'\n+65DDA6 Extract OS            00 (0) 'MS-DOS'\n+65DDA7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65DDA9 Compression Method    0000 (0) 'Stored'\n+65DDAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65DDAF CRC                   A19F99D4 (2711591380)\n+65DDB3 Compressed Size       000011CB (4555)\n+65DDB7 Uncompressed Size     000011CB (4555)\n+65DDBB Filename Length       0075 (117)\n+65DDBD Extra Length          0009 (9)\n+65DDBF Comment Length        0000 (0)\n+65DDC1 Disk Start            0000 (0)\n+65DDC3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65DDC5 Ext File Attributes   00000000 (0)\n+65DDC9 Local Header Offset   0011F253 (1176147)\n+65DDCD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65DDCD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65DE42 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65DE44   Length              0005 (5)\n+65DE46   Flags               01 (1) 'Modification'\n+65DE47   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65DE4B CENTRAL HEADER #436   02014B50 (33639248)\n+65DE4F Created Zip Spec      14 (20) '2.0'\n+65DE50 Created OS            00 (0) 'MS-DOS'\n+65DE51 Extract Zip Spec      14 (20) '2.0'\n+65DE52 Extract OS            00 (0) 'MS-DOS'\n+65DE53 General Purpose Flag  0000 (0)\n+65DE55 Compression Method    0000 (0) 'Stored'\n+65DE57 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65DE5B CRC                   00000000 (0)\n+65DE5F Compressed Size       00000000 (0)\n+65DE63 Uncompressed Size     00000000 (0)\n+65DE67 Filename Length       005B (91)\n+65DE69 Extra Length          0009 (9)\n+65DE6B Comment Length        0000 (0)\n+65DE6D Disk Start            0000 (0)\n+65DE6F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65DE71 Ext File Attributes   00000000 (0)\n+65DE75 Local Header Offset   001204CA (1180874)\n+65DE79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65DE79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65DED4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65DED6   Length              0005 (5)\n+65DED8   Flags               01 (1) 'Modification'\n+65DED9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65DEDD CENTRAL HEADER #437   02014B50 (33639248)\n+65DEE1 Created Zip Spec      14 (20) '2.0'\n+65DEE2 Created OS            00 (0) 'MS-DOS'\n+65DEE3 Extract Zip Spec      14 (20) '2.0'\n+65DEE4 Extract OS            00 (0) 'MS-DOS'\n+65DEE5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65DEE7 Compression Method    0000 (0) 'Stored'\n+65DEE9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65DEED CRC                   7573E84B (1970530379)\n+65DEF1 Compressed Size       0000284F (10319)\n+65DEF5 Uncompressed Size     0000284F (10319)\n+65DEF9 Filename Length       0071 (113)\n+65DEFB Extra Length          0009 (9)\n+65DEFD Comment Length        0000 (0)\n+65DEFF Disk Start            0000 (0)\n+65DF01 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65DF03 Ext File Attributes   00000000 (0)\n+65DF07 Local Header Offset   0012054C (1181004)\n+65DF0B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65DF0B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65DF7C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65DF7E   Length              0005 (5)\n+65DF80   Flags               01 (1) 'Modification'\n+65DF81   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65DF85 CENTRAL HEADER #438   02014B50 (33639248)\n+65DF89 Created Zip Spec      14 (20) '2.0'\n+65DF8A Created OS            00 (0) 'MS-DOS'\n+65DF8B Extract Zip Spec      14 (20) '2.0'\n+65DF8C Extract OS            00 (0) 'MS-DOS'\n+65DF8D General Purpose Flag  0000 (0)\n+65DF8F Compression Method    0000 (0) 'Stored'\n+65DF91 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65DF95 CRC                   00000000 (0)\n+65DF99 Compressed Size       00000000 (0)\n+65DF9D Uncompressed Size     00000000 (0)\n+65DFA1 Filename Length       005F (95)\n+65DFA3 Extra Length          0009 (9)\n+65DFA5 Comment Length        0000 (0)\n+65DFA7 Disk Start            0000 (0)\n+65DFA9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65DFAB Ext File Attributes   00000000 (0)\n+65DFAF Local Header Offset   00122E43 (1191491)\n+65DFB3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65DFB3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E012 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E014   Length              0005 (5)\n+65E016   Flags               01 (1) 'Modification'\n+65E017   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E01B CENTRAL HEADER #439   02014B50 (33639248)\n+65E01F Created Zip Spec      14 (20) '2.0'\n+65E020 Created OS            00 (0) 'MS-DOS'\n+65E021 Extract Zip Spec      14 (20) '2.0'\n+65E022 Extract OS            00 (0) 'MS-DOS'\n+65E023 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65E025 Compression Method    0000 (0) 'Stored'\n+65E027 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E02B CRC                   131CB9D8 (320649688)\n+65E02F Compressed Size       00002777 (10103)\n+65E033 Uncompressed Size     00002777 (10103)\n+65E037 Filename Length       0075 (117)\n+65E039 Extra Length          0009 (9)\n+65E03B Comment Length        0000 (0)\n+65E03D Disk Start            0000 (0)\n+65E03F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E041 Ext File Attributes   00000000 (0)\n+65E045 Local Header Offset   00122EC9 (1191625)\n+65E049 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E049: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E0BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E0C0   Length              0005 (5)\n+65E0C2   Flags               01 (1) 'Modification'\n+65E0C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E0C7 CENTRAL HEADER #440   02014B50 (33639248)\n+65E0CB Created Zip Spec      14 (20) '2.0'\n+65E0CC Created OS            00 (0) 'MS-DOS'\n+65E0CD Extract Zip Spec      14 (20) '2.0'\n+65E0CE Extract OS            00 (0) 'MS-DOS'\n+65E0CF General Purpose Flag  0000 (0)\n+65E0D1 Compression Method    0000 (0) 'Stored'\n+65E0D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E0D7 CRC                   00000000 (0)\n+65E0DB Compressed Size       00000000 (0)\n+65E0DF Uncompressed Size     00000000 (0)\n+65E0E3 Filename Length       005E (94)\n+65E0E5 Extra Length          0009 (9)\n+65E0E7 Comment Length        0000 (0)\n+65E0E9 Disk Start            0000 (0)\n+65E0EB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E0ED Ext File Attributes   00000000 (0)\n+65E0F1 Local Header Offset   001256EC (1201900)\n+65E0F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E0F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E153 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E155   Length              0005 (5)\n+65E157   Flags               01 (1) 'Modification'\n+65E158   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E15C CENTRAL HEADER #441   02014B50 (33639248)\n+65E160 Created Zip Spec      14 (20) '2.0'\n+65E161 Created OS            00 (0) 'MS-DOS'\n+65E162 Extract Zip Spec      14 (20) '2.0'\n+65E163 Extract OS            00 (0) 'MS-DOS'\n+65E164 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65E166 Compression Method    0000 (0) 'Stored'\n+65E168 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E16C CRC                   95FAB1DA (2516234714)\n+65E170 Compressed Size       0000110D (4365)\n+65E174 Uncompressed Size     0000110D (4365)\n+65E178 Filename Length       0074 (116)\n+65E17A Extra Length          0009 (9)\n+65E17C Comment Length        0000 (0)\n+65E17E Disk Start            0000 (0)\n+65E180 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E182 Ext File Attributes   00000000 (0)\n+65E186 Local Header Offset   00125771 (1202033)\n+65E18A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E18A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E1FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E200   Length              0005 (5)\n+65E202   Flags               01 (1) 'Modification'\n+65E203   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E207 CENTRAL HEADER #442   02014B50 (33639248)\n+65E20B Created Zip Spec      14 (20) '2.0'\n+65E20C Created OS            00 (0) 'MS-DOS'\n+65E20D Extract Zip Spec      14 (20) '2.0'\n+65E20E Extract OS            00 (0) 'MS-DOS'\n+65E20F General Purpose Flag  0000 (0)\n+65E211 Compression Method    0000 (0) 'Stored'\n+65E213 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E217 CRC                   00000000 (0)\n+65E21B Compressed Size       00000000 (0)\n+65E21F Uncompressed Size     00000000 (0)\n+65E223 Filename Length       0061 (97)\n+65E225 Extra Length          0009 (9)\n+65E227 Comment Length        0000 (0)\n+65E229 Disk Start            0000 (0)\n+65E22B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E22D Ext File Attributes   00000000 (0)\n+65E231 Local Header Offset   00126929 (1206569)\n+65E235 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E235: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E296 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E298   Length              0005 (5)\n+65E29A   Flags               01 (1) 'Modification'\n+65E29B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E29F CENTRAL HEADER #443   02014B50 (33639248)\n+65E2A3 Created Zip Spec      14 (20) '2.0'\n+65E2A4 Created OS            00 (0) 'MS-DOS'\n+65E2A5 Extract Zip Spec      14 (20) '2.0'\n+65E2A6 Extract OS            00 (0) 'MS-DOS'\n+65E2A7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65E2A9 Compression Method    0000 (0) 'Stored'\n+65E2AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E2AF CRC                   B1E82858 (2984781912)\n+65E2B3 Compressed Size       000019D6 (6614)\n+65E2B7 Uncompressed Size     000019D6 (6614)\n+65E2BB Filename Length       0077 (119)\n+65E2BD Extra Length          0009 (9)\n+65E2BF Comment Length        0000 (0)\n+65E2C1 Disk Start            0000 (0)\n+65E2C3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E2C5 Ext File Attributes   00000000 (0)\n+65E2C9 Local Header Offset   001269B1 (1206705)\n+65E2CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E2CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E344 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E346   Length              0005 (5)\n+65E348   Flags               01 (1) 'Modification'\n+65E349   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E34D CENTRAL HEADER #444   02014B50 (33639248)\n+65E351 Created Zip Spec      14 (20) '2.0'\n+65E352 Created OS            00 (0) 'MS-DOS'\n+65E353 Extract Zip Spec      14 (20) '2.0'\n+65E354 Extract OS            00 (0) 'MS-DOS'\n+65E355 General Purpose Flag  0000 (0)\n+65E357 Compression Method    0000 (0) 'Stored'\n+65E359 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E35D CRC                   00000000 (0)\n+65E361 Compressed Size       00000000 (0)\n+65E365 Uncompressed Size     00000000 (0)\n+65E369 Filename Length       005E (94)\n+65E36B Extra Length          0009 (9)\n+65E36D Comment Length        0000 (0)\n+65E36F Disk Start            0000 (0)\n+65E371 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E373 Ext File Attributes   00000000 (0)\n+65E377 Local Header Offset   00128435 (1213493)\n+65E37B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E37B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E3D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E3DB   Length              0005 (5)\n+65E3DD   Flags               01 (1) 'Modification'\n+65E3DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E3E2 CENTRAL HEADER #445   02014B50 (33639248)\n+65E3E6 Created Zip Spec      14 (20) '2.0'\n+65E3E7 Created OS            00 (0) 'MS-DOS'\n+65E3E8 Extract Zip Spec      14 (20) '2.0'\n+65E3E9 Extract OS            00 (0) 'MS-DOS'\n+65E3EA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65E3EC Compression Method    0000 (0) 'Stored'\n+65E3EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E3F2 CRC                   EA13965E (3927152222)\n+65E3F6 Compressed Size       00000F7E (3966)\n+65E3FA Uncompressed Size     00000F7E (3966)\n+65E3FE Filename Length       0074 (116)\n+65E400 Extra Length          0009 (9)\n+65E402 Comment Length        0000 (0)\n+65E404 Disk Start            0000 (0)\n+65E406 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E408 Ext File Attributes   00000000 (0)\n+65E40C Local Header Offset   001284BA (1213626)\n+65E410 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E410: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E484 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E486   Length              0005 (5)\n+65E488   Flags               01 (1) 'Modification'\n+65E489   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E48D CENTRAL HEADER #446   02014B50 (33639248)\n+65E491 Created Zip Spec      14 (20) '2.0'\n+65E492 Created OS            00 (0) 'MS-DOS'\n+65E493 Extract Zip Spec      14 (20) '2.0'\n+65E494 Extract OS            00 (0) 'MS-DOS'\n+65E495 General Purpose Flag  0000 (0)\n+65E497 Compression Method    0000 (0) 'Stored'\n+65E499 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E49D CRC                   00000000 (0)\n+65E4A1 Compressed Size       00000000 (0)\n+65E4A5 Uncompressed Size     00000000 (0)\n+65E4A9 Filename Length       0057 (87)\n+65E4AB Extra Length          0009 (9)\n+65E4AD Comment Length        0000 (0)\n+65E4AF Disk Start            0000 (0)\n+65E4B1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E4B3 Ext File Attributes   00000000 (0)\n+65E4B7 Local Header Offset   001294E3 (1217763)\n+65E4BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E4BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E512 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E514   Length              0005 (5)\n+65E516   Flags               01 (1) 'Modification'\n+65E517   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E51B CENTRAL HEADER #447   02014B50 (33639248)\n+65E51F Created Zip Spec      14 (20) '2.0'\n+65E520 Created OS            00 (0) 'MS-DOS'\n+65E521 Extract Zip Spec      14 (20) '2.0'\n+65E522 Extract OS            00 (0) 'MS-DOS'\n+65E523 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65E525 Compression Method    0000 (0) 'Stored'\n+65E527 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E52B CRC                   C8903588 (3364894088)\n+65E52F Compressed Size       00002CD6 (11478)\n+65E533 Uncompressed Size     00002CD6 (11478)\n+65E537 Filename Length       006D (109)\n+65E539 Extra Length          0009 (9)\n+65E53B Comment Length        0000 (0)\n+65E53D Disk Start            0000 (0)\n+65E53F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E541 Ext File Attributes   00000000 (0)\n+65E545 Local Header Offset   00129561 (1217889)\n+65E549 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E549: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E5B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E5B8   Length              0005 (5)\n+65E5BA   Flags               01 (1) 'Modification'\n+65E5BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E5BF CENTRAL HEADER #448   02014B50 (33639248)\n+65E5C3 Created Zip Spec      14 (20) '2.0'\n+65E5C4 Created OS            00 (0) 'MS-DOS'\n+65E5C5 Extract Zip Spec      14 (20) '2.0'\n+65E5C6 Extract OS            00 (0) 'MS-DOS'\n+65E5C7 General Purpose Flag  0000 (0)\n+65E5C9 Compression Method    0000 (0) 'Stored'\n+65E5CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E5CF CRC                   00000000 (0)\n+65E5D3 Compressed Size       00000000 (0)\n+65E5D7 Uncompressed Size     00000000 (0)\n+65E5DB Filename Length       0068 (104)\n+65E5DD Extra Length          0009 (9)\n+65E5DF Comment Length        0000 (0)\n+65E5E1 Disk Start            0000 (0)\n+65E5E3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E5E5 Ext File Attributes   00000000 (0)\n+65E5E9 Local Header Offset   0012C2DB (1229531)\n+65E5ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E5ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E655 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E657   Length              0005 (5)\n+65E659   Flags               01 (1) 'Modification'\n+65E65A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E65E CENTRAL HEADER #449   02014B50 (33639248)\n+65E662 Created Zip Spec      14 (20) '2.0'\n+65E663 Created OS            00 (0) 'MS-DOS'\n+65E664 Extract Zip Spec      14 (20) '2.0'\n+65E665 Extract OS            00 (0) 'MS-DOS'\n+65E666 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65E668 Compression Method    0000 (0) 'Stored'\n+65E66A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E66E CRC                   D19560D0 (3516227792)\n+65E672 Compressed Size       00000A2F (2607)\n+65E676 Uncompressed Size     00000A2F (2607)\n+65E67A Filename Length       007E (126)\n+65E67C Extra Length          0009 (9)\n+65E67E Comment Length        0000 (0)\n+65E680 Disk Start            0000 (0)\n+65E682 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E684 Ext File Attributes   00000000 (0)\n+65E688 Local Header Offset   0012C36A (1229674)\n+65E68C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E68C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E70A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E70C   Length              0005 (5)\n+65E70E   Flags               01 (1) 'Modification'\n+65E70F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E713 CENTRAL HEADER #450   02014B50 (33639248)\n+65E717 Created Zip Spec      14 (20) '2.0'\n+65E718 Created OS            00 (0) 'MS-DOS'\n+65E719 Extract Zip Spec      14 (20) '2.0'\n+65E71A Extract OS            00 (0) 'MS-DOS'\n+65E71B General Purpose Flag  0000 (0)\n+65E71D Compression Method    0000 (0) 'Stored'\n+65E71F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E723 CRC                   00000000 (0)\n+65E727 Compressed Size       00000000 (0)\n+65E72B Uncompressed Size     00000000 (0)\n+65E72F Filename Length       0032 (50)\n+65E731 Extra Length          0009 (9)\n+65E733 Comment Length        0000 (0)\n+65E735 Disk Start            0000 (0)\n+65E737 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E739 Ext File Attributes   00000000 (0)\n+65E73D Local Header Offset   0012CE4E (1232462)\n+65E741 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E741: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E773 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E775   Length              0005 (5)\n+65E777   Flags               01 (1) 'Modification'\n+65E778   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E77C CENTRAL HEADER #451   02014B50 (33639248)\n+65E780 Created Zip Spec      14 (20) '2.0'\n+65E781 Created OS            00 (0) 'MS-DOS'\n+65E782 Extract Zip Spec      14 (20) '2.0'\n+65E783 Extract OS            00 (0) 'MS-DOS'\n+65E784 General Purpose Flag  0000 (0)\n+65E786 Compression Method    0000 (0) 'Stored'\n+65E788 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E78C CRC                   00000000 (0)\n+65E790 Compressed Size       00000000 (0)\n+65E794 Uncompressed Size     00000000 (0)\n+65E798 Filename Length       0039 (57)\n+65E79A Extra Length          0009 (9)\n+65E79C Comment Length        0000 (0)\n+65E79E Disk Start            0000 (0)\n+65E7A0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E7A2 Ext File Attributes   00000000 (0)\n+65E7A6 Local Header Offset   0012CEA7 (1232551)\n+65E7AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E7AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E7E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E7E5   Length              0005 (5)\n+65E7E7   Flags               01 (1) 'Modification'\n+65E7E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E7EC CENTRAL HEADER #452   02014B50 (33639248)\n+65E7F0 Created Zip Spec      14 (20) '2.0'\n+65E7F1 Created OS            00 (0) 'MS-DOS'\n+65E7F2 Extract Zip Spec      14 (20) '2.0'\n+65E7F3 Extract OS            00 (0) 'MS-DOS'\n+65E7F4 General Purpose Flag  0000 (0)\n+65E7F6 Compression Method    0000 (0) 'Stored'\n+65E7F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E7FC CRC                   00000000 (0)\n+65E800 Compressed Size       00000000 (0)\n+65E804 Uncompressed Size     00000000 (0)\n+65E808 Filename Length       006F (111)\n+65E80A Extra Length          0009 (9)\n+65E80C Comment Length        0000 (0)\n+65E80E Disk Start            0000 (0)\n+65E810 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E812 Ext File Attributes   00000000 (0)\n+65E816 Local Header Offset   0012CF07 (1232647)\n+65E81A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E81A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E889 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E88B   Length              0005 (5)\n+65E88D   Flags               01 (1) 'Modification'\n+65E88E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E892 CENTRAL HEADER #453   02014B50 (33639248)\n+65E896 Created Zip Spec      14 (20) '2.0'\n+65E897 Created OS            00 (0) 'MS-DOS'\n+65E898 Extract Zip Spec      14 (20) '2.0'\n+65E899 Extract OS            00 (0) 'MS-DOS'\n+65E89A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65E89C Compression Method    0000 (0) 'Stored'\n+65E89E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E8A2 CRC                   A1414F13 (2705411859)\n+65E8A6 Compressed Size       0000521D (21021)\n+65E8AA Uncompressed Size     0000521D (21021)\n+65E8AE Filename Length       0085 (133)\n+65E8B0 Extra Length          0009 (9)\n+65E8B2 Comment Length        0000 (0)\n+65E8B4 Disk Start            0000 (0)\n+65E8B6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E8B8 Ext File Attributes   00000000 (0)\n+65E8BC Local Header Offset   0012CF9D (1232797)\n+65E8C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              X'\n #\n-# WARNING: Offset 0x65AC9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x65E8C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-65AD20 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65AD22   Length              0005 (5)\n-65AD24   Flags               01 (1) 'Modification'\n-65AD25   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65AD29 CENTRAL HEADER #454   02014B50 (33639248)\n-65AD2D Created Zip Spec      14 (20) '2.0'\n-65AD2E Created OS            00 (0) 'MS-DOS'\n-65AD2F Extract Zip Spec      14 (20) '2.0'\n-65AD30 Extract OS            00 (0) 'MS-DOS'\n-65AD31 General Purpose Flag  0000 (0)\n-65AD33 Compression Method    0000 (0) 'Stored'\n-65AD35 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65AD39 CRC                   00000000 (0)\n-65AD3D Compressed Size       00000000 (0)\n-65AD41 Uncompressed Size     00000000 (0)\n-65AD45 Filename Length       002F (47)\n-65AD47 Extra Length          0009 (9)\n-65AD49 Comment Length        0000 (0)\n-65AD4B Disk Start            0000 (0)\n-65AD4D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65AD4F Ext File Attributes   00000000 (0)\n-65AD53 Local Header Offset   0012E8AE (1239214)\n-65AD57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65AD57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65AD86 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65AD88   Length              0005 (5)\n-65AD8A   Flags               01 (1) 'Modification'\n-65AD8B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65AD8F CENTRAL HEADER #455   02014B50 (33639248)\n-65AD93 Created Zip Spec      14 (20) '2.0'\n-65AD94 Created OS            00 (0) 'MS-DOS'\n-65AD95 Extract Zip Spec      14 (20) '2.0'\n-65AD96 Extract OS            00 (0) 'MS-DOS'\n-65AD97 General Purpose Flag  0000 (0)\n-65AD99 Compression Method    0000 (0) 'Stored'\n-65AD9B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65AD9F CRC                   00000000 (0)\n-65ADA3 Compressed Size       00000000 (0)\n-65ADA7 Uncompressed Size     00000000 (0)\n-65ADAB Filename Length       0036 (54)\n-65ADAD Extra Length          0009 (9)\n-65ADAF Comment Length        0000 (0)\n-65ADB1 Disk Start            0000 (0)\n-65ADB3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65ADB5 Ext File Attributes   00000000 (0)\n-65ADB9 Local Header Offset   0012E904 (1239300)\n-65ADBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65ADBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65ADF3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65ADF5   Length              0005 (5)\n-65ADF7   Flags               01 (1) 'Modification'\n-65ADF8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65ADFC CENTRAL HEADER #456   02014B50 (33639248)\n-65AE00 Created Zip Spec      14 (20) '2.0'\n-65AE01 Created OS            00 (0) 'MS-DOS'\n-65AE02 Extract Zip Spec      14 (20) '2.0'\n-65AE03 Extract OS            00 (0) 'MS-DOS'\n-65AE04 General Purpose Flag  0000 (0)\n-65AE06 Compression Method    0000 (0) 'Stored'\n-65AE08 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65AE0C CRC                   00000000 (0)\n-65AE10 Compressed Size       00000000 (0)\n-65AE14 Uncompressed Size     00000000 (0)\n-65AE18 Filename Length       006C (108)\n-65AE1A Extra Length          0009 (9)\n-65AE1C Comment Length        0000 (0)\n-65AE1E Disk Start            0000 (0)\n-65AE20 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65AE22 Ext File Attributes   00000000 (0)\n-65AE26 Local Header Offset   0012E961 (1239393)\n-65AE2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65AE2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65AE96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65AE98   Length              0005 (5)\n-65AE9A   Flags               01 (1) 'Modification'\n-65AE9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65AE9F CENTRAL HEADER #457   02014B50 (33639248)\n-65AEA3 Created Zip Spec      14 (20) '2.0'\n-65AEA4 Created OS            00 (0) 'MS-DOS'\n-65AEA5 Extract Zip Spec      14 (20) '2.0'\n-65AEA6 Extract OS            00 (0) 'MS-DOS'\n-65AEA7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65AEA9 Compression Method    0000 (0) 'Stored'\n-65AEAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65AEAF CRC                   CB05D09B (3406155931)\n-65AEB3 Compressed Size       00005230 (21040)\n-65AEB7 Uncompressed Size     00005230 (21040)\n-65AEBB Filename Length       0082 (130)\n-65AEBD Extra Length          0009 (9)\n-65AEBF Comment Length        0000 (0)\n-65AEC1 Disk Start            0000 (0)\n-65AEC3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65AEC5 Ext File Attributes   00000000 (0)\n-65AEC9 Local Header Offset   0012E9F4 (1239540)\n-65AECD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65AECD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65AF4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65AF51   Length              0005 (5)\n-65AF53   Flags               01 (1) 'Modification'\n-65AF54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65AF58 CENTRAL HEADER #458   02014B50 (33639248)\n-65AF5C Created Zip Spec      14 (20) '2.0'\n-65AF5D Created OS            00 (0) 'MS-DOS'\n-65AF5E Extract Zip Spec      14 (20) '2.0'\n-65AF5F Extract OS            00 (0) 'MS-DOS'\n-65AF60 General Purpose Flag  0000 (0)\n-65AF62 Compression Method    0000 (0) 'Stored'\n-65AF64 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65AF68 CRC                   00000000 (0)\n-65AF6C Compressed Size       00000000 (0)\n-65AF70 Uncompressed Size     00000000 (0)\n-65AF74 Filename Length       0033 (51)\n-65AF76 Extra Length          0009 (9)\n-65AF78 Comment Length        0000 (0)\n-65AF7A Disk Start            0000 (0)\n-65AF7C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65AF7E Ext File Attributes   00000000 (0)\n-65AF82 Local Header Offset   00133CDD (1260765)\n-65AF86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65AF86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65AFB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65AFBB   Length              0005 (5)\n-65AFBD   Flags               01 (1) 'Modification'\n-65AFBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65AFC2 CENTRAL HEADER #459   02014B50 (33639248)\n-65AFC6 Created Zip Spec      14 (20) '2.0'\n-65AFC7 Created OS            00 (0) 'MS-DOS'\n-65AFC8 Extract Zip Spec      14 (20) '2.0'\n-65AFC9 Extract OS            00 (0) 'MS-DOS'\n-65AFCA General Purpose Flag  0000 (0)\n-65AFCC Compression Method    0000 (0) 'Stored'\n-65AFCE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65AFD2 CRC                   00000000 (0)\n-65AFD6 Compressed Size       00000000 (0)\n-65AFDA Uncompressed Size     00000000 (0)\n-65AFDE Filename Length       003A (58)\n-65AFE0 Extra Length          0009 (9)\n-65AFE2 Comment Length        0000 (0)\n-65AFE4 Disk Start            0000 (0)\n-65AFE6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65AFE8 Ext File Attributes   00000000 (0)\n-65AFEC Local Header Offset   00133D37 (1260855)\n-65AFF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65AFF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B02A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B02C   Length              0005 (5)\n-65B02E   Flags               01 (1) 'Modification'\n-65B02F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B033 CENTRAL HEADER #460   02014B50 (33639248)\n-65B037 Created Zip Spec      14 (20) '2.0'\n-65B038 Created OS            00 (0) 'MS-DOS'\n-65B039 Extract Zip Spec      14 (20) '2.0'\n-65B03A Extract OS            00 (0) 'MS-DOS'\n-65B03B General Purpose Flag  0000 (0)\n-65B03D Compression Method    0000 (0) 'Stored'\n-65B03F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B043 CRC                   00000000 (0)\n-65B047 Compressed Size       00000000 (0)\n-65B04B Uncompressed Size     00000000 (0)\n-65B04F Filename Length       0070 (112)\n-65B051 Extra Length          0009 (9)\n-65B053 Comment Length        0000 (0)\n-65B055 Disk Start            0000 (0)\n-65B057 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B059 Ext File Attributes   00000000 (0)\n-65B05D Local Header Offset   00133D98 (1260952)\n-65B061 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B061: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B0D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B0D3   Length              0005 (5)\n-65B0D5   Flags               01 (1) 'Modification'\n-65B0D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B0DA CENTRAL HEADER #461   02014B50 (33639248)\n-65B0DE Created Zip Spec      14 (20) '2.0'\n-65B0DF Created OS            00 (0) 'MS-DOS'\n-65B0E0 Extract Zip Spec      14 (20) '2.0'\n-65B0E1 Extract OS            00 (0) 'MS-DOS'\n-65B0E2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65B0E4 Compression Method    0000 (0) 'Stored'\n-65B0E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B0EA CRC                   17E2323C (400699964)\n-65B0EE Compressed Size       00000904 (2308)\n-65B0F2 Uncompressed Size     00000904 (2308)\n-65B0F6 Filename Length       0086 (134)\n-65B0F8 Extra Length          0009 (9)\n-65B0FA Comment Length        0000 (0)\n-65B0FC Disk Start            0000 (0)\n-65B0FE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B100 Ext File Attributes   00000000 (0)\n-65B104 Local Header Offset   00133E2F (1261103)\n-65B108 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+65E945 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E947   Length              0005 (5)\n+65E949   Flags               01 (1) 'Modification'\n+65E94A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E94E CENTRAL HEADER #454   02014B50 (33639248)\n+65E952 Created Zip Spec      14 (20) '2.0'\n+65E953 Created OS            00 (0) 'MS-DOS'\n+65E954 Extract Zip Spec      14 (20) '2.0'\n+65E955 Extract OS            00 (0) 'MS-DOS'\n+65E956 General Purpose Flag  0000 (0)\n+65E958 Compression Method    0000 (0) 'Stored'\n+65E95A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E95E CRC                   00000000 (0)\n+65E962 Compressed Size       00000000 (0)\n+65E966 Uncompressed Size     00000000 (0)\n+65E96A Filename Length       002F (47)\n+65E96C Extra Length          0009 (9)\n+65E96E Comment Length        0000 (0)\n+65E970 Disk Start            0000 (0)\n+65E972 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E974 Ext File Attributes   00000000 (0)\n+65E978 Local Header Offset   00132276 (1254006)\n+65E97C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E97C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65E9AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65E9AD   Length              0005 (5)\n+65E9AF   Flags               01 (1) 'Modification'\n+65E9B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65E9B4 CENTRAL HEADER #455   02014B50 (33639248)\n+65E9B8 Created Zip Spec      14 (20) '2.0'\n+65E9B9 Created OS            00 (0) 'MS-DOS'\n+65E9BA Extract Zip Spec      14 (20) '2.0'\n+65E9BB Extract OS            00 (0) 'MS-DOS'\n+65E9BC General Purpose Flag  0000 (0)\n+65E9BE Compression Method    0000 (0) 'Stored'\n+65E9C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65E9C4 CRC                   00000000 (0)\n+65E9C8 Compressed Size       00000000 (0)\n+65E9CC Uncompressed Size     00000000 (0)\n+65E9D0 Filename Length       0036 (54)\n+65E9D2 Extra Length          0009 (9)\n+65E9D4 Comment Length        0000 (0)\n+65E9D6 Disk Start            0000 (0)\n+65E9D8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65E9DA Ext File Attributes   00000000 (0)\n+65E9DE Local Header Offset   001322CC (1254092)\n+65E9E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65E9E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65EA18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65EA1A   Length              0005 (5)\n+65EA1C   Flags               01 (1) 'Modification'\n+65EA1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65EA21 CENTRAL HEADER #456   02014B50 (33639248)\n+65EA25 Created Zip Spec      14 (20) '2.0'\n+65EA26 Created OS            00 (0) 'MS-DOS'\n+65EA27 Extract Zip Spec      14 (20) '2.0'\n+65EA28 Extract OS            00 (0) 'MS-DOS'\n+65EA29 General Purpose Flag  0000 (0)\n+65EA2B Compression Method    0000 (0) 'Stored'\n+65EA2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65EA31 CRC                   00000000 (0)\n+65EA35 Compressed Size       00000000 (0)\n+65EA39 Uncompressed Size     00000000 (0)\n+65EA3D Filename Length       006C (108)\n+65EA3F Extra Length          0009 (9)\n+65EA41 Comment Length        0000 (0)\n+65EA43 Disk Start            0000 (0)\n+65EA45 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65EA47 Ext File Attributes   00000000 (0)\n+65EA4B Local Header Offset   00132329 (1254185)\n+65EA4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65EA4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65EABB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65EABD   Length              0005 (5)\n+65EABF   Flags               01 (1) 'Modification'\n+65EAC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65EAC4 CENTRAL HEADER #457   02014B50 (33639248)\n+65EAC8 Created Zip Spec      14 (20) '2.0'\n+65EAC9 Created OS            00 (0) 'MS-DOS'\n+65EACA Extract Zip Spec      14 (20) '2.0'\n+65EACB Extract OS            00 (0) 'MS-DOS'\n+65EACC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65EACE Compression Method    0000 (0) 'Stored'\n+65EAD0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65EAD4 CRC                   CB05D09B (3406155931)\n+65EAD8 Compressed Size       00005230 (21040)\n+65EADC Uncompressed Size     00005230 (21040)\n+65EAE0 Filename Length       0082 (130)\n+65EAE2 Extra Length          0009 (9)\n+65EAE4 Comment Length        0000 (0)\n+65EAE6 Disk Start            0000 (0)\n+65EAE8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65EAEA Ext File Attributes   00000000 (0)\n+65EAEE Local Header Offset   001323BC (1254332)\n+65EAF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65EAF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65EB74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65EB76   Length              0005 (5)\n+65EB78   Flags               01 (1) 'Modification'\n+65EB79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65EB7D CENTRAL HEADER #458   02014B50 (33639248)\n+65EB81 Created Zip Spec      14 (20) '2.0'\n+65EB82 Created OS            00 (0) 'MS-DOS'\n+65EB83 Extract Zip Spec      14 (20) '2.0'\n+65EB84 Extract OS            00 (0) 'MS-DOS'\n+65EB85 General Purpose Flag  0000 (0)\n+65EB87 Compression Method    0000 (0) 'Stored'\n+65EB89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65EB8D CRC                   00000000 (0)\n+65EB91 Compressed Size       00000000 (0)\n+65EB95 Uncompressed Size     00000000 (0)\n+65EB99 Filename Length       0033 (51)\n+65EB9B Extra Length          0009 (9)\n+65EB9D Comment Length        0000 (0)\n+65EB9F Disk Start            0000 (0)\n+65EBA1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65EBA3 Ext File Attributes   00000000 (0)\n+65EBA7 Local Header Offset   001376A5 (1275557)\n+65EBAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65EBAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65EBDE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65EBE0   Length              0005 (5)\n+65EBE2   Flags               01 (1) 'Modification'\n+65EBE3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65EBE7 CENTRAL HEADER #459   02014B50 (33639248)\n+65EBEB Created Zip Spec      14 (20) '2.0'\n+65EBEC Created OS            00 (0) 'MS-DOS'\n+65EBED Extract Zip Spec      14 (20) '2.0'\n+65EBEE Extract OS            00 (0) 'MS-DOS'\n+65EBEF General Purpose Flag  0000 (0)\n+65EBF1 Compression Method    0000 (0) 'Stored'\n+65EBF3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65EBF7 CRC                   00000000 (0)\n+65EBFB Compressed Size       00000000 (0)\n+65EBFF Uncompressed Size     00000000 (0)\n+65EC03 Filename Length       003A (58)\n+65EC05 Extra Length          0009 (9)\n+65EC07 Comment Length        0000 (0)\n+65EC09 Disk Start            0000 (0)\n+65EC0B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65EC0D Ext File Attributes   00000000 (0)\n+65EC11 Local Header Offset   001376FF (1275647)\n+65EC15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65EC15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65EC4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65EC51   Length              0005 (5)\n+65EC53   Flags               01 (1) 'Modification'\n+65EC54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65EC58 CENTRAL HEADER #460   02014B50 (33639248)\n+65EC5C Created Zip Spec      14 (20) '2.0'\n+65EC5D Created OS            00 (0) 'MS-DOS'\n+65EC5E Extract Zip Spec      14 (20) '2.0'\n+65EC5F Extract OS            00 (0) 'MS-DOS'\n+65EC60 General Purpose Flag  0000 (0)\n+65EC62 Compression Method    0000 (0) 'Stored'\n+65EC64 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65EC68 CRC                   00000000 (0)\n+65EC6C Compressed Size       00000000 (0)\n+65EC70 Uncompressed Size     00000000 (0)\n+65EC74 Filename Length       0070 (112)\n+65EC76 Extra Length          0009 (9)\n+65EC78 Comment Length        0000 (0)\n+65EC7A Disk Start            0000 (0)\n+65EC7C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65EC7E Ext File Attributes   00000000 (0)\n+65EC82 Local Header Offset   00137760 (1275744)\n+65EC86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65EC86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65ECF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65ECF8   Length              0005 (5)\n+65ECFA   Flags               01 (1) 'Modification'\n+65ECFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65ECFF CENTRAL HEADER #461   02014B50 (33639248)\n+65ED03 Created Zip Spec      14 (20) '2.0'\n+65ED04 Created OS            00 (0) 'MS-DOS'\n+65ED05 Extract Zip Spec      14 (20) '2.0'\n+65ED06 Extract OS            00 (0) 'MS-DOS'\n+65ED07 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65ED09 Compression Method    0000 (0) 'Stored'\n+65ED0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65ED0F CRC                   17E2323C (400699964)\n+65ED13 Compressed Size       00000904 (2308)\n+65ED17 Uncompressed Size     00000904 (2308)\n+65ED1B Filename Length       0086 (134)\n+65ED1D Extra Length          0009 (9)\n+65ED1F Comment Length        0000 (0)\n+65ED21 Disk Start            0000 (0)\n+65ED23 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65ED25 Ext File Attributes   00000000 (0)\n+65ED29 Local Header Offset   001377F7 (1275895)\n+65ED2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x65B108: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x65ED2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-65B18E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B190   Length              0005 (5)\n-65B192   Flags               01 (1) 'Modification'\n-65B193   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B197 CENTRAL HEADER #462   02014B50 (33639248)\n-65B19B Created Zip Spec      14 (20) '2.0'\n-65B19C Created OS            00 (0) 'MS-DOS'\n-65B19D Extract Zip Spec      14 (20) '2.0'\n-65B19E Extract OS            00 (0) 'MS-DOS'\n-65B19F General Purpose Flag  0000 (0)\n-65B1A1 Compression Method    0000 (0) 'Stored'\n-65B1A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B1A7 CRC                   00000000 (0)\n-65B1AB Compressed Size       00000000 (0)\n-65B1AF Uncompressed Size     00000000 (0)\n-65B1B3 Filename Length       0030 (48)\n-65B1B5 Extra Length          0009 (9)\n-65B1B7 Comment Length        0000 (0)\n-65B1B9 Disk Start            0000 (0)\n-65B1BB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B1BD Ext File Attributes   00000000 (0)\n-65B1C1 Local Header Offset   001347F0 (1263600)\n-65B1C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B1C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B1F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B1F7   Length              0005 (5)\n-65B1F9   Flags               01 (1) 'Modification'\n-65B1FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B1FE CENTRAL HEADER #463   02014B50 (33639248)\n-65B202 Created Zip Spec      14 (20) '2.0'\n-65B203 Created OS            00 (0) 'MS-DOS'\n-65B204 Extract Zip Spec      14 (20) '2.0'\n-65B205 Extract OS            00 (0) 'MS-DOS'\n-65B206 General Purpose Flag  0000 (0)\n-65B208 Compression Method    0000 (0) 'Stored'\n-65B20A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B20E CRC                   00000000 (0)\n-65B212 Compressed Size       00000000 (0)\n-65B216 Uncompressed Size     00000000 (0)\n-65B21A Filename Length       0037 (55)\n-65B21C Extra Length          0009 (9)\n-65B21E Comment Length        0000 (0)\n-65B220 Disk Start            0000 (0)\n-65B222 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B224 Ext File Attributes   00000000 (0)\n-65B228 Local Header Offset   00134847 (1263687)\n-65B22C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B22C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B263 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B265   Length              0005 (5)\n-65B267   Flags               01 (1) 'Modification'\n-65B268   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B26C CENTRAL HEADER #464   02014B50 (33639248)\n-65B270 Created Zip Spec      14 (20) '2.0'\n-65B271 Created OS            00 (0) 'MS-DOS'\n-65B272 Extract Zip Spec      14 (20) '2.0'\n-65B273 Extract OS            00 (0) 'MS-DOS'\n-65B274 General Purpose Flag  0000 (0)\n-65B276 Compression Method    0000 (0) 'Stored'\n-65B278 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B27C CRC                   00000000 (0)\n-65B280 Compressed Size       00000000 (0)\n-65B284 Uncompressed Size     00000000 (0)\n-65B288 Filename Length       007B (123)\n-65B28A Extra Length          0009 (9)\n-65B28C Comment Length        0000 (0)\n-65B28E Disk Start            0000 (0)\n-65B290 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B292 Ext File Attributes   00000000 (0)\n-65B296 Local Header Offset   001348A5 (1263781)\n-65B29A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B29A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B315 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B317   Length              0005 (5)\n-65B319   Flags               01 (1) 'Modification'\n-65B31A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B31E CENTRAL HEADER #465   02014B50 (33639248)\n-65B322 Created Zip Spec      14 (20) '2.0'\n-65B323 Created OS            00 (0) 'MS-DOS'\n-65B324 Extract Zip Spec      14 (20) '2.0'\n-65B325 Extract OS            00 (0) 'MS-DOS'\n-65B326 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65B328 Compression Method    0000 (0) 'Stored'\n-65B32A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B32E CRC                   CC28EBBC (3425233852)\n-65B332 Compressed Size       00001036 (4150)\n-65B336 Uncompressed Size     00001036 (4150)\n-65B33A Filename Length       0091 (145)\n-65B33C Extra Length          0009 (9)\n-65B33E Comment Length        0000 (0)\n-65B340 Disk Start            0000 (0)\n-65B342 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B344 Ext File Attributes   00000000 (0)\n-65B348 Local Header Offset   00134947 (1263943)\n-65B34C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+65EDB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65EDB5   Length              0005 (5)\n+65EDB7   Flags               01 (1) 'Modification'\n+65EDB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65EDBC CENTRAL HEADER #462   02014B50 (33639248)\n+65EDC0 Created Zip Spec      14 (20) '2.0'\n+65EDC1 Created OS            00 (0) 'MS-DOS'\n+65EDC2 Extract Zip Spec      14 (20) '2.0'\n+65EDC3 Extract OS            00 (0) 'MS-DOS'\n+65EDC4 General Purpose Flag  0000 (0)\n+65EDC6 Compression Method    0000 (0) 'Stored'\n+65EDC8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65EDCC CRC                   00000000 (0)\n+65EDD0 Compressed Size       00000000 (0)\n+65EDD4 Uncompressed Size     00000000 (0)\n+65EDD8 Filename Length       0030 (48)\n+65EDDA Extra Length          0009 (9)\n+65EDDC Comment Length        0000 (0)\n+65EDDE Disk Start            0000 (0)\n+65EDE0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65EDE2 Ext File Attributes   00000000 (0)\n+65EDE6 Local Header Offset   001381B8 (1278392)\n+65EDEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65EDEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65EE1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65EE1C   Length              0005 (5)\n+65EE1E   Flags               01 (1) 'Modification'\n+65EE1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65EE23 CENTRAL HEADER #463   02014B50 (33639248)\n+65EE27 Created Zip Spec      14 (20) '2.0'\n+65EE28 Created OS            00 (0) 'MS-DOS'\n+65EE29 Extract Zip Spec      14 (20) '2.0'\n+65EE2A Extract OS            00 (0) 'MS-DOS'\n+65EE2B General Purpose Flag  0000 (0)\n+65EE2D Compression Method    0000 (0) 'Stored'\n+65EE2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65EE33 CRC                   00000000 (0)\n+65EE37 Compressed Size       00000000 (0)\n+65EE3B Uncompressed Size     00000000 (0)\n+65EE3F Filename Length       0037 (55)\n+65EE41 Extra Length          0009 (9)\n+65EE43 Comment Length        0000 (0)\n+65EE45 Disk Start            0000 (0)\n+65EE47 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65EE49 Ext File Attributes   00000000 (0)\n+65EE4D Local Header Offset   0013820F (1278479)\n+65EE51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65EE51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65EE88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65EE8A   Length              0005 (5)\n+65EE8C   Flags               01 (1) 'Modification'\n+65EE8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65EE91 CENTRAL HEADER #464   02014B50 (33639248)\n+65EE95 Created Zip Spec      14 (20) '2.0'\n+65EE96 Created OS            00 (0) 'MS-DOS'\n+65EE97 Extract Zip Spec      14 (20) '2.0'\n+65EE98 Extract OS            00 (0) 'MS-DOS'\n+65EE99 General Purpose Flag  0000 (0)\n+65EE9B Compression Method    0000 (0) 'Stored'\n+65EE9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65EEA1 CRC                   00000000 (0)\n+65EEA5 Compressed Size       00000000 (0)\n+65EEA9 Uncompressed Size     00000000 (0)\n+65EEAD Filename Length       007B (123)\n+65EEAF Extra Length          0009 (9)\n+65EEB1 Comment Length        0000 (0)\n+65EEB3 Disk Start            0000 (0)\n+65EEB5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65EEB7 Ext File Attributes   00000000 (0)\n+65EEBB Local Header Offset   0013826D (1278573)\n+65EEBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65EEBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65EF3A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65EF3C   Length              0005 (5)\n+65EF3E   Flags               01 (1) 'Modification'\n+65EF3F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65EF43 CENTRAL HEADER #465   02014B50 (33639248)\n+65EF47 Created Zip Spec      14 (20) '2.0'\n+65EF48 Created OS            00 (0) 'MS-DOS'\n+65EF49 Extract Zip Spec      14 (20) '2.0'\n+65EF4A Extract OS            00 (0) 'MS-DOS'\n+65EF4B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65EF4D Compression Method    0000 (0) 'Stored'\n+65EF4F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65EF53 CRC                   CC28EBBC (3425233852)\n+65EF57 Compressed Size       00001036 (4150)\n+65EF5B Uncompressed Size     00001036 (4150)\n+65EF5F Filename Length       0091 (145)\n+65EF61 Extra Length          0009 (9)\n+65EF63 Comment Length        0000 (0)\n+65EF65 Disk Start            0000 (0)\n+65EF67 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65EF69 Ext File Attributes   00000000 (0)\n+65EF6D Local Header Offset   0013830F (1278735)\n+65EF71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x65B34C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x65EF71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-65B3DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B3DF   Length              0005 (5)\n-65B3E1   Flags               01 (1) 'Modification'\n-65B3E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B3E6 CENTRAL HEADER #466   02014B50 (33639248)\n-65B3EA Created Zip Spec      14 (20) '2.0'\n-65B3EB Created OS            00 (0) 'MS-DOS'\n-65B3EC Extract Zip Spec      14 (20) '2.0'\n-65B3ED Extract OS            00 (0) 'MS-DOS'\n-65B3EE General Purpose Flag  0000 (0)\n-65B3F0 Compression Method    0000 (0) 'Stored'\n-65B3F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B3F6 CRC                   00000000 (0)\n-65B3FA Compressed Size       00000000 (0)\n-65B3FE Uncompressed Size     00000000 (0)\n-65B402 Filename Length       0031 (49)\n-65B404 Extra Length          0009 (9)\n-65B406 Comment Length        0000 (0)\n-65B408 Disk Start            0000 (0)\n-65B40A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B40C Ext File Attributes   00000000 (0)\n-65B410 Local Header Offset   00135A45 (1268293)\n-65B414 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B414: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B445 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B447   Length              0005 (5)\n-65B449   Flags               01 (1) 'Modification'\n-65B44A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B44E CENTRAL HEADER #467   02014B50 (33639248)\n-65B452 Created Zip Spec      14 (20) '2.0'\n-65B453 Created OS            00 (0) 'MS-DOS'\n-65B454 Extract Zip Spec      14 (20) '2.0'\n-65B455 Extract OS            00 (0) 'MS-DOS'\n-65B456 General Purpose Flag  0000 (0)\n-65B458 Compression Method    0000 (0) 'Stored'\n-65B45A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B45E CRC                   00000000 (0)\n-65B462 Compressed Size       00000000 (0)\n-65B466 Uncompressed Size     00000000 (0)\n-65B46A Filename Length       0038 (56)\n-65B46C Extra Length          0009 (9)\n-65B46E Comment Length        0000 (0)\n-65B470 Disk Start            0000 (0)\n-65B472 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B474 Ext File Attributes   00000000 (0)\n-65B478 Local Header Offset   00135A9D (1268381)\n-65B47C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B47C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B4B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B4B6   Length              0005 (5)\n-65B4B8   Flags               01 (1) 'Modification'\n-65B4B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B4BD CENTRAL HEADER #468   02014B50 (33639248)\n-65B4C1 Created Zip Spec      14 (20) '2.0'\n-65B4C2 Created OS            00 (0) 'MS-DOS'\n-65B4C3 Extract Zip Spec      14 (20) '2.0'\n-65B4C4 Extract OS            00 (0) 'MS-DOS'\n-65B4C5 General Purpose Flag  0000 (0)\n-65B4C7 Compression Method    0000 (0) 'Stored'\n-65B4C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B4CD CRC                   00000000 (0)\n-65B4D1 Compressed Size       00000000 (0)\n-65B4D5 Uncompressed Size     00000000 (0)\n-65B4D9 Filename Length       006C (108)\n-65B4DB Extra Length          0009 (9)\n-65B4DD Comment Length        0000 (0)\n-65B4DF Disk Start            0000 (0)\n-65B4E1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B4E3 Ext File Attributes   00000000 (0)\n-65B4E7 Local Header Offset   00135AFC (1268476)\n-65B4EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B4EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B557 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B559   Length              0005 (5)\n-65B55B   Flags               01 (1) 'Modification'\n-65B55C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B560 CENTRAL HEADER #469   02014B50 (33639248)\n-65B564 Created Zip Spec      14 (20) '2.0'\n-65B565 Created OS            00 (0) 'MS-DOS'\n-65B566 Extract Zip Spec      14 (20) '2.0'\n-65B567 Extract OS            00 (0) 'MS-DOS'\n-65B568 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65B56A Compression Method    0000 (0) 'Stored'\n-65B56C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B570 CRC                   3FC95820 (1070159904)\n-65B574 Compressed Size       00000AD4 (2772)\n-65B578 Uncompressed Size     00000AD4 (2772)\n-65B57C Filename Length       0082 (130)\n-65B57E Extra Length          0009 (9)\n-65B580 Comment Length        0000 (0)\n-65B582 Disk Start            0000 (0)\n-65B584 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B586 Ext File Attributes   00000000 (0)\n-65B58A Local Header Offset   00135B8F (1268623)\n-65B58E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B58E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B610 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B612   Length              0005 (5)\n-65B614   Flags               01 (1) 'Modification'\n-65B615   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B619 CENTRAL HEADER #470   02014B50 (33639248)\n-65B61D Created Zip Spec      14 (20) '2.0'\n-65B61E Created OS            00 (0) 'MS-DOS'\n-65B61F Extract Zip Spec      14 (20) '2.0'\n-65B620 Extract OS            00 (0) 'MS-DOS'\n-65B621 General Purpose Flag  0000 (0)\n-65B623 Compression Method    0000 (0) 'Stored'\n-65B625 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B629 CRC                   00000000 (0)\n-65B62D Compressed Size       00000000 (0)\n-65B631 Uncompressed Size     00000000 (0)\n-65B635 Filename Length       0026 (38)\n-65B637 Extra Length          0009 (9)\n-65B639 Comment Length        0000 (0)\n-65B63B Disk Start            0000 (0)\n-65B63D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B63F Ext File Attributes   00000000 (0)\n-65B643 Local Header Offset   0013671C (1271580)\n-65B647 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B647: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B66D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B66F   Length              0005 (5)\n-65B671   Flags               01 (1) 'Modification'\n-65B672   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B676 CENTRAL HEADER #471   02014B50 (33639248)\n-65B67A Created Zip Spec      14 (20) '2.0'\n-65B67B Created OS            00 (0) 'MS-DOS'\n-65B67C Extract Zip Spec      14 (20) '2.0'\n-65B67D Extract OS            00 (0) 'MS-DOS'\n-65B67E General Purpose Flag  0000 (0)\n-65B680 Compression Method    0000 (0) 'Stored'\n-65B682 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B686 CRC                   00000000 (0)\n-65B68A Compressed Size       00000000 (0)\n-65B68E Uncompressed Size     00000000 (0)\n-65B692 Filename Length       002D (45)\n-65B694 Extra Length          0009 (9)\n-65B696 Comment Length        0000 (0)\n-65B698 Disk Start            0000 (0)\n-65B69A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B69C Ext File Attributes   00000000 (0)\n-65B6A0 Local Header Offset   00136769 (1271657)\n-65B6A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B6A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B6D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B6D3   Length              0005 (5)\n-65B6D5   Flags               01 (1) 'Modification'\n-65B6D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B6DA CENTRAL HEADER #472   02014B50 (33639248)\n-65B6DE Created Zip Spec      14 (20) '2.0'\n-65B6DF Created OS            00 (0) 'MS-DOS'\n-65B6E0 Extract Zip Spec      14 (20) '2.0'\n-65B6E1 Extract OS            00 (0) 'MS-DOS'\n-65B6E2 General Purpose Flag  0000 (0)\n-65B6E4 Compression Method    0000 (0) 'Stored'\n-65B6E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B6EA CRC                   00000000 (0)\n-65B6EE Compressed Size       00000000 (0)\n-65B6F2 Uncompressed Size     00000000 (0)\n-65B6F6 Filename Length       005B (91)\n-65B6F8 Extra Length          0009 (9)\n-65B6FA Comment Length        0000 (0)\n-65B6FC Disk Start            0000 (0)\n-65B6FE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B700 Ext File Attributes   00000000 (0)\n-65B704 Local Header Offset   001367BD (1271741)\n-65B708 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B708: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B763 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B765   Length              0005 (5)\n-65B767   Flags               01 (1) 'Modification'\n-65B768   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B76C CENTRAL HEADER #473   02014B50 (33639248)\n-65B770 Created Zip Spec      14 (20) '2.0'\n-65B771 Created OS            00 (0) 'MS-DOS'\n-65B772 Extract Zip Spec      14 (20) '2.0'\n-65B773 Extract OS            00 (0) 'MS-DOS'\n-65B774 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65B776 Compression Method    0000 (0) 'Stored'\n-65B778 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B77C CRC                   41CBDE11 (1103879697)\n-65B780 Compressed Size       00000D2F (3375)\n-65B784 Uncompressed Size     00000D2F (3375)\n-65B788 Filename Length       0071 (113)\n-65B78A Extra Length          0009 (9)\n-65B78C Comment Length        0000 (0)\n-65B78E Disk Start            0000 (0)\n-65B790 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B792 Ext File Attributes   00000000 (0)\n-65B796 Local Header Offset   0013683F (1271871)\n-65B79A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B79A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B80B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B80D   Length              0005 (5)\n-65B80F   Flags               01 (1) 'Modification'\n-65B810   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B814 CENTRAL HEADER #474   02014B50 (33639248)\n-65B818 Created Zip Spec      14 (20) '2.0'\n-65B819 Created OS            00 (0) 'MS-DOS'\n-65B81A Extract Zip Spec      14 (20) '2.0'\n-65B81B Extract OS            00 (0) 'MS-DOS'\n-65B81C General Purpose Flag  0000 (0)\n-65B81E Compression Method    0000 (0) 'Stored'\n-65B820 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B824 CRC                   00000000 (0)\n-65B828 Compressed Size       00000000 (0)\n-65B82C Uncompressed Size     00000000 (0)\n-65B830 Filename Length       0061 (97)\n-65B832 Extra Length          0009 (9)\n-65B834 Comment Length        0000 (0)\n-65B836 Disk Start            0000 (0)\n-65B838 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B83A Ext File Attributes   00000000 (0)\n-65B83E Local Header Offset   00137616 (1275414)\n-65B842 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B842: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B8A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B8A5   Length              0005 (5)\n-65B8A7   Flags               01 (1) 'Modification'\n-65B8A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B8AC CENTRAL HEADER #475   02014B50 (33639248)\n-65B8B0 Created Zip Spec      14 (20) '2.0'\n-65B8B1 Created OS            00 (0) 'MS-DOS'\n-65B8B2 Extract Zip Spec      14 (20) '2.0'\n-65B8B3 Extract OS            00 (0) 'MS-DOS'\n-65B8B4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65B8B6 Compression Method    0000 (0) 'Stored'\n-65B8B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B8BC CRC                   1D768ED5 (494309077)\n-65B8C0 Compressed Size       00001C79 (7289)\n-65B8C4 Uncompressed Size     00001C79 (7289)\n-65B8C8 Filename Length       0077 (119)\n-65B8CA Extra Length          0009 (9)\n-65B8CC Comment Length        0000 (0)\n-65B8CE Disk Start            0000 (0)\n-65B8D0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B8D2 Ext File Attributes   00000000 (0)\n-65B8D6 Local Header Offset   0013769E (1275550)\n-65B8DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B8DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B951 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B953   Length              0005 (5)\n-65B955   Flags               01 (1) 'Modification'\n-65B956   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B95A CENTRAL HEADER #476   02014B50 (33639248)\n-65B95E Created Zip Spec      14 (20) '2.0'\n-65B95F Created OS            00 (0) 'MS-DOS'\n-65B960 Extract Zip Spec      14 (20) '2.0'\n-65B961 Extract OS            00 (0) 'MS-DOS'\n-65B962 General Purpose Flag  0000 (0)\n-65B964 Compression Method    0000 (0) 'Stored'\n-65B966 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B96A CRC                   00000000 (0)\n-65B96E Compressed Size       00000000 (0)\n-65B972 Uncompressed Size     00000000 (0)\n-65B976 Filename Length       002F (47)\n-65B978 Extra Length          0009 (9)\n-65B97A Comment Length        0000 (0)\n-65B97C Disk Start            0000 (0)\n-65B97E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B980 Ext File Attributes   00000000 (0)\n-65B984 Local Header Offset   001393C5 (1283013)\n-65B988 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B988: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65B9B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65B9B9   Length              0005 (5)\n-65B9BB   Flags               01 (1) 'Modification'\n-65B9BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65B9C0 CENTRAL HEADER #477   02014B50 (33639248)\n-65B9C4 Created Zip Spec      14 (20) '2.0'\n-65B9C5 Created OS            00 (0) 'MS-DOS'\n-65B9C6 Extract Zip Spec      14 (20) '2.0'\n-65B9C7 Extract OS            00 (0) 'MS-DOS'\n-65B9C8 General Purpose Flag  0000 (0)\n-65B9CA Compression Method    0000 (0) 'Stored'\n-65B9CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65B9D0 CRC                   00000000 (0)\n-65B9D4 Compressed Size       00000000 (0)\n-65B9D8 Uncompressed Size     00000000 (0)\n-65B9DC Filename Length       0036 (54)\n-65B9DE Extra Length          0009 (9)\n-65B9E0 Comment Length        0000 (0)\n-65B9E2 Disk Start            0000 (0)\n-65B9E4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65B9E6 Ext File Attributes   00000000 (0)\n-65B9EA Local Header Offset   0013941B (1283099)\n-65B9EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65B9EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65BA24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65BA26   Length              0005 (5)\n-65BA28   Flags               01 (1) 'Modification'\n-65BA29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65BA2D CENTRAL HEADER #478   02014B50 (33639248)\n-65BA31 Created Zip Spec      14 (20) '2.0'\n-65BA32 Created OS            00 (0) 'MS-DOS'\n-65BA33 Extract Zip Spec      14 (20) '2.0'\n-65BA34 Extract OS            00 (0) 'MS-DOS'\n-65BA35 General Purpose Flag  0000 (0)\n-65BA37 Compression Method    0000 (0) 'Stored'\n-65BA39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65BA3D CRC                   00000000 (0)\n-65BA41 Compressed Size       00000000 (0)\n-65BA45 Uncompressed Size     00000000 (0)\n-65BA49 Filename Length       0069 (105)\n-65BA4B Extra Length          0009 (9)\n-65BA4D Comment Length        0000 (0)\n-65BA4F Disk Start            0000 (0)\n-65BA51 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65BA53 Ext File Attributes   00000000 (0)\n-65BA57 Local Header Offset   00139478 (1283192)\n-65BA5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65BA5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65BAC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65BAC6   Length              0005 (5)\n-65BAC8   Flags               01 (1) 'Modification'\n-65BAC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65BACD CENTRAL HEADER #479   02014B50 (33639248)\n-65BAD1 Created Zip Spec      14 (20) '2.0'\n-65BAD2 Created OS            00 (0) 'MS-DOS'\n-65BAD3 Extract Zip Spec      14 (20) '2.0'\n-65BAD4 Extract OS            00 (0) 'MS-DOS'\n-65BAD5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65BAD7 Compression Method    0000 (0) 'Stored'\n-65BAD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65BADD CRC                   7A85C658 (2055587416)\n-65BAE1 Compressed Size       00001D19 (7449)\n-65BAE5 Uncompressed Size     00001D19 (7449)\n-65BAE9 Filename Length       007F (127)\n-65BAEB Extra Length          0009 (9)\n-65BAED Comment Length        0000 (0)\n-65BAEF Disk Start            0000 (0)\n-65BAF1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65BAF3 Ext File Attributes   00000000 (0)\n-65BAF7 Local Header Offset   00139508 (1283336)\n-65BAFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65BAFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65BB7A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65BB7C   Length              0005 (5)\n-65BB7E   Flags               01 (1) 'Modification'\n-65BB7F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65BB83 CENTRAL HEADER #480   02014B50 (33639248)\n-65BB87 Created Zip Spec      14 (20) '2.0'\n-65BB88 Created OS            00 (0) 'MS-DOS'\n-65BB89 Extract Zip Spec      14 (20) '2.0'\n-65BB8A Extract OS            00 (0) 'MS-DOS'\n-65BB8B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-65BB8D Compression Method    0000 (0) 'Stored'\n-65BB8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-65BB93 CRC                   879A3E43 (2275032643)\n-65BB97 Compressed Size       0050F0E7 (5304551)\n-65BB9B Uncompressed Size     0050F0E7 (5304551)\n-65BB9F Filename Length       001A (26)\n-65BBA1 Extra Length          0009 (9)\n-65BBA3 Comment Length        0000 (0)\n-65BBA5 Disk Start            0000 (0)\n-65BBA7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-65BBA9 Ext File Attributes   00000000 (0)\n-65BBAD Local Header Offset   0013B2D7 (1290967)\n-65BBB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65BBB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-65BBCB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-65BBCD   Length              0005 (5)\n-65BBCF   Flags               01 (1) 'Modification'\n-65BBD0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-65BBD4 END CENTRAL HEADER    06054B50 (101010256)\n-65BBD8 Number of this disk   0000 (0)\n-65BBDA Central Dir Disk no   0000 (0)\n-65BBDC Entries in this disk  01E0 (480)\n-65BBDE Total Entries         01E0 (480)\n-65BBE0 Size of Central Dir   000117C5 (71621)\n-65BBE4 Offset to Central Dir 0064A40F (6595599)\n-65BBE8 Comment Length        0000 (0)\n+65F002 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F004   Length              0005 (5)\n+65F006   Flags               01 (1) 'Modification'\n+65F007   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F00B CENTRAL HEADER #466   02014B50 (33639248)\n+65F00F Created Zip Spec      14 (20) '2.0'\n+65F010 Created OS            00 (0) 'MS-DOS'\n+65F011 Extract Zip Spec      14 (20) '2.0'\n+65F012 Extract OS            00 (0) 'MS-DOS'\n+65F013 General Purpose Flag  0000 (0)\n+65F015 Compression Method    0000 (0) 'Stored'\n+65F017 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65F01B CRC                   00000000 (0)\n+65F01F Compressed Size       00000000 (0)\n+65F023 Uncompressed Size     00000000 (0)\n+65F027 Filename Length       0031 (49)\n+65F029 Extra Length          0009 (9)\n+65F02B Comment Length        0000 (0)\n+65F02D Disk Start            0000 (0)\n+65F02F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65F031 Ext File Attributes   00000000 (0)\n+65F035 Local Header Offset   0013940D (1283085)\n+65F039 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65F039: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65F06A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F06C   Length              0005 (5)\n+65F06E   Flags               01 (1) 'Modification'\n+65F06F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F073 CENTRAL HEADER #467   02014B50 (33639248)\n+65F077 Created Zip Spec      14 (20) '2.0'\n+65F078 Created OS            00 (0) 'MS-DOS'\n+65F079 Extract Zip Spec      14 (20) '2.0'\n+65F07A Extract OS            00 (0) 'MS-DOS'\n+65F07B General Purpose Flag  0000 (0)\n+65F07D Compression Method    0000 (0) 'Stored'\n+65F07F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65F083 CRC                   00000000 (0)\n+65F087 Compressed Size       00000000 (0)\n+65F08B Uncompressed Size     00000000 (0)\n+65F08F Filename Length       0038 (56)\n+65F091 Extra Length          0009 (9)\n+65F093 Comment Length        0000 (0)\n+65F095 Disk Start            0000 (0)\n+65F097 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65F099 Ext File Attributes   00000000 (0)\n+65F09D Local Header Offset   00139465 (1283173)\n+65F0A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65F0A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65F0D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F0DB   Length              0005 (5)\n+65F0DD   Flags               01 (1) 'Modification'\n+65F0DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F0E2 CENTRAL HEADER #468   02014B50 (33639248)\n+65F0E6 Created Zip Spec      14 (20) '2.0'\n+65F0E7 Created OS            00 (0) 'MS-DOS'\n+65F0E8 Extract Zip Spec      14 (20) '2.0'\n+65F0E9 Extract OS            00 (0) 'MS-DOS'\n+65F0EA General Purpose Flag  0000 (0)\n+65F0EC Compression Method    0000 (0) 'Stored'\n+65F0EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65F0F2 CRC                   00000000 (0)\n+65F0F6 Compressed Size       00000000 (0)\n+65F0FA Uncompressed Size     00000000 (0)\n+65F0FE Filename Length       006C (108)\n+65F100 Extra Length          0009 (9)\n+65F102 Comment Length        0000 (0)\n+65F104 Disk Start            0000 (0)\n+65F106 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65F108 Ext File Attributes   00000000 (0)\n+65F10C Local Header Offset   001394C4 (1283268)\n+65F110 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65F110: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65F17C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F17E   Length              0005 (5)\n+65F180   Flags               01 (1) 'Modification'\n+65F181   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F185 CENTRAL HEADER #469   02014B50 (33639248)\n+65F189 Created Zip Spec      14 (20) '2.0'\n+65F18A Created OS            00 (0) 'MS-DOS'\n+65F18B Extract Zip Spec      14 (20) '2.0'\n+65F18C Extract OS            00 (0) 'MS-DOS'\n+65F18D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65F18F Compression Method    0000 (0) 'Stored'\n+65F191 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65F195 CRC                   3FC95820 (1070159904)\n+65F199 Compressed Size       00000AD4 (2772)\n+65F19D Uncompressed Size     00000AD4 (2772)\n+65F1A1 Filename Length       0082 (130)\n+65F1A3 Extra Length          0009 (9)\n+65F1A5 Comment Length        0000 (0)\n+65F1A7 Disk Start            0000 (0)\n+65F1A9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65F1AB Ext File Attributes   00000000 (0)\n+65F1AF Local Header Offset   00139557 (1283415)\n+65F1B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65F1B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65F235 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F237   Length              0005 (5)\n+65F239   Flags               01 (1) 'Modification'\n+65F23A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F23E CENTRAL HEADER #470   02014B50 (33639248)\n+65F242 Created Zip Spec      14 (20) '2.0'\n+65F243 Created OS            00 (0) 'MS-DOS'\n+65F244 Extract Zip Spec      14 (20) '2.0'\n+65F245 Extract OS            00 (0) 'MS-DOS'\n+65F246 General Purpose Flag  0000 (0)\n+65F248 Compression Method    0000 (0) 'Stored'\n+65F24A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65F24E CRC                   00000000 (0)\n+65F252 Compressed Size       00000000 (0)\n+65F256 Uncompressed Size     00000000 (0)\n+65F25A Filename Length       0026 (38)\n+65F25C Extra Length          0009 (9)\n+65F25E Comment Length        0000 (0)\n+65F260 Disk Start            0000 (0)\n+65F262 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65F264 Ext File Attributes   00000000 (0)\n+65F268 Local Header Offset   0013A0E4 (1286372)\n+65F26C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65F26C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65F292 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F294   Length              0005 (5)\n+65F296   Flags               01 (1) 'Modification'\n+65F297   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F29B CENTRAL HEADER #471   02014B50 (33639248)\n+65F29F Created Zip Spec      14 (20) '2.0'\n+65F2A0 Created OS            00 (0) 'MS-DOS'\n+65F2A1 Extract Zip Spec      14 (20) '2.0'\n+65F2A2 Extract OS            00 (0) 'MS-DOS'\n+65F2A3 General Purpose Flag  0000 (0)\n+65F2A5 Compression Method    0000 (0) 'Stored'\n+65F2A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65F2AB CRC                   00000000 (0)\n+65F2AF Compressed Size       00000000 (0)\n+65F2B3 Uncompressed Size     00000000 (0)\n+65F2B7 Filename Length       002D (45)\n+65F2B9 Extra Length          0009 (9)\n+65F2BB Comment Length        0000 (0)\n+65F2BD Disk Start            0000 (0)\n+65F2BF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65F2C1 Ext File Attributes   00000000 (0)\n+65F2C5 Local Header Offset   0013A131 (1286449)\n+65F2C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65F2C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65F2F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F2F8   Length              0005 (5)\n+65F2FA   Flags               01 (1) 'Modification'\n+65F2FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F2FF CENTRAL HEADER #472   02014B50 (33639248)\n+65F303 Created Zip Spec      14 (20) '2.0'\n+65F304 Created OS            00 (0) 'MS-DOS'\n+65F305 Extract Zip Spec      14 (20) '2.0'\n+65F306 Extract OS            00 (0) 'MS-DOS'\n+65F307 General Purpose Flag  0000 (0)\n+65F309 Compression Method    0000 (0) 'Stored'\n+65F30B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65F30F CRC                   00000000 (0)\n+65F313 Compressed Size       00000000 (0)\n+65F317 Uncompressed Size     00000000 (0)\n+65F31B Filename Length       005B (91)\n+65F31D Extra Length          0009 (9)\n+65F31F Comment Length        0000 (0)\n+65F321 Disk Start            0000 (0)\n+65F323 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65F325 Ext File Attributes   00000000 (0)\n+65F329 Local Header Offset   0013A185 (1286533)\n+65F32D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65F32D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65F388 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F38A   Length              0005 (5)\n+65F38C   Flags               01 (1) 'Modification'\n+65F38D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F391 CENTRAL HEADER #473   02014B50 (33639248)\n+65F395 Created Zip Spec      14 (20) '2.0'\n+65F396 Created OS            00 (0) 'MS-DOS'\n+65F397 Extract Zip Spec      14 (20) '2.0'\n+65F398 Extract OS            00 (0) 'MS-DOS'\n+65F399 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65F39B Compression Method    0000 (0) 'Stored'\n+65F39D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65F3A1 CRC                   41CBDE11 (1103879697)\n+65F3A5 Compressed Size       00000D2F (3375)\n+65F3A9 Uncompressed Size     00000D2F (3375)\n+65F3AD Filename Length       0071 (113)\n+65F3AF Extra Length          0009 (9)\n+65F3B1 Comment Length        0000 (0)\n+65F3B3 Disk Start            0000 (0)\n+65F3B5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65F3B7 Ext File Attributes   00000000 (0)\n+65F3BB Local Header Offset   0013A207 (1286663)\n+65F3BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65F3BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65F430 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F432   Length              0005 (5)\n+65F434   Flags               01 (1) 'Modification'\n+65F435   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F439 CENTRAL HEADER #474   02014B50 (33639248)\n+65F43D Created Zip Spec      14 (20) '2.0'\n+65F43E Created OS            00 (0) 'MS-DOS'\n+65F43F Extract Zip Spec      14 (20) '2.0'\n+65F440 Extract OS            00 (0) 'MS-DOS'\n+65F441 General Purpose Flag  0000 (0)\n+65F443 Compression Method    0000 (0) 'Stored'\n+65F445 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65F449 CRC                   00000000 (0)\n+65F44D Compressed Size       00000000 (0)\n+65F451 Uncompressed Size     00000000 (0)\n+65F455 Filename Length       0061 (97)\n+65F457 Extra Length          0009 (9)\n+65F459 Comment Length        0000 (0)\n+65F45B Disk Start            0000 (0)\n+65F45D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65F45F Ext File Attributes   00000000 (0)\n+65F463 Local Header Offset   0013AFDE (1290206)\n+65F467 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65F467: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65F4C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F4CA   Length              0005 (5)\n+65F4CC   Flags               01 (1) 'Modification'\n+65F4CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F4D1 CENTRAL HEADER #475   02014B50 (33639248)\n+65F4D5 Created Zip Spec      14 (20) '2.0'\n+65F4D6 Created OS            00 (0) 'MS-DOS'\n+65F4D7 Extract Zip Spec      14 (20) '2.0'\n+65F4D8 Extract OS            00 (0) 'MS-DOS'\n+65F4D9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65F4DB Compression Method    0000 (0) 'Stored'\n+65F4DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65F4E1 CRC                   1D768ED5 (494309077)\n+65F4E5 Compressed Size       00001C79 (7289)\n+65F4E9 Uncompressed Size     00001C79 (7289)\n+65F4ED Filename Length       0077 (119)\n+65F4EF Extra Length          0009 (9)\n+65F4F1 Comment Length        0000 (0)\n+65F4F3 Disk Start            0000 (0)\n+65F4F5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65F4F7 Ext File Attributes   00000000 (0)\n+65F4FB Local Header Offset   0013B066 (1290342)\n+65F4FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65F4FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65F576 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F578   Length              0005 (5)\n+65F57A   Flags               01 (1) 'Modification'\n+65F57B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F57F CENTRAL HEADER #476   02014B50 (33639248)\n+65F583 Created Zip Spec      14 (20) '2.0'\n+65F584 Created OS            00 (0) 'MS-DOS'\n+65F585 Extract Zip Spec      14 (20) '2.0'\n+65F586 Extract OS            00 (0) 'MS-DOS'\n+65F587 General Purpose Flag  0000 (0)\n+65F589 Compression Method    0000 (0) 'Stored'\n+65F58B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65F58F CRC                   00000000 (0)\n+65F593 Compressed Size       00000000 (0)\n+65F597 Uncompressed Size     00000000 (0)\n+65F59B Filename Length       002F (47)\n+65F59D Extra Length          0009 (9)\n+65F59F Comment Length        0000 (0)\n+65F5A1 Disk Start            0000 (0)\n+65F5A3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65F5A5 Ext File Attributes   00000000 (0)\n+65F5A9 Local Header Offset   0013CD8D (1297805)\n+65F5AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65F5AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65F5DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F5DE   Length              0005 (5)\n+65F5E0   Flags               01 (1) 'Modification'\n+65F5E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F5E5 CENTRAL HEADER #477   02014B50 (33639248)\n+65F5E9 Created Zip Spec      14 (20) '2.0'\n+65F5EA Created OS            00 (0) 'MS-DOS'\n+65F5EB Extract Zip Spec      14 (20) '2.0'\n+65F5EC Extract OS            00 (0) 'MS-DOS'\n+65F5ED General Purpose Flag  0000 (0)\n+65F5EF Compression Method    0000 (0) 'Stored'\n+65F5F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65F5F5 CRC                   00000000 (0)\n+65F5F9 Compressed Size       00000000 (0)\n+65F5FD Uncompressed Size     00000000 (0)\n+65F601 Filename Length       0036 (54)\n+65F603 Extra Length          0009 (9)\n+65F605 Comment Length        0000 (0)\n+65F607 Disk Start            0000 (0)\n+65F609 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65F60B Ext File Attributes   00000000 (0)\n+65F60F Local Header Offset   0013CDE3 (1297891)\n+65F613 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65F613: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65F649 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F64B   Length              0005 (5)\n+65F64D   Flags               01 (1) 'Modification'\n+65F64E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F652 CENTRAL HEADER #478   02014B50 (33639248)\n+65F656 Created Zip Spec      14 (20) '2.0'\n+65F657 Created OS            00 (0) 'MS-DOS'\n+65F658 Extract Zip Spec      14 (20) '2.0'\n+65F659 Extract OS            00 (0) 'MS-DOS'\n+65F65A General Purpose Flag  0000 (0)\n+65F65C Compression Method    0000 (0) 'Stored'\n+65F65E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65F662 CRC                   00000000 (0)\n+65F666 Compressed Size       00000000 (0)\n+65F66A Uncompressed Size     00000000 (0)\n+65F66E Filename Length       0069 (105)\n+65F670 Extra Length          0009 (9)\n+65F672 Comment Length        0000 (0)\n+65F674 Disk Start            0000 (0)\n+65F676 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65F678 Ext File Attributes   00000000 (0)\n+65F67C Local Header Offset   0013CE40 (1297984)\n+65F680 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65F680: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65F6E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F6EB   Length              0005 (5)\n+65F6ED   Flags               01 (1) 'Modification'\n+65F6EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F6F2 CENTRAL HEADER #479   02014B50 (33639248)\n+65F6F6 Created Zip Spec      14 (20) '2.0'\n+65F6F7 Created OS            00 (0) 'MS-DOS'\n+65F6F8 Extract Zip Spec      14 (20) '2.0'\n+65F6F9 Extract OS            00 (0) 'MS-DOS'\n+65F6FA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65F6FC Compression Method    0000 (0) 'Stored'\n+65F6FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65F702 CRC                   7A85C658 (2055587416)\n+65F706 Compressed Size       00001D19 (7449)\n+65F70A Uncompressed Size     00001D19 (7449)\n+65F70E Filename Length       007F (127)\n+65F710 Extra Length          0009 (9)\n+65F712 Comment Length        0000 (0)\n+65F714 Disk Start            0000 (0)\n+65F716 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65F718 Ext File Attributes   00000000 (0)\n+65F71C Local Header Offset   0013CED0 (1298128)\n+65F720 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65F720: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65F79F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F7A1   Length              0005 (5)\n+65F7A3   Flags               01 (1) 'Modification'\n+65F7A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F7A8 CENTRAL HEADER #480   02014B50 (33639248)\n+65F7AC Created Zip Spec      14 (20) '2.0'\n+65F7AD Created OS            00 (0) 'MS-DOS'\n+65F7AE Extract Zip Spec      14 (20) '2.0'\n+65F7AF Extract OS            00 (0) 'MS-DOS'\n+65F7B0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+65F7B2 Compression Method    0000 (0) 'Stored'\n+65F7B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+65F7B8 CRC                   788D733C (2022535996)\n+65F7BC Compressed Size       0050F344 (5305156)\n+65F7C0 Uncompressed Size     0050F344 (5305156)\n+65F7C4 Filename Length       001A (26)\n+65F7C6 Extra Length          0009 (9)\n+65F7C8 Comment Length        0000 (0)\n+65F7CA Disk Start            0000 (0)\n+65F7CC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+65F7CE Ext File Attributes   00000000 (0)\n+65F7D2 Local Header Offset   0013EC9F (1305759)\n+65F7D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65F7D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65F7F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65F7F2   Length              0005 (5)\n+65F7F4   Flags               01 (1) 'Modification'\n+65F7F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+65F7F9 END CENTRAL HEADER    06054B50 (101010256)\n+65F7FD Number of this disk   0000 (0)\n+65F7FF Central Dir Disk no   0000 (0)\n+65F801 Entries in this disk  01E0 (480)\n+65F803 Total Entries         01E0 (480)\n+65F805 Size of Central Dir   000117C5 (71621)\n+65F809 Offset to Central Dir 0064E034 (6610996)\n+65F80D Comment Length        0000 (0)\n #\n # Warning Count: 960\n #\n # Done\n"}, {"source1": "META-INF/DEPENDENCIES", "source2": "META-INF/DEPENDENCIES", "unified_diff": "@@ -61,14 +61,17 @@\n \n   - okio (https://github.com/square/okio/) com.squareup.okio:okio:jar:3.9.0\n     License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n \n   - okio (https://github.com/square/okio/) com.squareup.okio:okio-jvm:jar:3.9.0\n     License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n \n+  - dnsjava (http://www.dnsjava.org) dnsjava:dnsjava:jar:2.1.7\n+    License: BSD 2-Clause license  (http://opensource.org/licenses/BSD-2-Clause)\n+\n   - io.grpc:grpc-alts (https://github.com/grpc/grpc-java) io.grpc:grpc-alts:jar:1.58.0\n     License: Apache 2.0  (https://opensource.org/licenses/Apache-2.0)\n \n   - io.grpc:grpc-api (https://github.com/grpc/grpc-java) io.grpc:grpc-api:jar:1.58.0\n     License: Apache 2.0  (https://opensource.org/licenses/Apache-2.0)\n \n   - io.grpc:grpc-auth (https://github.com/grpc/grpc-java) io.grpc:grpc-auth:jar:1.58.0\n@@ -106,26 +109,53 @@\n \n   - io.grpc:grpc-util (https://github.com/grpc/grpc-java) io.grpc:grpc-util:jar:1.58.0\n     License: Apache 2.0  (https://opensource.org/licenses/Apache-2.0)\n \n   - io.grpc:grpc-xds (https://github.com/grpc/grpc-java) io.grpc:grpc-xds:jar:1.58.0\n     License: Apache 2.0  (https://opensource.org/licenses/Apache-2.0)\n \n+  - Netty/TomcatNative [BoringSSL - Static] (https://github.com/netty/netty-tcnative/netty-tcnative-boringssl-static/) io.netty:netty-tcnative-boringssl-static:jar:2.0.65.Final\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Netty/TomcatNative [BoringSSL - Static] (https://github.com/netty/netty-tcnative/netty-tcnative-boringssl-static/) io.netty:netty-tcnative-boringssl-static:jar:2.0.65.Final\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Netty/TomcatNative [BoringSSL - Static] (https://github.com/netty/netty-tcnative/netty-tcnative-boringssl-static/) io.netty:netty-tcnative-boringssl-static:jar:2.0.65.Final\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Netty/TomcatNative [BoringSSL - Static] (https://github.com/netty/netty-tcnative/netty-tcnative-boringssl-static/) io.netty:netty-tcnative-boringssl-static:jar:2.0.65.Final\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Netty/TomcatNative [BoringSSL - Static] (https://github.com/netty/netty-tcnative/netty-tcnative-boringssl-static/) io.netty:netty-tcnative-boringssl-static:jar:2.0.65.Final\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Netty/TomcatNative [BoringSSL - Static] (https://github.com/netty/netty-tcnative/netty-tcnative-boringssl-static/) io.netty:netty-tcnative-boringssl-static:jar:2.0.65.Final\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n   - OpenCensus (https://github.com/census-instrumentation/opencensus-java) io.opencensus:opencensus-api:jar:0.31.1\n     License: The Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n \n   - OpenCensus (https://github.com/census-instrumentation/opencensus-java) io.opencensus:opencensus-contrib-http-util:jar:0.31.1\n     License: The Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n \n   - OpenCensus (https://github.com/census-instrumentation/opencensus-proto) io.opencensus:opencensus-proto:jar:0.2.0\n     License: The Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n \n   - perfmark:perfmark-api (https://github.com/perfmark/perfmark) io.perfmark:perfmark-api:jar:0.26.0\n     License: Apache 2.0  (https://opensource.org/licenses/Apache-2.0)\n \n+  - JavaBeans Activation Framework (JAF) (http://java.sun.com/products/javabeans/jaf/index.jsp) javax.activation:activation:jar:1.1\n+    License: Common Development and Distribution License (CDDL) v1.0  (https://glassfish.dev.java.net/public/CDDLv1.0.html)\n+\n+  - jsp-api  javax.servlet.jsp:jsp-api:jar:2.1\n+\n+  - Streaming API for XML  javax.xml.stream:stax-api:jar:1.0-2\n+    License: GNU General Public Library  (http://www.gnu.org/licenses/gpl.txt)\n+    License: COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0  (http://www.sun.com/cddl/cddl.html)\n+\n   - Java Native Access (https://github.com/java-native-access/jna) net.java.dev.jna:jna:jar:5.13.0\n     License: LGPL-2.1-or-later  (https://www.gnu.org/licenses/old-licenses/lgpl-2.1)\n     License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n \n   - Java Native Access Platform (https://github.com/java-native-access/jna) net.java.dev.jna:jna-platform:jar:5.6.0\n     License: LGPL, version 2.1  (http://www.gnu.org/licenses/licenses.html)\n     License: Apache License v2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n@@ -141,14 +171,16 @@\n \n   - Bouncy Castle ASN.1 Extension and Utility APIs (https://www.bouncycastle.org/java.html) org.bouncycastle:bcutil-jdk18on:jar:1.78.1\n     License: Bouncy Castle Licence  (https://www.bouncycastle.org/licence.html)\n \n   - Checker Qual (https://checkerframework.org/) org.checkerframework:checker-qual:jar:3.33.0\n     License: The MIT License  (http://opensource.org/licenses/MIT)\n \n+  - Jettison  org.codehaus.jettison:jettison:bundle:1.1\n+\n   - org.conscrypt:conscrypt-openjdk-uber (https://conscrypt.org/) org.conscrypt:conscrypt-openjdk-uber:jar:2.5.2\n     License: Apache 2  (https://www.apache.org/licenses/LICENSE-2.0)\n \n   - IntelliJ IDEA Annotations (http://www.jetbrains.org) org.jetbrains:annotations:jar:13.0\n     License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n \n   - Kotlin Stdlib (https://kotlinlang.org/) org.jetbrains.kotlin:kotlin-stdlib:jar:1.9.24\n@@ -609,14 +641,20 @@\n \n   - nifi-provenance-repository-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-provenance-repository-bundle/nifi-provenance-repository-nar) org.apache.nifi:nifi-provenance-repository-nar:nar:1.27.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n \n   - nifi-proxy-configuration-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-standard-services/nifi-proxy-configuration-bundle/nifi-proxy-configuration-nar) org.apache.nifi:nifi-proxy-configuration-nar:nar:1.27.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n \n+  - nifi-ranger-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-ranger-bundle/nifi-ranger-nar) org.apache.nifi:nifi-ranger-nar:nar:1.27.0\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n+\n+  - nifi-ranger-resources (https://nifi.apache.org/nifi-nar-bundles/nifi-ranger-bundle/nifi-ranger-resources) org.apache.nifi:nifi-ranger-resources:jar:1.27.0\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n+\n   - nifi-record-serialization-services-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-standard-shared-bundle/nifi-standard-shared-bom/nifi-record-serialization-services-bundle/nifi-record-serialization-services-nar) org.apache.nifi:nifi-record-serialization-services-nar:nar:1.27.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n \n   - nifi-record-sink-service-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-standard-shared-bundle/nifi-standard-shared-bom/nifi-record-sink-service-bundle/nifi-record-sink-service-nar) org.apache.nifi:nifi-record-sink-service-nar:nar:1.27.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n \n   - nifi-redis-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-standard-shared-bundle/nifi-standard-shared-bom/nifi-redis-bundle/nifi-redis-nar) org.apache.nifi:nifi-redis-nar:nar:1.27.0\n@@ -760,31 +798,49 @@\n   - nifi-zendesk-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-standard-shared-bundle/nifi-standard-shared-bom/nifi-zendesk-bundle/nifi-zendesk-nar) org.apache.nifi:nifi-zendesk-nar:nar:1.27.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n \n   - nifi-zendesk-services-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-standard-shared-bundle/nifi-standard-shared-bom/nifi-zendesk-bundle/nifi-zendesk-services-nar) org.apache.nifi:nifi-zendesk-services-nar:nar:1.27.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n \n \n+From: 'Apache Software Foundation' (https://www.apache.org)\n+\n+  - Apache Hadoop Annotations  org.apache.hadoop:hadoop-annotations:jar:3.3.0\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Apache Hadoop Auth  org.apache.hadoop:hadoop-auth:jar:3.3.0\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Apache Hadoop Common  org.apache.hadoop:hadoop-common:jar:3.3.0\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Apache Hadoop shaded Protobuf 3.7 (https://www.apache.org/hadoop-thirdparty/hadoop-shaded-protobuf_3_7/) org.apache.hadoop.thirdparty:hadoop-shaded-protobuf_3_7:jar:1.0.0\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+\n From: 'Chemouni Uriel' (https://urielch.github.io/)\n \n   - ASM based accessors helper used by json-smart (https://urielch.github.io/) net.minidev:accessors-smart:bundle:2.5.1\n     License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n \n   - JSON Small and Fast Parser (https://urielch.github.io/) net.minidev:json-smart:bundle:2.5.1\n     License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n \n \n+From: 'Connect2id Ltd.' (http://connect2id.com)\n+\n+  - Nimbus JOSE+JWT (https://bitbucket.org/connect2id/nimbus-jose-jwt) com.nimbusds:nimbus-jose-jwt:jar:7.9\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+\n From: 'Connect2id Ltd.' (https://connect2id.com)\n \n   - Nimbus Content Type (https://bitbucket.org/connect2id/nimbus-content-type) com.nimbusds:content-type:jar:2.3\n     License: The Apache Software License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n \n-  - Nimbus JOSE+JWT (https://bitbucket.org/connect2id/nimbus-jose-jwt) com.nimbusds:nimbus-jose-jwt:jar:9.37.3\n-    License: The Apache Software License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n-\n   - OAuth 2.0 SDK with OpenID Connect extensions (https://bitbucket.org/connect2id/oauth-2.0-sdk-with-openid-connect-extensions) com.nimbusds:oauth2-oidc-sdk:jar:11.9.1\n     License: Apache License, version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.html)\n \n \n From: 'Connect2id Ltd.' (https://connect2id.com/)\n \n   - Nimbus LangTag (https://bitbucket.org/connect2id/nimbus-language-tags) com.nimbusds:lang-tag:jar:1.7\n@@ -808,14 +864,34 @@\n   - JAXB Runtime (https://eclipse-ee4j.github.io/jaxb-ri/) org.glassfish.jaxb:jaxb-runtime:jar:2.3.9\n     License: Eclipse Distribution License - v 1.0  (http://www.eclipse.org/org/documents/edl-v10.php)\n \n   - TXW2 Runtime (https://eclipse-ee4j.github.io/jaxb-ri/) org.glassfish.jaxb:txw2:jar:2.3.9\n     License: Eclipse Distribution License - v 1.0  (http://www.eclipse.org/org/documents/edl-v10.php)\n \n \n+From: 'FasterXML' (http://fasterxml.com)\n+\n+  - Woodstox (https://github.com/FasterXML/woodstox) com.fasterxml.woodstox:woodstox-core:bundle:5.0.3\n+    License: The Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Jackson (http://jackson.codehaus.org) org.codehaus.jackson:jackson-core-asl:jar:1.9.2\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - JAX-RS provider for JSON content type (http://jackson.codehaus.org) org.codehaus.jackson:jackson-jaxrs:jar:1.9.2\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+    License: GNU Lesser General Public License (LGPL), Version 2.1  (http://www.fsf.org/licensing/licenses/lgpl.txt)\n+\n+  - Data Mapper for Jackson (http://jackson.codehaus.org) org.codehaus.jackson:jackson-mapper-asl:jar:1.9.2\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Xml Compatibility extensions for Jackson (http://jackson.codehaus.org) org.codehaus.jackson:jackson-xc:jar:1.9.2\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+    License: GNU Lesser General Public License (LGPL), Version 2.1  (http://www.fsf.org/licensing/licenses/lgpl.txt)\n+\n+\n From: 'FasterXML' (http://fasterxml.com/)\n \n   - Jackson-annotations (https://github.com/FasterXML/jackson) com.fasterxml.jackson.core:jackson-annotations:jar:2.17.1\n     License: The Apache Software License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n \n   - Jackson-core (https://github.com/FasterXML/jackson-core) com.fasterxml.jackson.core:jackson-core:jar:2.17.1\n     License: The Apache Software License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n@@ -823,14 +899,20 @@\n   - jackson-databind (https://github.com/FasterXML/jackson) com.fasterxml.jackson.core:jackson-databind:jar:2.17.1\n     License: The Apache Software License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n \n   - Jackson datatype: JSR310 (https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310) com.fasterxml.jackson.datatype:jackson-datatype-jsr310:bundle:2.17.1\n     License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n \n \n+From: 'fasterxml.com' (http://fasterxml.com)\n+\n+  - Stax2 API (http://wiki.fasterxml.com/WoodstoxStax2) org.codehaus.woodstox:stax2-api:bundle:3.1.4\n+    License: The BSD License  (http://www.opensource.org/licenses/bsd-license.php)\n+\n+\n From: 'GlassFish Community' (https://javaee.github.io/glassfish)\n \n   - javax.annotation API (http://jcp.org/en/jsr/detail?id=250) javax.annotation:javax.annotation-api:jar:1.3.2\n     License: CDDL + GPLv2 with classpath exception  (https://github.com/javaee/javax.annotation/blob/master/LICENSE)\n \n \n From: 'Google' (http://www.google.com/)\n@@ -889,14 +971,20 @@\n   - proto-google-iam-v1 (https://github.com/googleapis/sdk-platform-java) com.google.api.grpc:proto-google-iam-v1:jar:1.21.0\n     License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n \n   - Google Cloud KMS (https://github.com/googleapis/google-cloud-java) com.google.cloud:google-cloud-kms:jar:2.31.0\n     License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n \n \n+From: 'JCraft,Inc.' (http://www.jcraft.com/)\n+\n+  - JSch (http://www.jcraft.com/jsch/) com.jcraft:jsch:jar:0.1.55\n+    License: Revised BSD  (http://www.jcraft.com/jsch/LICENSE.txt)\n+\n+\n From: 'Microsoft Corporation' (http://microsoft.com)\n \n   - Microsoft Azure Java Core Library (https://github.com/Azure/azure-sdk-for-java) com.azure:azure-core:jar:1.46.0\n     License: The MIT License (MIT)  (http://opensource.org/licenses/MIT)\n \n   - Microsoft Azure OkHttp HTTP Client Library (https://github.com/Azure/azure-sdk-for-java) com.azure:azure-core-http-okhttp:jar:1.11.18\n     License: The MIT License (MIT)  (http://opensource.org/licenses/MIT)\n@@ -928,14 +1016,44 @@\n     License: EDL 1.0  (http://www.eclipse.org/org/documents/edl-v10.php)\n \n   - Jakarta Mail API jar (http://eclipse-ee4j.github.io/mail/jakarta.mail-api) jakarta.mail:jakarta.mail-api:jar:1.6.7\n     License: EPL 2.0  (http://www.eclipse.org/legal/epl-2.0)\n     License: GPL2 w/ CPE  (https://www.gnu.org/software/classpath/license.html)\n     License: EDL 1.0  (http://www.eclipse.org/org/documents/edl-v10.php)\n \n+  - JavaBeans Activation Framework API jar (http://java.net/all/javax.activation-api/) javax.activation:javax.activation-api:jar:1.2.0\n+    License: CDDL/GPLv2+CE  (https://github.com/javaee/activation/blob/master/LICENSE.txt)\n+\n+\n+From: 'Oracle Corporation' (http://www.oracle.com/)\n+\n+  - jersey-core (https://jersey.java.net/jersey-core/) com.sun.jersey:jersey-core:jar:1.19\n+    License: CDDL 1.1  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)\n+    License: GPL2 w/ CPE  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)\n+\n+  - jersey-json (https://jersey.java.net/jersey-json/) com.sun.jersey:jersey-json:jar:1.19\n+    License: CDDL 1.1  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)\n+    License: GPL2 w/ CPE  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)\n+\n+  - jersey-server (https://jersey.java.net/jersey-server/) com.sun.jersey:jersey-server:jar:1.19\n+    License: CDDL 1.1  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)\n+    License: GPL2 w/ CPE  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)\n+\n+  - jersey-servlet (https://jersey.java.net/jersey-servlet/) com.sun.jersey:jersey-servlet:jar:1.19\n+    License: CDDL 1.1  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)\n+    License: GPL2 w/ CPE  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)\n+\n+  - JAXB RI (http://jaxb.java.net/) com.sun.xml.bind:jaxb-impl:jar:2.2.3-1\n+    License: CDDL 1.1  (https://glassfish.java.net/public/CDDL+GPL_1_1.html)\n+    License: GPL2 w/ CPE  (https://glassfish.java.net/public/CDDL+GPL_1_1.html)\n+\n+  - JAXB API bundle for GlassFish V3 (https://jaxb.dev.java.net/) javax.xml.bind:jaxb-api:jar:2.2.2\n+    License: CDDL 1.1  (https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html)\n+    License: GPL2 w/ CPE  (https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html)\n+\n \n From: 'OW2' (http://www.ow2.org/)\n \n   - asm (http://asm.ow2.io/) org.ow2.asm:asm:jar:9.6\n     License: BSD-3-Clause  (https://asm.ow2.io/license.html)\n \n \n@@ -971,37 +1089,152 @@\n   - Spring Commons Logging Bridge (https://github.com/spring-projects/spring-framework) org.springframework:spring-jcl:jar:5.3.37\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n \n   - Spring Web (https://github.com/spring-projects/spring-framework) org.springframework:spring-web:jar:5.3.37\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n \n \n+From: 'Sun Microsystems, Inc' (http://www.sun.com/)\n+\n+  - jsr311-api (https://jsr311.dev.java.net) javax.ws.rs:jsr311-api:jar:1.1.1\n+    License: CDDL License  (http://www.opensource.org/licenses/cddl1.php)\n+\n+\n From: 'The Apache Software Foundation' (http://www.apache.org/)\n \n+  - Apache Commons Collections (http://commons.apache.org/collections/) commons-collections:commons-collections:jar:3.2.2\n+    License: Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Commons Math (http://commons.apache.org/math/) org.apache.commons:commons-math3:jar:3.1.1\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Curator Client (http://curator.apache.org/curator-client) org.apache.curator:curator-client:bundle:4.2.0\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Curator Framework (http://curator.apache.org/curator-framework) org.apache.curator:curator-framework:bundle:4.2.0\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Curator Recipes (http://curator.apache.org/curator-recipes) org.apache.curator:curator-recipes:bundle:4.2.0\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - htrace-core4 (http://incubator.apache.org/projects/htrace.html) org.apache.htrace:htrace-core4:jar:4.1.0-incubating\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n   - Apache HttpClient (http://hc.apache.org/httpcomponents-client-ga) org.apache.httpcomponents:httpclient:jar:4.5.14\n     License: Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n \n   - Apache HttpCore (http://hc.apache.org/httpcomponents-core-ga) org.apache.httpcomponents:httpcore:jar:4.4.16\n     License: Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n \n \n From: 'The Apache Software Foundation' (https://www.apache.org/)\n \n+  - Apache Commons BeanUtils (https://commons.apache.org/proper/commons-beanutils/) commons-beanutils:commons-beanutils:jar:1.9.4\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Apache Commons CLI (https://commons.apache.org/proper/commons-cli/) commons-cli:commons-cli:jar:1.7.0\n+    License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n   - Apache Commons Codec (https://commons.apache.org/proper/commons-codec/) commons-codec:commons-codec:jar:1.17.0\n     License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n \n+  - Apache Commons IO (https://commons.apache.org/proper/commons-io/) commons-io:commons-io:jar:2.16.1\n+    License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Apache Commons Net (https://commons.apache.org/proper/commons-net/) commons-net:commons-net:jar:3.10.0\n+    License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Apache Avro (https://avro.apache.org) org.apache.avro:avro:bundle:1.11.3\n+    License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Apache Commons Compress (https://commons.apache.org/proper/commons-compress/) org.apache.commons:commons-compress:jar:1.26.2\n+    License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Apache Commons Configuration (https://commons.apache.org/proper/commons-configuration/) org.apache.commons:commons-configuration2:jar:2.10.1\n+    License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n   - Apache Commons Lang (https://commons.apache.org/proper/commons-lang/) org.apache.commons:commons-lang3:jar:3.14.0\n     License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n \n   - Apache Commons Text (https://commons.apache.org/proper/commons-text) org.apache.commons:commons-text:jar:1.12.0\n     License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n \n+  - Kerby-kerb Admin (http://directory.apache.org/kerby/kerby-kerb/kerb-admin) org.apache.kerby:kerb-admin:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Kerby-kerb Client (http://directory.apache.org/kerby/kerby-kerb/kerb-client) org.apache.kerby:kerb-client:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Kerby-kerb Common (http://directory.apache.org/kerby/kerby-kerb/kerb-common) org.apache.kerby:kerb-common:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Kerby-kerb core (http://directory.apache.org/kerby/kerby-kerb/kerb-core) org.apache.kerby:kerb-core:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Kerby-kerb Crypto (http://directory.apache.org/kerby/kerby-kerb/kerb-crypto) org.apache.kerby:kerb-crypto:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Kerby-kerb Identity (http://directory.apache.org/kerby/kerby-kerb/kerb-identity) org.apache.kerby:kerb-identity:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Kerby-kerb Server (http://directory.apache.org/kerby/kerby-kerb/kerb-server) org.apache.kerby:kerb-server:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Kerb Simple Kdc (http://directory.apache.org/kerby/kerby-kerb/kerb-simplekdc) org.apache.kerby:kerb-simplekdc:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Kerby-kerb Util (http://directory.apache.org/kerby/kerby-kerb/kerb-util) org.apache.kerby:kerb-util:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Kerby ASN1 Project (http://directory.apache.org/kerby/kerby-common/kerby-asn1) org.apache.kerby:kerby-asn1:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Kerby Config (http://directory.apache.org/kerby/kerby-common/kerby-config) org.apache.kerby:kerby-config:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Kerby PKIX Project (http://directory.apache.org/kerby/kerby-pkix) org.apache.kerby:kerby-pkix:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Kerby Util (http://directory.apache.org/kerby/kerby-common/kerby-util) org.apache.kerby:kerby-util:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Kerby XDR Project (http://directory.apache.org/kerby/kerby-common/kerby-xdr) org.apache.kerby:kerby-xdr:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Token provider (http://directory.apache.org/kerby/kerby-provider/token-provider) org.apache.kerby:token-provider:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Credential Builder (http://ranger.apache.org/credentialbuilder/) org.apache.ranger:credentialbuilder:jar:2.4.0\n+    License: Apache 2.0 License  (http://www.apache.org/licenses/LICENSE-2.0.html)\n+\n+  - Apache Yetus - Audience Annotations (https://yetus.apache.org/audience-annotations) org.apache.yetus:audience-annotations:jar:0.12.0\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Apache ZooKeeper - Server (http://zookeeper.apache.org/zookeeper) org.apache.zookeeper:zookeeper:jar:3.9.2\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+  - Apache ZooKeeper - Jute (http://zookeeper.apache.org/zookeeper-jute) org.apache.zookeeper:zookeeper-jute:jar:3.9.2\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n+\n+From: 'The Netty Project' (https://netty.io/)\n+\n+  - Netty/TomcatNative [OpenSSL - Classes] (https://github.com/netty/netty-tcnative/netty-tcnative-classes/) io.netty:netty-tcnative-classes:jar:2.0.65.Final\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n \n From: 'ThreeTen.org' (https://www.threeten.org)\n \n   - ThreeTen backport (https://www.threeten.org/threetenbp) org.threeten:threetenbp:jar:1.6.8\n     License: BSD-3-Clause  (https://raw.githubusercontent.com/ThreeTen/threetenbp/main/LICENSE.txt)\n \n \n+From: 'Webtide' (https://webtide.com)\n+\n+  - Jetty :: Utilities (https://eclipse.org/jetty/jetty-util) org.eclipse.jetty:jetty-util:jar:9.4.54.v20240208\n+    License: Apache Software License - Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0)\n+    License: Eclipse Public License - Version 1.0  (https://www.eclipse.org/org/documents/epl-v10.php)\n+\n+\n \n \n \n"}, {"source1": "build.properties", "source2": "build.properties", "unified_diff": "@@ -12,18 +12,18 @@\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 Project-Version:1.27.0\n Build-Branch:UNKNOWN\n Build-Revision:e0c4461\n-Build-Timestamp:2024-07-03T10:31:04Z\n-Built-By:pierre\n-Maven-Home:/Users/pierre/.m2/wrapper/dists/apache-maven-3.9.6/a53741d1\n-Maven-Version:3.9.6\n-Created-By:Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)\n-Build-Java-Home:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre\n-Build-Jdk:1.8.0_302\n-Build-Jdk-Vendor:Azul Systems, Inc.\n-Build-Arch:x86_64\n-Build-Os:Mac OS X\n-Build-Os-Version:10.16\n+Build-Timestamp:2025-01-29T23:26:02Z\n+Built-By:aman\n+Maven-Home:/usr/local/apache-maven\n+Maven-Version:3.9.8\n+Created-By:Apache Maven 3.9.8 (36645f6c9b5079805ea5009217e36f2cffd34256)\n+Build-Java-Home:/usr/lib/jvm/java-8-openjdk-amd64/jre\n+Build-Jdk:1.8.0_422\n+Build-Jdk-Vendor:Private Build\n+Build-Arch:amd64\n+Build-Os:Linux\n+Build-Os-Version:5.15.0-87-generic\n"}, {"source1": "nifi-runtime-manifest.json", "source2": "nifi-runtime-manifest.json", "unified_diff": null, "details": [{"source1": "Pretty-printed", "source2": "Pretty-printed", "comments": ["Similarity: 0.9662139801335909%", "Differences: {\"'buildInfo'\": \"{'timestamp': 1738193162000, 'compiler': 'Private Build 1.8.0_422'}\",", " \"'bundles'\": \"{0: {'artifact': 'nifi-cybersecurity-nar', 'componentManifest': {'processors': {0: \"", "              \"{'artifact': 'nifi-cybersecurity-nar', 'type': \"", "              \"'org.apache.nifi.processors.cybersecurity.CompareFuzzyHash', 'typeDescription': \"", "              \"'Compares an attribute containing a Fuzzy Hash against a file containing a list of \"", "              'fuzzy hashes, appending an attribute to the FlowF [\u2026]"], "unified_diff": "@@ -1,762 +1,295 @@\n {\n     \"agentType\": \"nifi\",\n     \"buildInfo\": {\n-        \"compiler\": \"Azul Systems, Inc. 1.8.0_302\",\n+        \"compiler\": \"Private Build 1.8.0_422\",\n         \"revision\": \"e0c4461\",\n-        \"timestamp\": 1719995464000,\n+        \"timestamp\": 1738193162000,\n         \"version\": \"1.27.0\"\n     },\n     \"bundles\": [\n         {\n-            \"artifact\": \"nifi-amqp-nar\",\n+            \"artifact\": \"nifi-cybersecurity-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-amqp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cybersecurity-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AMQP Version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"0.9.1\",\n-                                        \"value\": \"0.9.1\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0.9.1\",\n-                                \"description\": \"AMQP Version. Currently only supports AMQP v0.9.1.\",\n-                                \"displayName\": \"AMQP Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AMQP Version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Brokers\": {\n-                                \"description\": \"A comma-separated list of known AMQP Brokers in the format <host>:<port> (e.g., localhost:5672). If this is set, Host Name and Port are ignored. Only include hosts from the same AMQP cluster.\",\n-                                \"displayName\": \"Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Brokers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Host Name\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Network address of AMQP broker (e.g., localhost). If Brokers is set, then this property is ignored.\",\n-                                \"displayName\": \"Host Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Host Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"5672\",\n-                                \"description\": \"Numeric value identifying Port of AMQP broker (e.g., 5671). If Brokers is set, then this property is ignored.\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Queue\": {\n-                                \"description\": \"The name of the existing AMQP Queue from which messages will be consumed. Usually pre-defined by AMQP administrator. \",\n-                                \"displayName\": \"Queue\",\n+                            \"ATTRIBUTE_NAME\": {\n+                                \"defaultValue\": \"fuzzyhash.value\",\n+                                \"description\": \"The name of the FlowFile Attribute that should hold the Fuzzy Hash Value\",\n+                                \"displayName\": \"Hash Attribute Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Queue\",\n+                                \"name\": \"ATTRIBUTE_NAME\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"User Name\": {\n-                                \"description\": \"User Name used for authentication and authorization.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"User Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Virtual Host\": {\n-                                \"description\": \"Virtual Host name which segregates AMQP system for enhanced security.\",\n-                                \"displayName\": \"Virtual Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Virtual Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"auto.acknowledge\": {\n+                            \"HASH_ALGORITHM\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Uses ssdeep / SpamSum 'context triggered piecewise hash'.\",\n+                                        \"displayName\": \"ssdeep\",\n+                                        \"value\": \"ssdeep\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Uses TLSH (Trend 'Locality Sensitive Hash'). Note: FlowFile Content must be at least 512 characters long\",\n+                                        \"displayName\": \"tlsh\",\n+                                        \"value\": \"tlsh\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \" If false (Non-Auto-Acknowledge), the messages will be acknowledged by the processor after transferring the FlowFiles to success and committing the NiFi session. Non-Auto-Acknowledge mode provides 'at-least-once' delivery semantics. If true (Auto-Acknowledge), messages that are delivered to the AMQP Client will be auto-acknowledged by the AMQP Broker just after sending them out. This generally will provide better throughput but will also result in messages being lost upon restart/crash of the AMQP Broker, NiFi or the processor. Auto-Acknowledge mode provides 'at-most-once' delivery semantics and it is recommended only if loosing messages is acceptable.\",\n-                                \"displayName\": \"Auto-Acknowledge Messages\",\n+                                \"description\": \"The hashing algorithm utilised\",\n+                                \"displayName\": \"Hashing Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.acknowledge\",\n+                                \"name\": \"HASH_ALGORITHM\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"batch.size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of messages that should be processed in a single session. Once this many messages have been received (or once no more messages are readily available), the messages received will be transferred to the 'success' relationship and the messages will be acknowledged to the AMQP Broker. Setting this value to a larger number could result in better performance, particularly for very small messages, but can also result in more messages being duplicated upon sudden restart of NiFi.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"HASH_LIST_FILE\": {\n+                                \"description\": \"Path to the file containing hashes to be validated against\",\n+                                \"displayName\": \"Hash List Source File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch.size\",\n+                                \"name\": \"HASH_LIST_FILE\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"cert-authentication\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Authenticate using the SSL certificate rather than user name/password.\",\n-                                \"displayName\": \"Use Client Certificate Authentication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cert-authentication\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"header.format\": {\n+                            \"MATCHING_MODE\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Put all headers as a string with the specified separator in the attribute 'amqp$headers'.\",\n-                                        \"displayName\": \"Comma-Separated String\",\n-                                        \"value\": \"Comma-Separated String\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Format all headers as JSON string and output in the attribute 'amqp$headers'. It will include keys with null value as well.\",\n-                                        \"displayName\": \"JSON String\",\n-                                        \"value\": \"JSON String\"\n+                                        \"description\": \"Send FlowFile to matched after the first match above threshold\",\n+                                        \"displayName\": \"single\",\n+                                        \"value\": \"single\"\n                                     },\n                                     {\n-                                        \"description\": \"Put each header as attribute of the flow file with a prefix specified in the properties\",\n-                                        \"displayName\": \"FlowFile Attributes\",\n-                                        \"value\": \"FlowFile Attributes\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Comma-Separated String\",\n-                                \"description\": \"Defines how to output headers from the received message\",\n-                                \"displayName\": \"Header Output Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header.format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"header.key.prefix\": {\n-                                \"defaultValue\": \"consume.amqp\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"FlowFile Attributes\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Header Output Format\",\n-                                        \"propertyName\": \"header.format\"\n+                                        \"description\": \"Iterate full list of hashes before deciding to send FlowFile to matched or unmatched\",\n+                                        \"displayName\": \"multi-match\",\n+                                        \"value\": \"multi-match\"\n                                     }\n                                 ],\n-                                \"description\": \"Text to be prefixed to header keys as the are added to the FlowFile attributes. Processor will append '.' to the value of this property\",\n-                                \"displayName\": \"Header Key Prefix\",\n+                                \"defaultValue\": \"single\",\n+                                \"description\": \"Defines if the Processor should try to match as many entries as possible (multi-match) or if it should stop after the first match (single)\",\n+                                \"displayName\": \"Matching Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header.key.prefix\",\n+                                \"name\": \"MATCHING_MODE\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"header.separator\": {\n-                                \"defaultValue\": \",\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Comma-Separated String\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Header Output Format\",\n-                                        \"propertyName\": \"header.format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to separate key-value for header in String. The value must be only one character.\",\n-                                \"displayName\": \"Header Separator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header.separator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"prefetch.count\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of unacknowledged messages for the consumer. If consumer has this number of unacknowledged messages, AMQP broker will no longer send new messages until consumer acknowledges some of the messages already delivered to it.Allowed values: from 0 to 65535. 0 means no limit\",\n-                                \"displayName\": \"Prefetch Count\",\n+                            \"MATCH_THRESHOLD\": {\n+                                \"description\": \"The similarity score must exceed or be equal to in order formatch to be considered true. Refer to Additional Information for differences between TLSH and SSDEEP scores and how they relate to this property.\",\n+                                \"displayName\": \"Match Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prefetch.count\",\n+                                \"name\": \"MATCH_THRESHOLD\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"remove.curly.braces\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"False\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Comma-Separated String\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Header Output Format\",\n-                                        \"propertyName\": \"header.format\"\n-                                    }\n-                                ],\n-                                \"description\": \"If true Remove Curly Braces, Curly Braces in the header will be automatically remove.\",\n-                                \"displayName\": \"Remove Curly Braces\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"remove.curly.braces\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl-client-auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"The property has no effect and therefore deprecated.\",\n-                                \"displayName\": \"Client Auth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.cybersecurity.FuzzyHashContent\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received from the AMQP queue are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Any FlowFile that cannot be matched, e.g. (lacks the attribute) will be sent to this Relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that cannot be matched to an existing hash will be sent to this Relationship.\",\n+                                \"name\": \"not-found\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that is successfully matched to an existing hash will be sent to this Relationship.\",\n+                                \"name\": \"found\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"amqp\",\n-                            \"consume\",\n-                            \"get\",\n-                            \"message\",\n-                            \"rabbit\",\n-                            \"receive\"\n+                            \"cyber-security\",\n+                            \"fuzzy-hashing\",\n+                            \"hashing\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.amqp.processors.ConsumeAMQP\",\n-                        \"typeDescription\": \"Consumes AMQP Messages from an AMQP Broker using the AMQP 0.9.1 protocol. Each message that is received from the AMQP Broker will be emitted as its own FlowFile to the 'success' relationship.\",\n+                        \"type\": \"org.apache.nifi.processors.cybersecurity.CompareFuzzyHash\",\n+                        \"typeDescription\": \"Compares an attribute containing a Fuzzy Hash against a file containing a list of fuzzy hashes, appending an attribute to the FlowFile in case of a successful match.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The App ID field from the AMQP Message\",\n-                                \"name\": \"amqp$appId\"\n-                            },\n-                            {\n-                                \"description\": \"The Content Encoding reported by the AMQP Message\",\n-                                \"name\": \"amqp$contentEncoding\"\n-                            },\n-                            {\n-                                \"description\": \"The Content Type reported by the AMQP Message\",\n-                                \"name\": \"amqp$contentType\"\n-                            },\n-                            {\n-                                \"description\": \"The headers present on the AMQP Message. Added only if processor is configured to output this attribute.\",\n-                                \"name\": \"amqp$headers\"\n-                            },\n-                            {\n-                                \"description\": \"Each message header will be inserted with this attribute name, if processor is configured to output headers as attribute\",\n-                                \"name\": \"<Header Key Prefix>.<attribute>\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric indicator for the Message's Delivery Mode\",\n-                                \"name\": \"amqp$deliveryMode\"\n-                            },\n-                            {\n-                                \"description\": \"The Message priority\",\n-                                \"name\": \"amqp$priority\"\n-                            },\n-                            {\n-                                \"description\": \"The Message's Correlation ID\",\n-                                \"name\": \"amqp$correlationId\"\n-                            },\n-                            {\n-                                \"description\": \"The value of the Message's Reply-To field\",\n-                                \"name\": \"amqp$replyTo\"\n-                            },\n-                            {\n-                                \"description\": \"The Message Expiration\",\n-                                \"name\": \"amqp$expiration\"\n-                            },\n-                            {\n-                                \"description\": \"The unique ID of the Message\",\n-                                \"name\": \"amqp$messageId\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the Message, as the number of milliseconds since epoch\",\n-                                \"name\": \"amqp$timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The type of message\",\n-                                \"name\": \"amqp$type\"\n-                            },\n-                            {\n-                                \"description\": \"The ID of the user\",\n-                                \"name\": \"amqp$userId\"\n-                            },\n-                            {\n-                                \"description\": \"The ID of the AMQP Cluster\",\n-                                \"name\": \"amqp$clusterId\"\n-                            },\n-                            {\n-                                \"description\": \"The routingKey of the AMQP Message\",\n-                                \"name\": \"amqp$routingKey\"\n+                                \"description\": \"The match that resembles the attribute specified by the <Hash Attribute Name> property. Note that: 'XXX' gets replaced with the <Hash Attribute Name>\",\n+                                \"name\": \"XXXX.N.match\"\n                             },\n                             {\n-                                \"description\": \"The exchange from which AMQP Message was received\",\n-                                \"name\": \"amqp$exchange\"\n+                                \"description\": \"The similarity score between this flowfileand its match of the same number N. Note that: 'XXX' gets replaced with the <Hash Attribute Name>\",\n+                                \"name\": \"XXXX.N.similarity\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-amqp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cybersecurity-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AMQP Version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"0.9.1\",\n-                                        \"value\": \"0.9.1\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0.9.1\",\n-                                \"description\": \"AMQP Version. Currently only supports AMQP v0.9.1.\",\n-                                \"displayName\": \"AMQP Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AMQP Version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Brokers\": {\n-                                \"description\": \"A comma-separated list of known AMQP Brokers in the format <host>:<port> (e.g., localhost:5672). If this is set, Host Name and Port are ignored. Only include hosts from the same AMQP cluster.\",\n-                                \"displayName\": \"Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Brokers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Exchange Name\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"The name of the AMQP Exchange the messages will be sent to. Usually provided by the AMQP administrator (e.g., 'amq.direct'). It is an optional property. If kept empty the messages will be sent to a default AMQP exchange.\",\n-                                \"displayName\": \"Exchange Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Exchange Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Host Name\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Network address of AMQP broker (e.g., localhost). If Brokers is set, then this property is ignored.\",\n-                                \"displayName\": \"Host Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Host Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization.\",\n-                                \"displayName\": \"Password\",\n+                            \"ATTRIBUTE_NAME\": {\n+                                \"defaultValue\": \"fuzzyhash.value\",\n+                                \"description\": \"The name of the FlowFile Attribute that should hold the Fuzzy Hash Value\",\n+                                \"displayName\": \"Hash Attribute Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"5672\",\n-                                \"description\": \"Numeric value identifying Port of AMQP broker (e.g., 5671). If Brokers is set, then this property is ignored.\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Routing Key\": {\n-                                \"description\": \"The name of the Routing Key that will be used by AMQP to route messages from the exchange to a destination queue(s). Usually provided by the administrator (e.g., 'myKey')In the event when messages are sent to a default exchange this property corresponds to a destination queue name, otherwise a binding from the Exchange to a Queue via Routing Key must be set (usually by the AMQP administrator)\",\n-                                \"displayName\": \"Routing Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Routing Key\",\n+                                \"name\": \"ATTRIBUTE_NAME\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"User Name\": {\n-                                \"description\": \"User Name used for authentication and authorization.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"User Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Virtual Host\": {\n-                                \"description\": \"Virtual Host name which segregates AMQP system for enhanced security.\",\n-                                \"displayName\": \"Virtual Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Virtual Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cert-authentication\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Authenticate using the SSL certificate rather than user name/password.\",\n-                                \"displayName\": \"Use Client Certificate Authentication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cert-authentication\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"header.separator\": {\n-                                \"defaultValue\": \",\",\n-                                \"description\": \"The character that is used to split key-value for headers. The value must only one character. Otherwise you will get an error message\",\n-                                \"displayName\": \"Header Separator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header.separator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl-client-auth\": {\n+                            \"HASH_ALGORITHM\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Uses ssdeep / SpamSum 'context triggered piecewise hash'.\",\n+                                        \"displayName\": \"ssdeep\",\n+                                        \"value\": \"ssdeep\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Uses TLSH (Trend 'Locality Sensitive Hash'). Note: FlowFile Content must be at least 512 characters long\",\n+                                        \"displayName\": \"tlsh\",\n+                                        \"value\": \"tlsh\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"The property has no effect and therefore deprecated.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"description\": \"The hashing algorithm utilised\",\n+                                \"displayName\": \"Hashing Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n-                                \"required\": false,\n+                                \"name\": \"HASH_ALGORITHM\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The App ID field to set on the AMQP Message\",\n-                                \"name\": \"amqp$appId\"\n-                            },\n-                            {\n-                                \"description\": \"The Content Encoding to set on the AMQP Message\",\n-                                \"name\": \"amqp$contentEncoding\"\n-                            },\n-                            {\n-                                \"description\": \"The Content Type to set on the AMQP Message\",\n-                                \"name\": \"amqp$contentType\"\n-                            },\n-                            {\n-                                \"description\": \"The headers to set on the AMQP Message\",\n-                                \"name\": \"amqp$headers\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric indicator for the Message's Delivery Mode\",\n-                                \"name\": \"amqp$deliveryMode\"\n-                            },\n-                            {\n-                                \"description\": \"The Message priority\",\n-                                \"name\": \"amqp$priority\"\n-                            },\n-                            {\n-                                \"description\": \"The Message's Correlation ID\",\n-                                \"name\": \"amqp$correlationId\"\n-                            },\n-                            {\n-                                \"description\": \"The value of the Message's Reply-To field\",\n-                                \"name\": \"amqp$replyTo\"\n-                            },\n-                            {\n-                                \"description\": \"The Message Expiration\",\n-                                \"name\": \"amqp$expiration\"\n-                            },\n-                            {\n-                                \"description\": \"The unique ID of the Message\",\n-                                \"name\": \"amqp$messageId\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the Message, as the number of milliseconds since epoch\",\n-                                \"name\": \"amqp$timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The type of message\",\n-                                \"name\": \"amqp$type\"\n-                            },\n-                            {\n-                                \"description\": \"The ID of the user\",\n-                                \"name\": \"amqp$userId\"\n-                            },\n-                            {\n-                                \"description\": \"The ID of the AMQP Cluster\",\n-                                \"name\": \"amqp$clusterId\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.cybersecurity.CompareFuzzyHash\",\n+                            \"org.apache.nifi.processors.standard.HashContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are sent to the AMQP destination are routed to this relationship\",\n+                                \"description\": \"Any FlowFile that is successfully hashed will be sent to this Relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot be routed to the AMQP destination are routed to this relationship\",\n+                                \"description\": \"Any FlowFile that is successfully hashed will be sent to this Relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"amqp\",\n-                            \"message\",\n-                            \"publish\",\n-                            \"put\",\n-                            \"rabbit\",\n-                            \"send\"\n+                            \"cyber-security\",\n+                            \"fuzzy-hashing\",\n+                            \"hashing\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.amqp.processors.PublishAMQP\",\n-                        \"typeDescription\": \"Creates an AMQP Message from the contents of a FlowFile and sends the message to an AMQP Exchange. In a typical AMQP exchange model, the message that is sent to the AMQP Exchange will be routed based on the 'Routing Key' to its final destination in the queue (the binding). If due to some misconfiguration the binding between the Exchange, Routing Key and Queue is not set up, the message will have no final destination and will return (i.e., the data will not make it to the queue). If that happens you will see a log in both app-log and bulletin stating to that effect, and the FlowFile will be routed to the 'failure' relationship.\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.cybersecurity.FuzzyHashContent\",\n+                        \"typeDescription\": \"Calculates a fuzzy/locality-sensitive hash value for the Content of a FlowFile and puts that hash value on the FlowFile as an attribute whose name is determined by the <Hash Attribute Name> property.Note: this processor only offers non-cryptographic hash algorithms. And it should be not be seen as a replacement to the HashContent processor.Note: The underlying library loads the entirety of the streamed content into and performs result evaluations in memory. Accordingly, it is important to consider the anticipated profile of content being evaluated by this processor and the hardware supporting it especially when working against large files.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This Processor adds an attribute whose value is the result of Hashing the existing FlowFile content. The name of this attribute is specified by the <Hash Attribute Name> property\",\n+                                \"name\": \"<Hash Attribute Name>\"\n+                            }\n+                        ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-cipher-nar\",\n+            \"artifact\": \"nifi-pgp-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -768,273 +301,124 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"cipher-algorithm-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Cipher Blocking Chaining Mode\",\n-                                        \"displayName\": \"CBC\",\n-                                        \"value\": \"CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Counter Mode\",\n-                                        \"displayName\": \"CTR\",\n-                                        \"value\": \"CTR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Galois/Counter Mode supporting Authenticated Encryption with Associated Data\",\n-                                        \"displayName\": \"GCM\",\n-                                        \"value\": \"GCM\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GCM\",\n-                                \"description\": \"Block cipher mode of operation for decryption using the Advanced Encryption Standard\",\n-                                \"displayName\": \"Cipher Algorithm Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cipher-algorithm-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"cipher-algorithm-padding\": {\n+                            \"decryption-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"NoPadding\",\n-                                        \"displayName\": \"NoPadding\",\n-                                        \"value\": \"NoPadding\"\n+                                        \"description\": \"Produce decrypted content read from literal data ignoring signatures\",\n+                                        \"displayName\": \"DECRYPTED\",\n+                                        \"value\": \"DECRYPTED\"\n                                     },\n                                     {\n-                                        \"description\": \"PKCS5Padding\",\n-                                        \"displayName\": \"PKCS5Padding\",\n-                                        \"value\": \"PKCS5Padding\"\n+                                        \"description\": \"Produce decrypted content packaged as an OpenPGP message for additional processing\",\n+                                        \"displayName\": \"PACKAGED\",\n+                                        \"value\": \"PACKAGED\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NoPadding\",\n-                                \"description\": \"Padding specification used in cipher operation for decryption using the Advanced Encryption Standard\",\n-                                \"displayName\": \"Cipher Algorithm Padding\",\n+                                \"defaultValue\": \"DECRYPTED\",\n+                                \"description\": \"Strategy for writing files to success after decryption\",\n+                                \"displayName\": \"Decryption Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cipher-algorithm-padding\",\n+                                \"name\": \"decryption-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-specification\": {\n-                                \"description\": \"Specification providing the raw secret key or a password from which to derive a secret key\",\n-                                \"displayName\": \"Key Specification\",\n+                            \"passphrase\": {\n+                                \"description\": \"Passphrase used for decrypting data encrypted with Password-Based Encryption\",\n+                                \"displayName\": \"Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-specification\",\n-                                \"required\": true,\n+                                \"name\": \"passphrase\",\n+                                \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"key-specification-format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Raw secret key provided as a hexadecimal string\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Password string for use with a Key Derivation Function to produce a secret key\",\n-                                        \"displayName\": \"PASSWORD\",\n-                                        \"value\": \"PASSWORD\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PASSWORD\",\n-                                \"description\": \"Format describing the configured Key Specification\",\n-                                \"displayName\": \"Key Specification Format\",\n+                            \"private-key-service\": {\n+                                \"description\": \"PGP Private Key Service for decrypting data encrypted with Public Key Encryption\",\n+                                \"displayName\": \"Private Key Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-specification-format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"private-key-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.SignContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Decryption succeeded\",\n+                                \"description\": \"Decryption Succeeded\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Decryption failed\",\n+                                \"description\": \"Decryption Failed\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AES\",\n-                            \"Argon2\",\n-                            \"PBKDF2\",\n-                            \"bcrypt\",\n-                            \"cryptography\",\n-                            \"decipher\",\n-                            \"decrypt\",\n-                            \"scrypt\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContent\",\n-                        \"typeDescription\": \"Decrypt content encrypted with AES and encoded according conventions added in NiFi 0.5.0 for the EncryptContent Processor. The Processor reads the first 256 bytes to determine the presence of a cryptographic salt based on finding the 'NiFiSALT' delimiter. The salt is not present for content encrypted with a raw hexadecimal key. The Processor determines the presence of the initialization vector based on finding the 'NiFiIV' delimiter.The salt format indicates the Key Derivation Function that the Processor uses to generate a secret key based on a configured password. The Processor derives keys with a size of 128 bits according to the conventions implemented in NiFi 0.5.0.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cipher-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Private Key Identities\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PROPERTIES\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Private Key Source\",\n-                                        \"propertyName\": \"Private Key Source\"\n-                                    }\n-                                ],\n-                                \"description\": \"One or more X25519 Private Key Identities, separated with newlines, encoded according to the age specification, starting with AGE-SECRET-KEY-1\",\n-                                \"displayName\": \"Private Key Identities\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Private Key Identities\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n-                                \"sensitive\": true\n+                        \"type\": \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n+                        \"typeDescription\": \"Decrypt contents of OpenPGP messages. Using the Packaged Decryption Strategy preserves OpenPGP encoding to support subsequent signature verification.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Filename from decrypted Literal Data\",\n+                                \"name\": \"pgp.literal.data.filename\"\n                             },\n-                            \"Private Key Identity Resources\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"RESOURCES\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Private Key Source\",\n-                                        \"propertyName\": \"Private Key Source\"\n-                                    }\n-                                ],\n-                                \"description\": \"One or more files or URLs containing X25519 Private Key Identities, separated with newlines, encoded according to the age specification, starting with AGE-SECRET-KEY-1\",\n-                                \"displayName\": \"Private Key Identity Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Private Key Identity Resources\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Modified Date from decrypted Literal Data\",\n+                                \"name\": \"pgp.literal.data.modified\"\n                             },\n-                            \"Private Key Source\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Load one or more keys from configured properties\",\n-                                        \"displayName\": \"PROPERTIES\",\n-                                        \"value\": \"PROPERTIES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Load one or more keys from files or URLs\",\n-                                        \"displayName\": \"RESOURCES\",\n-                                        \"value\": \"RESOURCES\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PROPERTIES\",\n-                                \"description\": \"Source of information determines the loading strategy for X25519 Private Key Identities\",\n-                                \"displayName\": \"Private Key Source\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Private Key Source\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.cipher.EncryptContentAge\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Decryption Completed\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\n                             },\n                             {\n-                                \"description\": \"Decryption Failed\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Symmetric-Key Algorithm Identifier\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.id\"\n                             }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"ChaCha20-Poly1305\",\n-                            \"X25519\",\n-                            \"age\",\n-                            \"age-encryption.org\",\n-                            \"encryption\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContentAge\",\n-                        \"typeDescription\": \"Decrypt content using the age-encryption.org/v1 specification. Detects binary or ASCII armored content encoding using the initial file header bytes. The age standard uses ChaCha20-Poly1305 for authenticated encryption of the payload. The age-keygen command supports generating X25519 key pairs for encryption and decryption operations.\",\n-                        \"version\": \"1.27.0\"\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -1046,788 +430,462 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"encryption-scheme\": {\n+                            \"compression-algorithm\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_128\",\n-                                        \"value\": \"PBEWITHMD5AND128BITAES-CBC-OPENSSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_192\",\n-                                        \"value\": \"PBEWITHMD5AND192BITAES-CBC-OPENSSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_256\",\n-                                        \"value\": \"PBEWITHMD5AND256BITAES-CBC-OPENSSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS5 Scheme 1 with MD5 digest and Data Encryption Standard 64 bit keys. OID 1.2.840.113549.1.5.3\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_DES\",\n-                                        \"value\": \"PBEWITHMD5ANDDES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS Scheme 1 with MD5 digest and Rivest Cipher 2. OID 1.2.840.113549.1.5.6\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_RC2\",\n-                                        \"value\": \"PBEWITHMD5ANDRC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_128\",\n-                                        \"value\": \"PBEWITHSHAAND128BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_192\",\n-                                        \"value\": \"PBEWITHSHAAND192BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_256\",\n-                                        \"value\": \"PBEWITHSHAAND256BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS5 Scheme 1 with SHA-1 digest and Data Encryption Standard. OID 1.2.840.113549.1.5.10\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_DES\",\n-                                        \"value\": \"PBEWITHSHA1ANDDES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Triple Data Encryption Standard 128 bit keys. OID 1.2.840.113549.1.12.1.4\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_DESEDE_128\",\n-                                        \"value\": \"PBEWITHSHAAND2-KEYTRIPLEDES-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Triple Data Encryption Standard 192 bit keys. OID 1.2.840.113549.1.12.1.3\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_DESEDE_192\",\n-                                        \"value\": \"PBEWITHSHAAND3-KEYTRIPLEDES-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS5 Scheme 1 with SHA-1 digest and Rivest Cipher 2. OID 1.2.840.113549.1.5.11\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2\",\n-                                        \"value\": \"PBEWITHSHA1ANDRC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 2 128 bit keys. OID 1.2.840.113549.1.12.1.5\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2_128\",\n-                                        \"value\": \"PBEWITHSHAAND128BITRC2-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 2 40 bit keys. OID 1.2.840.113549.1.12.1.6\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2_40\",\n-                                        \"value\": \"PBEWITHSHAAND40BITRC2-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 4 128 bit keys. OID 1.2.840.113549.1.12.1.1\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC4_128\",\n-                                        \"value\": \"PBEWITHSHAAND128BITRC4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 4 40 bit keys. OID 1.2.840.113549.1.12.1.2\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC4_40\",\n-                                        \"value\": \"PBEWITHSHAAND40BITRC4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Twofish in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_TWOFISH\",\n-                                        \"value\": \"PBEWITHSHAANDTWOFISH-CBC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UNCOMPRESSED\",\n+                                        \"value\": \"UNCOMPRESSED\"\n                                     },\n                                     {\n-                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_128\",\n-                                        \"value\": \"PBEWITHSHA256AND128BITAES-CBC-BC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ZIP\",\n+                                        \"value\": \"ZIP\"\n                                     },\n                                     {\n-                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_192\",\n-                                        \"value\": \"PBEWITHSHA256AND192BITAES-CBC-BC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ZLIB\",\n+                                        \"value\": \"ZLIB\"\n                                     },\n                                     {\n-                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_256\",\n-                                        \"value\": \"PBEWITHSHA256AND256BITAES-CBC-BC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BZIP2\",\n+                                        \"value\": \"BZIP2\"\n                                     }\n                                 ],\n-                                \"description\": \"Password-Based Encryption Scheme including PBES1 described in RFC 8018, and others defined according to PKCS12 and Bouncy Castle implementations\",\n-                                \"displayName\": \"Encryption Scheme\",\n+                                \"defaultValue\": \"ZIP\",\n+                                \"description\": \"Compression Algorithm for encryption\",\n+                                \"displayName\": \"Compression Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"encryption-scheme\",\n+                                \"name\": \"compression-algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-derivation-strategy\": {\n+                            \"file-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"OpenSSL Envelope BytesToKey using a digest algorithm with one iteration and optional salt of eight bytes\",\n-                                        \"displayName\": \"OPENSSL_EVP_BYTES_TO_KEY\",\n-                                        \"value\": \"OPENSSL_EVP_BYTES_TO_KEY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     },\n                                     {\n-                                        \"description\": \"Jasypt Java Simplified Encryption using a digest algorithm with 1000 iterations and required salt of eight or sixteen bytes\",\n-                                        \"displayName\": \"JASYPT_STANDARD\",\n-                                        \"value\": \"JASYPT_STANDARD\"\n-                                    }\n-                                ],\n-                                \"description\": \"Strategy for reading salt from encoded contents and deriving the decryption key according to the number of function iterations\",\n-                                \"displayName\": \"Key Derivation Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-derivation-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"password\": {\n-                                \"description\": \"Password required for Password-Based Encryption Schemes\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Decryption succeeded\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Decryption failed\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Jasypt\",\n-                            \"OpenSSL\",\n-                            \"PBES1\",\n-                            \"PKCS5\",\n-                            \"cryptography\",\n-                            \"decipher\",\n-                            \"decrypt\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContentCompatibility\",\n-                        \"typeDescription\": \"Decrypt content using password-based encryption schemes with legacy algorithms supporting historical compatibility modes.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Password-Based Encryption Scheme\",\n-                                \"name\": \"pbe.scheme\"\n-                            },\n-                            {\n-                                \"description\": \"Password-Based Encryption Block Cipher\",\n-                                \"name\": \"pbe.symmetric.cipher\"\n-                            },\n-                            {\n-                                \"description\": \"Password-Based Encryption Digest Algorithm\",\n-                                \"name\": \"pbe.digest.algorithm\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cipher-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"File Encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Binary encoding\",\n+                                        \"description\": \"\",\n                                         \"displayName\": \"BINARY\",\n                                         \"value\": \"BINARY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"ASCII Armor encoding\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"BINARY\",\n-                                \"description\": \"Output encoding for encrypted files. Binary encoding provides optimal processing performance.\",\n+                                \"description\": \"File Encoding for encryption\",\n                                 \"displayName\": \"File Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Encoding\",\n+                                \"name\": \"file-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Public Key Recipient Resources\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"RESOURCES\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Public Key Source\",\n-                                        \"propertyName\": \"Public Key Source\"\n-                                    }\n-                                ],\n-                                \"description\": \"One or more files or URLs containing X25519 Public Key Recipients, separated with newlines, encoded according to the age specification, starting with age1\",\n-                                \"displayName\": \"Public Key Recipient Resources\",\n+                            \"passphrase\": {\n+                                \"description\": \"Passphrase used for encrypting data with Password-Based Encryption\",\n+                                \"displayName\": \"Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Public Key Recipient Resources\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                                \"name\": \"passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Public Key Recipients\": {\n+                            \"public-key-search\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"PROPERTIES\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Public Key Source\",\n-                                        \"propertyName\": \"Public Key Source\"\n+                                        \"propertyDisplayName\": \"Public Key Service\",\n+                                        \"propertyName\": \"public-key-service\"\n                                     }\n                                 ],\n-                                \"description\": \"One or more X25519 Public Key Recipients, separated with newlines, encoded according to the age specification, starting with age1\",\n-                                \"displayName\": \"Public Key Recipients\",\n+                                \"description\": \"PGP Public Key Search will be used to match against the User ID or Key ID when formatted as uppercase hexadecimal string of 16 characters\",\n+                                \"displayName\": \"Public Key Search\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Public Key Recipients\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"public-key-search\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Public Key Source\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Load one or more keys from configured properties\",\n-                                        \"displayName\": \"PROPERTIES\",\n-                                        \"value\": \"PROPERTIES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Load one or more keys from files or URLs\",\n-                                        \"displayName\": \"RESOURCES\",\n-                                        \"value\": \"RESOURCES\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PROPERTIES\",\n-                                \"description\": \"Source of information determines the loading strategy for X25519 Public Key Recipients\",\n-                                \"displayName\": \"Public Key Source\",\n+                            \"public-key-service\": {\n+                                \"description\": \"PGP Public Key Service for encrypting data with Public Key Encryption\",\n+                                \"displayName\": \"Public Key Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Public Key Source\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.cipher.DecryptContentAge\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Encryption Completed\",\n-                                \"name\": \"success\"\n+                                \"name\": \"public-key-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"Encryption Failed\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"ChaCha20-Poly1305\",\n-                            \"X25519\",\n-                            \"age\",\n-                            \"age-encryption.org\",\n-                            \"encryption\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cipher.EncryptContentAge\",\n-                        \"typeDescription\": \"Encrypt content using the age-encryption.org/v1 specification. Supports binary or ASCII armored content encoding using configurable properties. The age standard uses ChaCha20-Poly1305 for authenticated encryption of the payload. The age-keygen command supports generating X25519 key pairs for encryption and decryption operations.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cipher-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"mac-algorithm\": {\n+                            \"symmetric-key-algorithm\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"HmacSHA256\",\n-                                        \"value\": \"HmacSHA256\"\n+                                        \"displayName\": \"AES_128\",\n+                                        \"value\": \"AES_128\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"HmacSHA512\",\n-                                        \"value\": \"HmacSHA512\"\n-                                    }\n-                                ],\n-                                \"description\": \"Hashed Message Authentication Code Function\",\n-                                \"displayName\": \"Message Authentication Code Algorithm\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mac-algorithm\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-authentication-code\": {\n-                                \"description\": \"The MAC to compare with the calculated value\",\n-                                \"displayName\": \"Message Authentication Code\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"message-authentication-code\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-authentication-code-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HEXADECIMAL\",\n-                                        \"value\": \"HEXADECIMAL\"\n+                                        \"displayName\": \"AES_192\",\n+                                        \"value\": \"AES_192\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BASE64\",\n-                                        \"value\": \"BASE64\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"HEXADECIMAL\",\n-                                \"description\": \"Encoding of the Message Authentication Code\",\n-                                \"displayName\": \"Message Authentication Code Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-authentication-code-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"secret-key\": {\n-                                \"description\": \"Secret key to calculate the hash\",\n-                                \"displayName\": \"Secret Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"secret-key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"secret-key-encoding\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"AES_256\",\n+                                        \"value\": \"AES_256\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UTF8\",\n-                                        \"value\": \"UTF8\"\n+                                        \"displayName\": \"CAMELLIA_128\",\n+                                        \"value\": \"CAMELLIA_128\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"HEXADECIMAL\",\n-                                        \"value\": \"HEXADECIMAL\"\n+                                        \"displayName\": \"CAMELLIA_192\",\n+                                        \"value\": \"CAMELLIA_192\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BASE64\",\n-                                        \"value\": \"BASE64\"\n+                                        \"displayName\": \"CAMELLIA_256\",\n+                                        \"value\": \"CAMELLIA_256\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"HEXADECIMAL\",\n-                                \"description\": \"Encoding of the Secret Key\",\n-                                \"displayName\": \"Secret Key Encoding\",\n+                                \"defaultValue\": \"AES_256\",\n+                                \"description\": \"Symmetric-Key Algorithm for encryption\",\n+                                \"displayName\": \"Symmetric-Key Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"secret-key-encoding\",\n+                                \"name\": \"symmetric-key-algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.SignContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Signature Verification Succeeded\",\n+                                \"description\": \"Encryption Succeeded\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Signature Verification Failed\",\n+                                \"description\": \"Encryption Failed\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Authentication\",\n-                            \"HMAC\",\n-                            \"MAC\",\n-                            \"Signing\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cipher.VerifyContentMAC\",\n-                        \"typeDescription\": \"Calculates a Message Authentication Code using the provided Secret Key and compares it with the provided MAC property\",\n+                        \"type\": \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n+                        \"typeDescription\": \"Encrypt contents using OpenPGP. The processor reads input and detects OpenPGP messages to avoid unnecessary additional wrapping in Literal Data packets.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Calculated Message Authentication Code encoded by the selected encoding\",\n-                                \"name\": \"mac.calculated\"\n+                                \"description\": \"Symmetric-Key Algorithm\",\n+                                \"name\": \"pgp.symmetric.key.algorithm\"\n                             },\n                             {\n-                                \"description\": \"The Encoding of the Hashed Message Authentication Code\",\n-                                \"name\": \"mac.encoding\"\n+                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\n                             },\n                             {\n-                                \"description\": \"Hashed Message Authentication Code Algorithm\",\n-                                \"name\": \"mac.algorithm\"\n+                                \"description\": \"Symmetric-Key Algorithm Key Size\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.key.size\"\n+                            },\n+                            {\n+                                \"description\": \"Symmetric-Key Algorithm Identifier\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.id\"\n+                            },\n+                            {\n+                                \"description\": \"File Encoding\",\n+                                \"name\": \"pgp.file.encoding\"\n+                            },\n+                            {\n+                                \"description\": \"Compression Algorithm\",\n+                                \"name\": \"pgp.compression.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"Compression Algorithm Identifier\",\n+                                \"name\": \"pgp.compression.algorithm.id\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-grpc-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-grpc-nar\",\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"No planned alternatives to be offered. Use custom processors instead.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Always Output Response\": {\n+                            \"compression-algorithm\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"UNCOMPRESSED\",\n+                                        \"value\": \"UNCOMPRESSED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"ZIP\",\n+                                        \"value\": \"ZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ZLIB\",\n+                                        \"value\": \"ZLIB\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BZIP2\",\n+                                        \"value\": \"BZIP2\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Will force a response FlowFile to be generated and routed to the 'Response' relationship regardless of what the server status code received is or if the processor is configured to put the server response body in the request attribute. In the later configuration a request FlowFile with the response body in the attribute and a typical response FlowFile will be emitted to their respective relationships.\",\n-                                \"displayName\": \"Always Output Response\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Always Output Response\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Message Size\": {\n-                                \"defaultValue\": \"4MB\",\n-                                \"description\": \"The maximum size of FlowFiles that this processor will allow to be received. The default is 4MB. If FlowFiles exceed this size, you should consider using another transport mechanism as gRPC isn't designed for heavy payloads.\",\n-                                \"displayName\": \"Max Message Size\",\n+                                \"defaultValue\": \"ZIP\",\n+                                \"description\": \"Compression Algorithm for signing\",\n+                                \"displayName\": \"Compression Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Message Size\",\n-                                \"required\": false,\n+                                \"name\": \"compression-algorithm\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Penalize on \\\"No Retry\\\"\": {\n+                            \"file-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"BINARY\",\n+                                        \"value\": \"BINARY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this property will penalize FlowFiles that are routed to the \\\"No Retry\\\" relationship.\",\n-                                \"displayName\": \"Penalize on \\\"No Retry\\\"\",\n+                                \"defaultValue\": \"BINARY\",\n+                                \"description\": \"File Encoding for signing\",\n+                                \"displayName\": \"File Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Penalize on \\\"No Retry\\\"\",\n-                                \"required\": false,\n+                                \"name\": \"file-encoding\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote gRPC service hostname\": {\n-                                \"description\": \"Remote host which will be connected to\",\n-                                \"displayName\": \"Remote gRPC service hostname\",\n+                            \"hash-algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"SHA256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"SHA384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"SHA512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SHA512\",\n+                                \"description\": \"Hash Algorithm for signing\",\n+                                \"displayName\": \"Hash Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote gRPC service hostname\",\n+                                \"name\": \"hash-algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote gRPC service port\": {\n-                                \"description\": \"Remote port which will be connected to\",\n-                                \"displayName\": \"Remote gRPC service port\",\n+                            \"private-key-id\": {\n+                                \"description\": \"PGP Private Key Identifier formatted as uppercase hexadecimal string of 16 characters used for signing\",\n+                                \"displayName\": \"Private Key ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote gRPC service port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"private-key-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Use TLS\",\n-                                        \"propertyName\": \"Use SSL/TLS\"\n-                                    }\n-                                ],\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS (https) connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"private-key-service\": {\n+                                \"description\": \"PGP Private Key Service for generating content signatures\",\n+                                \"displayName\": \"Private Key Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"private-key-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Send FlowFile Content\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to include the FlowFile content in the FlowFileRequest to the gRPC service.\",\n-                                \"displayName\": \"Send FlowFile Content\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send FlowFile Content\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Use SSL/TLS\": {\n+                            \"signing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Produce signed content packaged as an OpenPGP message\",\n+                                        \"displayName\": \"SIGNED\",\n+                                        \"value\": \"SIGNED\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Produce detached signature based on associated content packaged according to OpenPGP encoding\",\n+                                        \"displayName\": \"DETACHED\",\n+                                        \"value\": \"DETACHED\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not to use TLS to send the contents of the gRPC messages.\",\n-                                \"displayName\": \"Use TLS\",\n+                                \"defaultValue\": \"SIGNED\",\n+                                \"description\": \"Strategy for writing files to success after signing\",\n+                                \"displayName\": \"Signing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use SSL/TLS\",\n-                                \"required\": false,\n+                                \"name\": \"signing-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original FlowFile will be routed upon success. It will have new attributes detailing the success of the request.\",\n-                                \"name\": \"Original\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile will be routed on any type of connection failure, timeout or general exception. It will have new attributes detailing the request.\",\n-                                \"name\": \"Failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile will be routed on any status code that can be retried. It will have new attributes detailing the request.\",\n-                                \"name\": \"Retry\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile will be routed on any status code that should NOT be retried.  It will have new attributes detailing the request.\",\n-                                \"name\": \"No Retry\"\n+                                \"description\": \"Content signing succeeded\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A Response FlowFile will be routed upon success. If the 'Output Response Regardless' property is true then the response will be sent to this relationship regardless of the status code received.\",\n-                                \"name\": \"Response\"\n+                                \"description\": \"Content signing failed\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"client\",\n-                            \"grpc\",\n-                            \"rpc\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\",\n+                            \"Signing\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.grpc.InvokeGRPC\",\n-                        \"typeDescription\": \"Sends FlowFiles, optionally with content, to a configurable remote gRPC service endpoint. The remote gRPC service must abide by the service IDL defined in NiFi.  gRPC isn't intended to carry large payloads,  so this processor should be used only when FlowFile sizes are on the order of megabytes. The default maximum message size is 4MB.\",\n+                        \"type\": \"org.apache.nifi.processors.pgp.SignContentPGP\",\n+                        \"typeDescription\": \"Sign content using OpenPGP Private Keys\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The response code that is returned (0 = ERROR, 1 = SUCCESS, 2 = RETRY)\",\n-                                \"name\": \"invokegrpc.response.code\"\n+                                \"description\": \"Compression Algorithm\",\n+                                \"name\": \"pgp.compression.algorithm\"\n                             },\n                             {\n-                                \"description\": \"The response message that is returned\",\n-                                \"name\": \"invokegrpc.response.body\"\n+                                \"description\": \"Compression Algorithm Identifier\",\n+                                \"name\": \"pgp.compression.algorithm.id\"\n                             },\n                             {\n-                                \"description\": \"The remote gRPC service hostname\",\n-                                \"name\": \"invokegrpc.service.host\"\n+                                \"description\": \"File Encoding\",\n+                                \"name\": \"pgp.file.encoding\"\n                             },\n                             {\n-                                \"description\": \"The remote gRPC service port\",\n-                                \"name\": \"invokegrpc.service.port\"\n+                                \"description\": \"Signature Algorithm including key and hash algorithm names\",\n+                                \"name\": \"pgp.signature.algorithm\"\n                             },\n                             {\n-                                \"description\": \"The Java exception class raised when the processor fails\",\n-                                \"name\": \"invokegrpc.java.exception.class\"\n+                                \"description\": \"Signature Hash Algorithm Identifier\",\n+                                \"name\": \"pgp.signature.hash.algorithm.id\"\n                             },\n                             {\n-                                \"description\": \"The Java exception message raised when the processor fails\",\n-                                \"name\": \"invokegrpc.java.exception.message\"\n+                                \"description\": \"Signature Key Algorithm Identifier\",\n+                                \"name\": \"pgp.signature.key.algorithm.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Public Key Identifier\",\n+                                \"name\": \"pgp.signature.key.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Type Identifier\",\n+                                \"name\": \"pgp.signature.type.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Version Number\",\n+                                \"name\": \"pgp.signature.version\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-grpc-nar\",\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -1835,1161 +893,934 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"No planned alternatives to be offered. Use custom processors instead.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Authorized DN Pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Use TLS\",\n-                                        \"propertyName\": \"Use TLS\"\n-                                    }\n-                                ],\n-                                \"description\": \"A Regular Expression to apply against the Distinguished Name of incoming connections. If the Pattern does not match the DN, the connection will be refused. The property will only be used if client certificate authentication (Mutual TLS) has been configured on SSL Context Service, otherwise it will be ignored.\",\n-                                \"displayName\": \"Authorized DN Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Authorized DN Pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Flow Control Window\": {\n-                                \"defaultValue\": \"1MB\",\n-                                \"description\": \"The initial HTTP/2 flow control window for both new streams and overall connection. Flow-control schemes ensure that streams on the same connection do not destructively interfere with each other. The default is 1MB.\",\n-                                \"displayName\": \"Flow Control Window\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Flow Control Window\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Local gRPC service port\": {\n-                                \"description\": \"The local port that the gRPC service will listen on.\",\n-                                \"displayName\": \"Local gRPC Service Port\",\n+                            \"public-key-service\": {\n+                                \"description\": \"PGP Public Key Service for verifying signatures with Public Key Encryption\",\n+                                \"displayName\": \"Public Key Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Local gRPC service port\",\n+                                \"name\": \"public-key-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Message Size\": {\n-                                \"defaultValue\": \"4MB\",\n-                                \"description\": \"The maximum size of FlowFiles that this processor will allow to be received. The default is 4MB. If FlowFiles exceed this size, you should consider using another transport mechanism as gRPC isn't designed for heavy payloads.\",\n-                                \"displayName\": \"Maximum Message Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Message Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Use TLS\",\n-                                        \"propertyName\": \"Use TLS\"\n-                                    }\n-                                ],\n-                                \"description\": \"The SSL Context Service used to provide server certificate information for TLS (https) connections. Keystore must be configured on the service. If truststore is also configured, it will turn on and require client certificate authentication (Mutual TLS).\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"Use TLS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not to use TLS to receive the contents of the gRPC messages.\",\n-                                \"displayName\": \"Use TLS\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use TLS\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.SignContentPGP\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The FlowFile was received successfully.\",\n-                                \"name\": \"Success\"\n+                                \"description\": \"Signature Verification Succeeded\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Verification Failed\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"grpc\",\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"rpc\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\",\n+                            \"Signing\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.grpc.ListenGRPC\",\n-                        \"typeDescription\": \"Starts a gRPC server and listens on the given port to transform the incoming messages into FlowFiles. The message format is defined by the standard gRPC protobuf IDL provided by NiFi. gRPC isn't intended to carry large payloads, so this processor should be used only when FlowFile sizes are on the order of megabytes. The default maximum message size is 4MB.\",\n+                        \"type\": \"org.apache.nifi.processors.pgp.VerifyContentPGP\",\n+                        \"typeDescription\": \"Verify signatures using OpenPGP Public Keys\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The DN of the user who sent the FlowFile to this NiFi\",\n-                                \"name\": \"listengrpc.remote.user.dn\"\n+                                \"description\": \"Filename from Literal Data\",\n+                                \"name\": \"pgp.literal.data.filename\"\n                             },\n                             {\n-                                \"description\": \"The IP of the client who sent the FlowFile to this NiFi\",\n-                                \"name\": \"listengrpc.remote.host\"\n+                                \"description\": \"Modified Date Time from Literal Data in milliseconds\",\n+                                \"name\": \"pgp.literal.data.modified\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Creation Time in milliseconds\",\n+                                \"name\": \"pgp.signature.created\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Algorithm including key and hash algorithm names\",\n+                                \"name\": \"pgp.signature.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Hash Algorithm Identifier\",\n+                                \"name\": \"pgp.signature.hash.algorithm.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Key Algorithm Identifier\",\n+                                \"name\": \"pgp.signature.key.algorithm.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Public Key Identifier\",\n+                                \"name\": \"pgp.signature.key.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Type Identifier\",\n+                                \"name\": \"pgp.signature.type.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Version Number\",\n+                                \"name\": \"pgp.signature.version\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-jetty-bundle\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-oauth2-provider-nar\",\n+            \"artifact\": \"nifi-cassandra-services-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-oauth2-provider-nar\",\n+                        \"artifact\": \"nifi-cassandra-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.oauth2.StandardOauth2AccessTokenProvider\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n+                        \"deprecationReason\": \"DataStax 3 driver for Cassandra is no longer the current version and requires new components.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"oauth2-access-token-url\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"The full endpoint of the URL where access tokens are handled.\",\n-                                \"displayName\": \"Access Token Url\",\n+                            \"cassandra-dmc-key-field-name\": {\n+                                \"description\": \"The name of the field that acts as the unique key. (The CQL type should be \\\"blob\\\")\",\n+                                \"displayName\": \"Key Field Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"oauth2-access-token-url\",\n+                                \"name\": \"cassandra-dmc-key-field-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"oauth2-ssl-context\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"SSL Context\",\n+                            \"cassandra-dmc-session-provider\": {\n+                                \"description\": \"The client service that will configure the cassandra client connection.\",\n+                                \"displayName\": \"Session Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-ssl-context\",\n-                                \"required\": false,\n+                                \"name\": \"cassandra-dmc-session-provider\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"cassandra-dmc-table-name\": {\n+                                \"description\": \"The name of the table where the cache will be stored.\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cassandra-dmc-table-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cassandra-dmc-ttl\": {\n+                                \"description\": \"If configured, this will set a TTL (Time to Live) for each row inserted into the table so that old cache items expire after a certain period of time.\",\n+                                \"displayName\": \"TTL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cassandra-dmc-ttl\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cassandra-dmc-value-field-name\": {\n+                                \"description\": \"The name of the field that will store the value. (The CQL type should be \\\"blob\\\")\",\n+                                \"displayName\": \"Value Field Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cassandra-dmc-value-field-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.oauth2.OAuth2TokenProvider\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"authorization\",\n-                            \"oauth2\",\n-                            \"provider\"\n+                            \"cache\",\n+                            \"cassandra\",\n+                            \"distributed\",\n+                            \"map\"\n                         ],\n-                        \"type\": \"org.apache.nifi.oauth2.OAuth2TokenProviderImpl\",\n-                        \"typeDescription\": \"This controller service provides a way of working with access and refresh tokens via the password and client_credential grant flows in the OAuth2 specification. It is meant to provide a way for components to get a token from an oauth2 provider and pass that token as a part of a header to another service.\",\n+                        \"type\": \"org.apache.nifi.controller.cassandra.CassandraDistributedMapCache\",\n+                        \"typeDescription\": \"Provides a DistributedMapCache client that is based on Apache Cassandra.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-oauth2-provider-nar\",\n+                        \"artifact\": \"nifi-cassandra-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"DataStax 3 driver for Cassandra is no longer the current version and requires new components.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"HTTP Protocols\": {\n+                            \"Cassandra Contact Points\": {\n+                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n+                                \"displayName\": \"Cassandra Contact Points\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Cassandra Contact Points\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client Auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"HTTP/1.1\",\n-                                        \"displayName\": \"http/1.1\",\n-                                        \"value\": \"HTTP_1_1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n-                                        \"displayName\": \"h2 http/1.1\",\n-                                        \"value\": \"H2_HTTP_1_1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n                                     },\n                                     {\n-                                        \"description\": \"HTTP/2\",\n-                                        \"displayName\": \"h2\",\n-                                        \"value\": \"H2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"H2_HTTP_1_1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"ssl-context-service\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n-                                \"displayName\": \"HTTP Protocols\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Protocols\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"audience\": {\n-                                \"description\": \"Audience for the access token request defined in RFC 8693 Section 2.1\",\n-                                \"displayName\": \"Audience\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"audience\",\n+                                \"name\": \"Client Auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"authorization-server-url\": {\n-                                \"description\": \"The URL of the authorization server that issues access tokens.\",\n-                                \"displayName\": \"Authorization Server URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"authorization-server-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"client-authentication-strategy\": {\n+                            \"Compression Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Send client authentication in request body. RFC 6749 Section 2.3.1 recommends Basic Authentication instead of request body.\",\n-                                        \"displayName\": \"REQUEST_BODY\",\n-                                        \"value\": \"REQUEST_BODY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"Send client authentication using HTTP Basic authentication.\",\n-                                        \"displayName\": \"BASIC_AUTHENTICATION\",\n-                                        \"value\": \"BASIC_AUTHENTICATION\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUEST_BODY\",\n-                                \"description\": \"Strategy for authenticating the client against the OAuth2 token provider service.\",\n-                                \"displayName\": \"Client Authentication Strategy\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Enable compression at transport-level requests and responses\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-authentication-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"client-id\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Client ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"client-id\",\n+                                \"name\": \"Compression Type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"client-secret\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Client ID\",\n-                                        \"propertyName\": \"client-id\"\n-                                    }\n-                                ],\n-                                \"description\": \"\",\n-                                \"displayName\": \"Client secret\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-secret\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"grant-type\": {\n+                            \"Consistency Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Resource Owner Password Credentials Grant. Used to access resources available to users. Requires username and password and usually Client ID and Client Secret.\",\n-                                        \"displayName\": \"User Password\",\n-                                        \"value\": \"password\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ANY\",\n+                                        \"value\": \"ANY\"\n                                     },\n                                     {\n-                                        \"description\": \"Client Credentials Grant. Used to access resources available to clients. Requires Client ID and Client Secret.\",\n-                                        \"displayName\": \"Client Credentials\",\n-                                        \"value\": \"client_credentials\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ONE\",\n+                                        \"value\": \"ONE\"\n                                     },\n                                     {\n-                                        \"description\": \"Refresh Token Grant. Used to get fresh access tokens based on a previously acquired refresh token. Requires Client ID and Client Secret (apart from Refresh Token).\",\n-                                        \"displayName\": \"Refresh Token\",\n-                                        \"value\": \"refresh_token\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TWO\",\n+                                        \"value\": \"TWO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"THREE\",\n+                                        \"value\": \"THREE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"QUORUM\",\n+                                        \"value\": \"QUORUM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ALL\",\n+                                        \"value\": \"ALL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_QUORUM\",\n+                                        \"value\": \"LOCAL_QUORUM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EACH_QUORUM\",\n+                                        \"value\": \"EACH_QUORUM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SERIAL\",\n+                                        \"value\": \"SERIAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_SERIAL\",\n+                                        \"value\": \"LOCAL_SERIAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_ONE\",\n+                                        \"value\": \"LOCAL_ONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"password\",\n-                                \"description\": \"The OAuth2 Grant Type to be used when acquiring an access token.\",\n-                                \"displayName\": \"Grant Type\",\n+                                \"defaultValue\": \"ONE\",\n+                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n+                                \"displayName\": \"Consistency Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"grant-type\",\n+                                \"name\": \"Consistency Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"refresh-token\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"refresh_token\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Grant Type\",\n-                                        \"propertyName\": \"grant-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Refresh Token.\",\n-                                \"displayName\": \"Refresh Token\",\n+                            \"Keyspace\": {\n+                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor supports the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n+                                \"displayName\": \"Keyspace\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"refresh-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"refresh-window\": {\n-                                \"defaultValue\": \"0 s\",\n-                                \"description\": \"The service will attempt to refresh tokens expiring within the refresh window, subtracting the configured duration from the token expiration.\",\n-                                \"displayName\": \"Refresh Window\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"refresh-window\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"resource\": {\n-                                \"description\": \"Resource URI for the access token request defined in RFC 8707 Section 2\",\n-                                \"displayName\": \"Resource\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"resource\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"scope\": {\n-                                \"description\": \"Space-delimited, case-sensitive list of scopes of the access request (as per the OAuth 2.0 specification)\",\n-                                \"displayName\": \"Scope\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"scope\",\n+                                \"name\": \"Keyspace\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"service-password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"password\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Grant Type\",\n-                                        \"propertyName\": \"grant-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password for the username on the service that is being accessed.\",\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Cassandra cluster\",\n                                 \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"service-user-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"password\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Grant Type\",\n-                                        \"propertyName\": \"grant-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username on the service that is being accessed.\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"service-user-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"access token\",\n-                            \"authorization\",\n-                            \"http\",\n-                            \"oauth2\",\n-                            \"provider\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.oauth2.StandardOauth2AccessTokenProvider\",\n-                        \"typeDescription\": \"Provides OAuth 2.0 access tokens that can be used as Bearer authorization header in HTTP requests. Can use either Resource Owner Password Credentials Grant or Client Credentials Grant. Client authentication can be done with either HTTP Basic authentication or in the request body.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-groovyx-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-groovyx-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value. Use `CTL.` to access any controller services, `SQL.` to access any DBCPServices, `RecordReader.` to access RecordReaderFactory instances, or `RecordWriter.` to access any RecordSetWriterFactory instances.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A script engine property to update\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"groovyx-additional-classpath\": {\n-                                \"description\": \"Classpath list separated by semicolon or comma. You can use masks like `*`, `*.jar` in file name.\",\n-                                \"displayName\": \"Additional classpath\",\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Cassandra cluster\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"groovyx-additional-classpath\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"groovyx-failure-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"rollback\",\n-                                        \"value\": \"rollback\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"transfer to failure\",\n-                                        \"value\": \"transfer to failure\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"rollback\",\n-                                \"description\": \"What to do with unhandled exceptions. If you want to manage exception by code then keep the default value `rollback`. If `transfer to failure` selected and unhandled exception occurred then all flowFiles received from incoming queues in this session will be transferred to `failure` relationship with additional attributes set: ERROR_MESSAGE and ERROR_STACKTRACE. If `rollback` selected and unhandled exception occurred then all flowFiles received from incoming queues will be penalized and returned. If the processor has no incoming connections then this parameter has no effect.\",\n-                                \"displayName\": \"Failure strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"groovyx-failure-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"groovyx-script-body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"connect-timeout-ms\": {\n+                                \"description\": \"Connection timeout (in milliseconds). 0 means no timeout. If no value is set, the underlying default will be used.\",\n+                                \"displayName\": \"Connect Timout (ms)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"groovyx-script-body\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"connect-timeout-ms\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"groovyx-script-file\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"read-timeout-ms\": {\n+                                \"description\": \"Read timeout (in milliseconds). 0 means no timeout. If no value is set, the underlying default will be used.\",\n+                                \"displayName\": \"Read Timout (ms)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"groovyx-script-file\",\n+                                \"name\": \"read-timeout-ms\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ExecuteScript\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that were successfully processed\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles that failed to be processed\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-cassandra-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"groovyx\",\n-                            \"script\"\n+                            \"cassandra\",\n+                            \"connection\",\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"pooling\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.groovyx.ExecuteGroovyScript\",\n-                        \"typeDescription\": \"Experimental Extended Groovy script processor. The script is responsible for handling the incoming flow file (transfer to SUCCESS or remove, e.g.) as well as any flow files created by the script. If the handling is incomplete or incorrect, the session will be rolled back.\",\n+                        \"type\": \"org.apache.nifi.service.CassandraSessionProvider\",\n+                        \"typeDescription\": \"Provides connection session for Cassandra processors to work with Apache Cassandra.\",\n                         \"version\": \"1.27.0\"\n                     }\n                 ],\n+                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-couchbase-nar\",\n+            \"artifact\": \"nifi-couchbase-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-prometheus-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-couchbase-nar\",\n+                        \"artifact\": \"nifi-prometheus-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"This component is deprecated and will be removed in NiFi 2.x.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Specify bucket password if necessary. Couchbase Server 5.0 or later should use 'User Name' and 'User Password' instead.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Bucket Password for BUCKET_NAME\",\n-                                \"value\": \"bucket password\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Connection String\": {\n-                                \"description\": \"The hostnames or ip addresses of the bootstraping nodes and optional parameters. Syntax) couchbase://node1,node2,nodeN?param1=value1&param2=value2&paramN=valueN\",\n-                                \"displayName\": \"Connection String\",\n+                            \"prometheus-reporting-task-client-auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ReportingTask will not authenticate clients. Anyone can communicate with this ReportingTask anonymously\",\n+                                        \"displayName\": \"No Authentication\",\n+                                        \"value\": \"No Authentication\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ReportingTask will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n+                                        \"displayName\": \"Want Authentication\",\n+                                        \"value\": \"Want Authentication\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ReportingTask will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n+                                        \"displayName\": \"Need Authentication\",\n+                                        \"value\": \"Need Authentication\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"No Authentication\",\n+                                \"description\": \"Specifies whether or not the Reporting Task should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n+                                \"displayName\": \"Client Authentication\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Connection String\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"prometheus-reporting-task-client-auth\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"user-name\": {\n-                                \"description\": \"The user name to authenticate NiFi as a Couchbase client. This configuration can be used against Couchbase Server 5.0 or later supporting Roll-Based Access Control.\",\n-                                \"displayName\": \"User Name\",\n+                            \"prometheus-reporting-task-instance-id\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Prometheus\",\n+                                \"displayName\": \"Instance ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"user-name\",\n-                                \"required\": false,\n+                                \"name\": \"prometheus-reporting-task-instance-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"user-password\": {\n-                                \"description\": \"The user password to authenticate NiFi as a Couchbase client. This configuration can be used against Couchbase Server 5.0 or later supporting Roll-Based Access Control.\",\n-                                \"displayName\": \"User Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"user-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-couchbase-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"connection\",\n-                            \"couchbase\",\n-                            \"database\",\n-                            \"nosql\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterService\",\n-                        \"typeDescription\": \"Provides a centralized Couchbase connection and bucket passwords management. Bucket passwords can be specified via dynamic properties.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-couchbase-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"This component is deprecated and will be removed in NiFi 2.x.\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"bucket-name\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"The name of bucket to access.\",\n-                                \"displayName\": \"Bucket Name\",\n+                            \"prometheus-reporting-task-metrics-endpoint-port\": {\n+                                \"defaultValue\": \"9092\",\n+                                \"description\": \"The Port where prometheus metrics can be accessed\",\n+                                \"displayName\": \"Prometheus Metrics Endpoint Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bucket-name\",\n+                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cluster-controller-service\": {\n-                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n-                                \"displayName\": \"Couchbase Cluster Controller Service\",\n+                            \"prometheus-reporting-task-ssl-context\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server willaccept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cluster-controller-service\",\n-                                \"required\": true,\n+                                \"name\": \"prometheus-reporting-task-ssl-context\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"lookup-sub-doc-path\": {\n-                                \"description\": \"The Sub-Document lookup path within the target JSON document.\",\n-                                \"displayName\": \"Lookup Sub-Document Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"lookup-sub-doc-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.27.0\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"couchbase\",\n-                            \"enrich\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"value\"\n+                            \"prometheus\",\n+                            \"record\",\n+                            \"send\",\n+                            \"write\"\n                         ],\n-                        \"type\": \"org.apache.nifi.couchbase.CouchbaseKeyValueLookupService\",\n-                        \"typeDescription\": \"Lookup a string value from Couchbase Server associated with the specified key. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                        \"type\": \"org.apache.nifi.reporting.prometheus.PrometheusRecordSink\",\n+                        \"typeDescription\": \"Specifies a Record Sink Service that exposes data points to a Prometheus scraping service. Numeric fields are exposed as Gauges, String fields are the label values for the gauges, and all other fields are ignored.\",\n                         \"version\": \"1.27.0\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-couchbase-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-prometheus-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"This component is deprecated and will be removed in NiFi 2.x.\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"60 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"bucket-name\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"The name of bucket to access.\",\n-                                \"displayName\": \"Bucket Name\",\n+                            \"prometheus-reporting-task-client-auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ReportingTask will not authenticate clients. Anyone can communicate with this ReportingTask anonymously\",\n+                                        \"displayName\": \"No Authentication\",\n+                                        \"value\": \"No Authentication\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ReportingTask will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n+                                        \"displayName\": \"Want Authentication\",\n+                                        \"value\": \"Want Authentication\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ReportingTask will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n+                                        \"displayName\": \"Need Authentication\",\n+                                        \"value\": \"Need Authentication\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"No Authentication\",\n+                                \"description\": \"Specifies whether or not the Reporting Task should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n+                                \"displayName\": \"Client Authentication\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bucket-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"prometheus-reporting-task-client-auth\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cluster-controller-service\": {\n-                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n-                                \"displayName\": \"Couchbase Cluster Controller Service\",\n+                            \"prometheus-reporting-task-instance-id\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Prometheus\",\n+                                \"displayName\": \"Instance ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cluster-controller-service\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"prometheus-reporting-task-instance-id\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                \"version\": \"1.27.0\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"cluster\",\n-                            \"couchbase\",\n-                            \"distributed\",\n-                            \"map\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.couchbase.CouchbaseMapCacheClient\",\n-                        \"typeDescription\": \"Provides the ability to communicate with a Couchbase Server cluster as a DistributedMapCacheServer. This can be used in order to share a Map between nodes in a NiFi cluster. Couchbase Server cluster can provide a high available and persistent cache storage.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-couchbase-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"This component is deprecated and will be removed in NiFi 2.x.\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"bucket-name\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"The name of bucket to access.\",\n-                                \"displayName\": \"Bucket Name\",\n+                            \"prometheus-reporting-task-metrics-endpoint-port\": {\n+                                \"defaultValue\": \"9092\",\n+                                \"description\": \"The Port where prometheus metrics can be accessed\",\n+                                \"displayName\": \"Prometheus Metrics Endpoint Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bucket-name\",\n+                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cluster-controller-service\": {\n-                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n-                                \"displayName\": \"Couchbase Cluster Controller Service\",\n+                            \"prometheus-reporting-task-metrics-send-jvm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Send JVM metrics in addition to the NiFi metrics\",\n+                                \"displayName\": \"Send JVM metrics\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cluster-controller-service\",\n+                                \"name\": \"prometheus-reporting-task-metrics-send-jvm\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"document-type\": {\n+                            \"prometheus-reporting-task-metrics-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Json\",\n-                                        \"value\": \"Json\"\n+                                        \"description\": \"Send rollup metrics for the entire root process group\",\n+                                        \"displayName\": \"Root Process Group\",\n+                                        \"value\": \"Root Process Group\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"description\": \"Send metrics for each process group\",\n+                                        \"displayName\": \"All Process Groups\",\n+                                        \"value\": \"All Process Groups\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Send metrics for each component in the system, to include processors, connections, controller services, etc.\",\n+                                        \"displayName\": \"All Components\",\n+                                        \"value\": \"All Components\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Json\",\n-                                \"description\": \"The type of contents.\",\n-                                \"displayName\": \"Document Type\",\n+                                \"defaultValue\": \"All Components\",\n+                                \"description\": \"The granularity on which to report metrics. Options include only the root process group, all process groups, or all components\",\n+                                \"displayName\": \"Metrics Reporting Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"document-type\",\n+                                \"name\": \"prometheus-reporting-task-metrics-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for parsing fetched document from Couchbase Server.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"prometheus-reporting-task-ssl-context\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server willaccept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"prometheus-reporting-task-ssl-context\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"couchbase\",\n-                            \"enrich\",\n-                            \"lookup\"\n+                            \"metrics\",\n+                            \"prometheus\",\n+                            \"reporting\",\n+                            \"time series data\"\n                         ],\n-                        \"type\": \"org.apache.nifi.couchbase.CouchbaseRecordLookupService\",\n-                        \"typeDescription\": \"Lookup a record from Couchbase Server associated with the specified key. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                        \"type\": \"org.apache.nifi.reporting.prometheus.PrometheusReportingTask\",\n+                        \"typeDescription\": \"Reports metrics in Prometheus format by creating a /metrics HTTP(S) endpoint which can be used for external monitoring of the application. The reporting task reports a set of metrics regarding the JVM (optional) and the NiFi instance. Note that if the underlying Jetty server (i.e. the Prometheus endpoint) cannot be started (for example if two PrometheusReportingTask instances are started on the same port), this may cause a delay in shutting down NiFi while it waits for the server resources to be cleaned up.\",\n                         \"version\": \"1.27.0\"\n                     }\n-                ],\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-zendesk-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-couchbase-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-zendesk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"This component is deprecated and will be removed in NiFi 2.x.\",\n+                        \"defaultYieldDuration\": \"20 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"bucket-name\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"The name of bucket to access.\",\n-                                \"displayName\": \"Bucket Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bucket-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"cluster-controller-service\": {\n-                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n-                                \"displayName\": \"Couchbase Cluster Controller Service\",\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations.\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cluster-controller-service\",\n+                                \"name\": \"web-client-service-provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"document-id\": {\n-                                \"description\": \"A static, fixed Couchbase document id, or an expression to construct the Couchbase document id.\",\n-                                \"displayName\": \"Document Id\",\n+                            \"zendesk-authentication-type-name\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Password of Zendesk login user.\",\n+                                        \"displayName\": \"Password\",\n+                                        \"value\": \"password\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n+                                        \"displayName\": \"Token\",\n+                                        \"value\": \"token\"\n+                                    }\n+                                ],\n+                                \"description\": \"Type of authentication to Zendesk API.\",\n+                                \"displayName\": \"Authentication Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"zendesk-authentication-type-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"zendesk-authentication-value-name\": {\n+                                \"description\": \"Password or authentication token for Zendesk login user.\",\n+                                \"displayName\": \"Authentication Credential\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"document-id\",\n-                                \"required\": false,\n+                                \"name\": \"zendesk-authentication-value-name\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"zendesk-export-method\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"In cursor-based incremental exports, each page of results includes an \\\"after\\\" cursor pointer to use as the starting cursor for the next page of results.\",\n+                                        \"displayName\": \"Cursor Based\",\n+                                        \"value\": \"cursor\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In time-based incremental exports, each page of results includes an end time to use as the start time for the next page of results.\",\n+                                        \"displayName\": \"Time Based\",\n+                                        \"value\": \"time\"\n+                                    }\n+                                ],\n+                                \"description\": \"Method for incremental export.\",\n+                                \"displayName\": \"Export Method\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"zendesk-export-method\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"document-type\": {\n+                            \"zendesk-query-start-timestamp\": {\n+                                \"description\": \"Initial timestamp to query Zendesk API from in Unix timestamp seconds format.\",\n+                                \"displayName\": \"Query Start Timestamp\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-query-start-timestamp\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"zendesk-resource\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Json\",\n-                                        \"value\": \"Json\"\n+                                        \"description\": \"Tickets are the means through which end users (customers) communicate with agents in Zendesk Support.\",\n+                                        \"displayName\": \"Tickets\",\n+                                        \"value\": \"/api/v2/incremental/tickets\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"description\": \"Stream of changes that occurred on tickets. Each event is tied to an update on a ticket and contains all the fields that were updated in that change.\",\n+                                        \"displayName\": \"Ticket Events\",\n+                                        \"value\": \"/api/v2/incremental/ticket_events\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Ticket metric events API can be used to track reply times, agent work times, and requester wait times.\",\n+                                        \"displayName\": \"Ticket Metric Events\",\n+                                        \"value\": \"/api/v2/incremental/ticket_metric_events\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Zendesk Support has three types of users: end users (customers), agents, and administrators.\",\n+                                        \"displayName\": \"Users\",\n+                                        \"value\": \"/api/v2/incremental/users\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Just as agents can be segmented into groups in Zendesk Support, customers (end-users) can be segmented into organizations.\",\n+                                        \"displayName\": \"Organizations\",\n+                                        \"value\": \"/api/v2/incremental/organizations\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Articles are content items such as help topics or tech notes contained in sections.\",\n+                                        \"displayName\": \"Articles\",\n+                                        \"value\": \"/api/v2/help_center/incremental/articles\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When a recipient responds to an NPS survey, their rating, comment, and last survey date are captured.\",\n+                                        \"displayName\": \"NPS - Responses\",\n+                                        \"value\": \"/api/v2/nps/incremental/responses\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Every NPS survey is delivered to one or multiple recipients. For most businesses that use Zendesk Support, the recipients are customers. Agents and admins will never receive surveys.\",\n+                                        \"displayName\": \"NPS - Recipients\",\n+                                        \"value\": \"/api/v2/nps/incremental/recipients\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Json\",\n-                                \"description\": \"The type of contents.\",\n-                                \"displayName\": \"Document Type\",\n+                                \"description\": \"The particular Zendesk resource which is meant to be exported.\",\n+                                \"displayName\": \"Resource\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"document-type\",\n+                                \"name\": \"zendesk-resource\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-to-attribute\": {\n-                                \"description\": \"If set, the retrieved value will be put into an attribute of the FlowFile instead of a the content of the FlowFile. The attribute key to put to is determined by evaluating value of this property.\",\n-                                \"displayName\": \"Put Value to Attribute\",\n+                            \"zendesk-subdomain\": {\n+                                \"description\": \"Name of the Zendesk subdomain.\",\n+                                \"displayName\": \"Subdomain Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-to-attribute\",\n-                                \"required\": false,\n+                                \"name\": \"zendesk-subdomain\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"zendesk-user\": {\n+                                \"description\": \"Login user to Zendesk subdomain.\",\n+                                \"displayName\": \"User Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-user\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Paging cursor for Zendesk API is stored. Cursor is updated after each successful request.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles failed to fetch from Couchbase Server but can be retried are routed to this relationship.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"Values retrieved from Couchbase Server are written as outgoing FlowFiles content or put into an attribute of the incoming FlowFile and routed to this relationship.\",\n+                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles failed to fetch from Couchbase Server and not retry-able are routed to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original input FlowFile is routed to this relationship when the value is retrieved from Couchbase Server and routed to 'success'.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"couchbase\",\n-                            \"database\",\n-                            \"get\",\n-                            \"nosql\"\n+                            \"zendesk\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.couchbase.GetCouchbaseKey\",\n-                        \"typeDescription\": \"Get a document from Couchbase Server via Key/Value access. The ID of the document to fetch may be supplied by setting the <Document Id> property. NOTE: if the Document Id property is not set, the contents of the FlowFile will be read to determine the Document Id, which means that the contents of the entire FlowFile will be buffered in memory.\",\n+                        \"type\": \"org.apache.nifi.processors.zendesk.GetZendesk\",\n+                        \"typeDescription\": \"Incrementally fetches data from Zendesk API.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Cluster where the document was retrieved from.\",\n-                                \"name\": \"couchbase.cluster\"\n-                            },\n-                            {\n-                                \"description\": \"Bucket where the document was retrieved from.\",\n-                                \"name\": \"couchbase.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"Id of the document.\",\n-                                \"name\": \"couchbase.doc.id\"\n-                            },\n-                            {\n-                                \"description\": \"CAS of the document.\",\n-                                \"name\": \"couchbase.doc.cas\"\n-                            },\n-                            {\n-                                \"description\": \"Expiration of the document.\",\n-                                \"name\": \"couchbase.doc.expiry\"\n-                            },\n-                            {\n-                                \"description\": \"If Couchbase related error occurs the CouchbaseException class name will be captured here.\",\n-                                \"name\": \"couchbase.exception\"\n+                                \"description\": \"The number of records fetched by the processor.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-couchbase-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-zendesk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -2997,716 +1828,655 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"This component is deprecated and will be removed in NiFi 2.x.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Additional property to be added to the Zendesk request object.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The path in the request object to add. The value needs be a valid JsonPointer.\",\n+                                \"value\": \"The path in the incoming record to get the value from.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"bucket-name\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"The name of bucket to access.\",\n-                                \"displayName\": \"Bucket Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bucket-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"cluster-controller-service\": {\n-                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n-                                \"displayName\": \"Couchbase Cluster Controller Service\",\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations.\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cluster-controller-service\",\n+                                \"name\": \"web-client-service-provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"document-id\": {\n-                                \"description\": \"A static, fixed Couchbase document id, or an expression to construct the Couchbase document id.\",\n-                                \"displayName\": \"Document Id\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"document-id\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"document-type\": {\n+                            \"zendesk-authentication-type-name\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Json\",\n-                                        \"value\": \"Json\"\n+                                        \"description\": \"Password of Zendesk login user.\",\n+                                        \"displayName\": \"Password\",\n+                                        \"value\": \"password\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n+                                        \"displayName\": \"Token\",\n+                                        \"value\": \"token\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Json\",\n-                                \"description\": \"The type of contents.\",\n-                                \"displayName\": \"Document Type\",\n+                                \"description\": \"Type of authentication to Zendesk API.\",\n+                                \"displayName\": \"Authentication Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"document-type\",\n+                                \"name\": \"zendesk-authentication-type-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"persist-to\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MASTER\",\n-                                        \"value\": \"MASTER\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ONE\",\n-                                        \"value\": \"ONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TWO\",\n-                                        \"value\": \"TWO\"\n-                                    },\n+                            \"zendesk-authentication-value-name\": {\n+                                \"description\": \"Password or authentication token for Zendesk login user.\",\n+                                \"displayName\": \"Authentication Credential\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-authentication-value-name\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"zendesk-comment-body\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"THREE\",\n-                                        \"value\": \"THREE\"\n-                                    },\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"zendesk-record-reader\"\n+                                    }\n+                                ],\n+                                \"description\": \"The content or the path to the comment body in the incoming record.\",\n+                                \"displayName\": \"Comment Body\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-comment-body\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"zendesk-priority\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FOUR\",\n-                                        \"value\": \"FOUR\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"zendesk-record-reader\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Durability constraint about disk persistence.\",\n-                                \"displayName\": \"Persist To\",\n+                                \"description\": \"The content or the path to the priority in the incoming record.\",\n+                                \"displayName\": \"Priority\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-priority\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"zendesk-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"persist-to\",\n+                                \"name\": \"zendesk-record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"zendesk-subdomain\": {\n+                                \"description\": \"Name of the Zendesk subdomain.\",\n+                                \"displayName\": \"Subdomain Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-subdomain\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"replicate-to\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ONE\",\n-                                        \"value\": \"ONE\"\n-                                    },\n+                            \"zendesk-subject\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TWO\",\n-                                        \"value\": \"TWO\"\n-                                    },\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"zendesk-record-reader\"\n+                                    }\n+                                ],\n+                                \"description\": \"The content or the path to the subject in the incoming record.\",\n+                                \"displayName\": \"Subject\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-subject\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"zendesk-type\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"THREE\",\n-                                        \"value\": \"THREE\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"zendesk-record-reader\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Durability constraint about replication.\",\n-                                \"displayName\": \"Replicate To\",\n+                                \"description\": \"The content or the path to the type in the incoming record.\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"replicate-to\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"zendesk-user\": {\n+                                \"description\": \"Login user to Zendesk subdomain.\",\n+                                \"displayName\": \"User Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-user\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Used as a document id if 'Document Id' is not specified\",\n-                                \"name\": \"uuid\"\n-                            }\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles failed to be written to Couchbase Server but can be retried are routed to this relationship.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that are written to Couchbase Server are routed to this relationship.\",\n+                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles failed to be written to Couchbase Server and not retry-able are routed to this relationship.\",\n+                                \"description\": \"A FlowFile is routed to this relationship if the operation failed and retrying the operation will also fail, such as an invalid data or schema.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"couchbase\",\n-                            \"database\",\n-                            \"nosql\",\n-                            \"put\"\n+                            \"zendesk, ticket\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.couchbase.PutCouchbaseKey\",\n-                        \"typeDescription\": \"Put a document to Couchbase Server via Key/Value access.\",\n+                        \"type\": \"org.apache.nifi.processors.zendesk.PutZendeskTicket\",\n+                        \"typeDescription\": \"Create Zendesk tickets using the Zendesk API.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Cluster where the document was stored.\",\n-                                \"name\": \"couchbase.cluster\"\n-                            },\n-                            {\n-                                \"description\": \"Bucket where the document was stored.\",\n-                                \"name\": \"couchbase.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"Id of the document.\",\n-                                \"name\": \"couchbase.doc.id\"\n-                            },\n-                            {\n-                                \"description\": \"CAS of the document.\",\n-                                \"name\": \"couchbase.doc.cas\"\n+                                \"description\": \"The number of records processed.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"Expiration of the document.\",\n-                                \"name\": \"couchbase.doc.expiry\"\n+                                \"description\": \"The error code of from the response.\",\n+                                \"name\": \"error.code\"\n                             },\n                             {\n-                                \"description\": \"If Couchbase related error occurs the CouchbaseException class name will be captured here.\",\n-                                \"name\": \"couchbase.exception\"\n+                                \"description\": \"The error message of from the response.\",\n+                                \"name\": \"error.message\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-enrich-nar\",\n+            \"artifact\": \"nifi-language-translation-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-enrich-nar\",\n+                        \"artifact\": \"nifi-language-translation-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"User-defined properties are used to translate arbitrary text based on attributes.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of an attribute to set that will contain the translated text of the value\",\n+                                \"value\": \"The value to translate\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Geo Database File\": {\n-                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n-                                \"displayName\": \"MaxMind Database File\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the data to be translated\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Geo Database File\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"IP Address Attribute\": {\n-                                \"description\": \"The name of an attribute whose value is a dotted decimal IP address for which enrichment should occur\",\n-                                \"displayName\": \"IP Address Attribute\",\n+                            \"Input Language\": {\n+                                \"description\": \"The language of incoming data. If no language is set, Yandex will attempt to detect the incoming language automatically.\",\n+                                \"displayName\": \"Input Language\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"IP Address Attribute\",\n-                                \"required\": true,\n+                                \"name\": \"Input Language\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Level\": {\n-                                \"defaultValue\": \"WARN\",\n-                                \"description\": \"The Log Level to use when an IP is not found in the database. Accepted values: INFO, DEBUG, WARN, ERROR.\",\n-                                \"displayName\": \"Log Level\",\n+                            \"Target Language\": {\n+                                \"defaultValue\": \"en\",\n+                                \"description\": \"The language to translate the text into\",\n+                                \"displayName\": \"Target Language\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Log Level\",\n+                                \"name\": \"Target Language\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Translate Content\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the content should be translated. If false, only the text specified by user-defined properties will be translated.\",\n+                                \"displayName\": \"Translate Content\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Translate Content\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Yandex API Key\": {\n+                                \"description\": \"The API Key that is registered with Yandex\",\n+                                \"displayName\": \"Yandex API Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Yandex API Key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Where to route flow files after unsuccessfully enriching attributes because no data was found\",\n-                                \"name\": \"not found\"\n+                                \"description\": \"This relationship is used if the translation cannot be performed for some reason other than communications failure\",\n+                                \"name\": \"translation.failure\"\n                             },\n                             {\n-                                \"description\": \"Where to route flow files after successfully enriching attributes with data provided by database\",\n-                                \"name\": \"found\"\n+                                \"description\": \"This relationship is used when the translation is successful\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"This relationship is used when the translation fails due to a problem such as a network failure, and for which the translation should be attempted again\",\n+                                \"name\": \"comms.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"enrich\",\n-                            \"geo\",\n-                            \"ip\",\n-                            \"maxmind\"\n+                            \"language\",\n+                            \"translate\",\n+                            \"translation\",\n+                            \"yandex\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.GeoEnrichIP\",\n-                        \"typeDescription\": \"Looks up geolocation information for an IP address and adds the geo information to FlowFile attributes. The geo data is provided as a MaxMind database. The attribute that contains the IP address to lookup is provided by the 'IP Address Attribute' property. If the name of the attribute provided is 'X', then the the attributes added by enrichment will take the form X.geo.<fieldName>\",\n+                        \"type\": \"org.apache.nifi.processors.yandex.YandexTranslate\",\n+                        \"typeDescription\": \"Translates content and attributes from one language to another\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of microseconds that the geo lookup took\",\n-                                \"name\": \"X.geo.lookup.micros\"\n-                            },\n-                            {\n-                                \"description\": \"The city identified for the IP address\",\n-                                \"name\": \"X.geo.city\"\n-                            },\n-                            {\n-                                \"description\": \"The accuracy radius if provided by the database (in Kilometers)\",\n-                                \"name\": \"X.geo.accuracy\"\n-                            },\n-                            {\n-                                \"description\": \"The latitude identified for this IP address\",\n-                                \"name\": \"X.geo.latitude\"\n-                            },\n-                            {\n-                                \"description\": \"The longitude identified for this IP address\",\n-                                \"name\": \"X.geo.longitude\"\n-                            },\n-                            {\n-                                \"description\": \"Each subdivision that is identified for this IP address is added with a one-up number appended to the attribute name, starting with 0\",\n-                                \"name\": \"X.geo.subdivision.N\"\n-                            },\n-                            {\n-                                \"description\": \"The ISO code for the subdivision that is identified by X.geo.subdivision.N\",\n-                                \"name\": \"X.geo.subdivision.isocode.N\"\n-                            },\n-                            {\n-                                \"description\": \"The country identified for this IP address\",\n-                                \"name\": \"X.geo.country\"\n-                            },\n-                            {\n-                                \"description\": \"The ISO Code for the country identified\",\n-                                \"name\": \"X.geo.country.isocode\"\n+                                \"description\": \"If the text cannot be translated, this attribute will be set indicating the reason for the failure\",\n+                                \"name\": \"yandex.translate.failure.reason\"\n                             },\n                             {\n-                                \"description\": \"The postal code for the country identified\",\n-                                \"name\": \"X.geo.postalcode\"\n+                                \"description\": \"When the translation succeeds, if the content was translated, this attribute will be set indicating the new language of the content\",\n+                                \"name\": \"language\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-elasticsearch-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-enrich-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.elasticsearch.GetElasticsearch\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A URL query parameter\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Geo Database File\": {\n-                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n-                                \"displayName\": \"MaxMind Database File\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Geo Database File\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Level\": {\n-                                \"defaultValue\": \"WARN\",\n-                                \"description\": \"The Log Level to use when an IP is not found in the database. Accepted values: INFO, DEBUG, WARN, ERROR.\",\n-                                \"displayName\": \"Log Level\",\n+                            \"elasticsearch-http-connect-timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Log Level\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-connect-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-city-record-path\": {\n-                                \"description\": \"Record path for putting the city identified for the IP address\",\n-                                \"displayName\": \"City Record Path\",\n+                            \"elasticsearch-http-proxy-host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-city-record-path\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-proxy-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-country-iso-record-path\": {\n-                                \"description\": \"Record path for putting the ISO Code for the country identified\",\n-                                \"displayName\": \"Country ISO Code Record Path\",\n+                            \"elasticsearch-http-proxy-port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-country-iso-record-path\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-proxy-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-country-postal-record-path\": {\n-                                \"description\": \"Record path for putting the postal code for the country identified\",\n-                                \"displayName\": \"Country Postal Code Record Path\",\n+                            \"elasticsearch-http-response-timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n+                                \"displayName\": \"Response Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-country-postal-record-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-response-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-country-record-path\": {\n-                                \"description\": \"Record path for putting the country identified for this IP address\",\n-                                \"displayName\": \"Country Record Path\",\n+                            \"elasticsearch-http-url\": {\n+                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n+                                \"displayName\": \"Elasticsearch URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-country-record-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-url\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-ip-record-path\": {\n-                                \"description\": \"The record path to retrieve the IP address for doing the lookup.\",\n-                                \"displayName\": \"IP Address Record Path\",\n+                            \"fetch-es-doc-id\": {\n+                                \"description\": \"The identifier of the document to be fetched\",\n+                                \"displayName\": \"Document Identifier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-ip-record-path\",\n+                                \"name\": \"fetch-es-doc-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-latitude-record-path\": {\n-                                \"description\": \"Record path for putting the latitude identified for this IP address\",\n-                                \"displayName\": \"Latitude Record Path\",\n+                            \"fetch-es-fields\": {\n+                                \"description\": \"A comma-separated list of fields to retrieve from the document. If the Fields property is left blank, then the entire document's source will be retrieved.\",\n+                                \"displayName\": \"Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-latitude-record-path\",\n+                                \"name\": \"fetch-es-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-longitude-record-path\": {\n-                                \"description\": \"Record path for putting the longitude identified for this IP address\",\n-                                \"displayName\": \"Longitude Record Path\",\n+                            \"fetch-es-index\": {\n+                                \"description\": \"The name of the index to read from.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-longitude-record-path\",\n+                                \"name\": \"fetch-es-index\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"fetch-es-type\": {\n+                                \"description\": \"The type of document/fetch (if unset, the first document matching the identifier across _all types will be retrieved). This should be unset, '_doc' or '_source' for Elasticsearch 7.0+.\",\n+                                \"displayName\": \"Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"fetch-es-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-record-reader\": {\n-                                \"description\": \"Record reader service to use for reading the flowfile contents.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"geo-enrich-ip-record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"geo-enrich-ip-record-writer\": {\n-                                \"description\": \"Record writer service to use for enriching the flowfile contents.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"proxy-password\": {\n+                                \"description\": \"Proxy Password\",\n+                                \"displayName\": \"Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"geo-enrich-ip-record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"geo-enrich-ip-split-found-not-found\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Separate records that have been enriched from ones that have not. Default behavior is to send everything to the found relationship if even one record is enriched.\",\n-                                \"displayName\": \"Separate Enriched From Not Enriched\",\n+                            \"proxy-username\": {\n+                                \"description\": \"Proxy Username\",\n+                                \"displayName\": \"Proxy Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"geo-enrich-ip-split-found-not-found\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Where to route flow files after unsuccessfully enriching attributes because no data was found\",\n-                                \"name\": \"not found\"\n+                                \"description\": \"A FlowFile is routed to this relationship if the document cannot be fetched but attempting the operation again may succeed. Note that if the processor has no incoming connections, flow files may still be sent to this relationship based on the processor properties and the results of the fetch operation.\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"The original input flowfile goes to this relationship regardless of whether the content was enriched or not.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"All FlowFiles that are read from Elasticsearch are routed to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Where to route flow files after successfully enriching attributes with data provided by database\",\n-                                \"name\": \"found\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"enrich\",\n-                            \"geo\",\n-                            \"ip\",\n-                            \"maxmind\",\n-                            \"record\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.GeoEnrichIPRecord\",\n-                        \"typeDescription\": \"Looks up geolocation information for an IP address and adds the geo information to FlowFile attributes. The geo data is provided as a MaxMind database. This version uses the NiFi Record API to allow large scale enrichment of record-oriented data sets. Each field provided by the MaxMind database can be directed to a field of the user's choosing by providing a record path for that field configuration. \",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-enrich-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Geo Database File\": {\n-                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n-                                \"displayName\": \"MaxMind Database File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Geo Database File\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"IP Address Attribute\": {\n-                                \"description\": \"The name of an attribute whose value is a dotted decimal IP address for which enrichment should occur\",\n-                                \"displayName\": \"IP Address Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"IP Address Attribute\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"description\": \"All FlowFiles that cannot be read from Elasticsearch are routed to this relationship. Note that only incoming flow files will be routed to failure.\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"Log Level\": {\n-                                \"defaultValue\": \"WARN\",\n-                                \"description\": \"The Log Level to use when an IP is not found in the database. Accepted values: INFO, DEBUG, WARN, ERROR.\",\n-                                \"displayName\": \"Log Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Log Level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Where to route flow files after unsuccessfully enriching attributes because no data was found\",\n+                                \"description\": \"A FlowFile is routed to this relationship if the specified document does not exist in the Elasticsearch cluster. Note that if the processor has no incoming connections, flow files may still be sent to this relationship based on the processor properties and the results of the fetch operation.\",\n                                 \"name\": \"not found\"\n-                            },\n-                            {\n-                                \"description\": \"Where to route flow files after successfully enriching attributes with data provided by database\",\n-                                \"name\": \"found\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ISP\",\n-                            \"enrich\",\n-                            \"ip\",\n-                            \"maxmind\"\n+                            \"elasticsearch\",\n+                            \"fetch\",\n+                            \"get\",\n+                            \"http\",\n+                            \"read\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.ISPEnrichIP\",\n-                        \"typeDescription\": \"Looks up ISP information for an IP address and adds the information to FlowFile attributes. The ISP data is provided as a MaxMind ISP database. (Note that this is NOT the same as the GeoLite database utilized by some geo enrichment tools). The attribute that contains the IP address to lookup is provided by the 'IP Address Attribute' property. If the name of the attribute provided is 'X', then the the attributes added by enrichment will take the form X.isp.<fieldName>\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.FetchElasticsearchHttp\",\n+                        \"typeDescription\": \"Retrieves a document from Elasticsearch using the specified connection properties and the identifier of the document to retrieve. Note that the full body of the document will be read into memory before being written to a Flow File for transfer.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of microseconds that the geo lookup took\",\n-                                \"name\": \"X.isp.lookup.micros\"\n-                            },\n-                            {\n-                                \"description\": \"The Autonomous System Number (ASN) identified for the IP address\",\n-                                \"name\": \"X.isp.asn\"\n-                            },\n-                            {\n-                                \"description\": \"The Organization Associated with the ASN identified\",\n-                                \"name\": \"X.isp.asn.organization\"\n+                                \"description\": \"The filename attribute is set to the document identifier\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The name of the ISP associated with the IP address provided\",\n-                                \"name\": \"X.isp.name\"\n+                                \"description\": \"The Elasticsearch index containing the document\",\n+                                \"name\": \"es.index\"\n                             },\n                             {\n-                                \"description\": \"The Organization associated with the IP address provided\",\n-                                \"name\": \"X.isp.organization\"\n+                                \"description\": \"The Elasticsearch document type\",\n+                                \"name\": \"es.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-enrich-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"EVENT_DRIVEN\": 0,\n@@ -3715,439 +2485,270 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A URL query parameter\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"DNS_QUERY_TYPE\": {\n-                                \"defaultValue\": \"TXT\",\n-                                \"description\": \"The DNS query type to be used by the processor (e.g. TXT, A)\",\n-                                \"displayName\": \"DNS Query Type\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DNS_QUERY_TYPE\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"DNS_RETRIES\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of attempts before giving up and moving on\",\n-                                \"displayName\": \"DNS Query Retries\",\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DNS_RETRIES\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"elasticsearch-http-connect-timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-connect-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"DNS_SERVER\": {\n-                                \"description\": \"A comma separated list of  DNS servers to be used. (Defaults to system wide if none is used)\",\n-                                \"displayName\": \"DNS Servers\",\n+                            \"elasticsearch-http-proxy-host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DNS_SERVER\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-proxy-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"DNS_TIMEOUT\": {\n-                                \"defaultValue\": \"1500 ms\",\n-                                \"description\": \"The amount of time to wait until considering a query as failed\",\n-                                \"displayName\": \"DNS Query Timeout\",\n+                            \"elasticsearch-http-proxy-port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DNS_TIMEOUT\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-proxy-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"QUERY_INPUT\": {\n-                                \"description\": \"The value that should be used to populate the query\",\n-                                \"displayName\": \"Lookup value\",\n+                            \"elasticsearch-http-response-timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n+                                \"displayName\": \"Response Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"QUERY_INPUT\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-response-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"QUERY_PARSER\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use a delimiter character or RegEx  to split the results into attributes\",\n-                                        \"displayName\": \"Split\",\n-                                        \"value\": \"Split\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use a regular expression to split the results into attributes \",\n-                                        \"displayName\": \"RegEx\",\n-                                        \"value\": \"RegEx\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Do not split results\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"The method used to slice the results into attribute groups\",\n-                                \"displayName\": \"Results Parser\",\n+                            \"elasticsearch-http-url\": {\n+                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n+                                \"displayName\": \"Elasticsearch URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"QUERY_PARSER\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"QUERY_PARSER_INPUT\": {\n-                                \"description\": \"Choice between a splitter and regex matcher used to parse the results of the query into attribute groups.\\nNOTE: This is a multiline regular expression, therefore, the DFM should decide how to handle trailing new line characters.\",\n-                                \"displayName\": \"Parser RegEx\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"QUERY_PARSER_INPUT\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Where to route flow files if data enrichment query rendered no results\",\n-                                \"name\": \"not found\"\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"Where to route flow files after successfully enriching attributes with data\",\n-                                \"name\": \"found\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"dns\",\n-                            \"enrich\",\n-                            \"ip\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.enrich.QueryDNS\",\n-                        \"typeDescription\": \"A powerful DNS query processor primary designed to enrich DataFlows with DNS based APIs (e.g. RBLs, ShadowServer's ASN lookup) but that can be also used to perform regular DNS lookups.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The captured fields of the DNS query response for each of the records received\",\n-                                \"name\": \"enrich.dns.record*.group*\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-enrich-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"BATCH_SIZE\": {\n-                                \"defaultValue\": \"25\",\n-                                \"description\": \"The number of incoming FlowFiles to process in a single execution of this processor. \",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"BATCH_SIZE\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"BULK_PROTOCOL\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The evaluated input of each flowfile is enclosed within begin and end tags. Each row contains a delimited set of fields\",\n-                                        \"displayName\": \"Begin/End\",\n-                                        \"value\": \"Begin/End\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Queries are made without any particular dialect\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"The protocol used to perform the bulk query. \",\n-                                \"displayName\": \"Bulk Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"BULK_PROTOCOL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"KEY_GROUP\": {\n-                                \"description\": \"When performing a batched lookup, the following RegEx numbered capture group or Column number will be used to match the whois server response with the lookup field\",\n-                                \"displayName\": \"Key lookup group (multiline / batch)\",\n+                            \"proxy-password\": {\n+                                \"description\": \"Proxy Password\",\n+                                \"displayName\": \"Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"KEY_GROUP\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"QUERY_INPUT\": {\n-                                \"description\": \"The value that should be used to populate the query\",\n-                                \"displayName\": \"Lookup value\",\n+                            \"proxy-username\": {\n+                                \"description\": \"Proxy Username\",\n+                                \"displayName\": \"Proxy Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"QUERY_INPUT\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"QUERY_PARSER\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use a delimiter character or RegEx  to split the results into attributes\",\n-                                        \"displayName\": \"Split\",\n-                                        \"value\": \"Split\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use a regular expression to split the results into attributes \",\n-                                        \"displayName\": \"RegEx\",\n-                                        \"value\": \"RegEx\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Do not split results\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"The method used to slice the results into attribute groups\",\n-                                \"displayName\": \"Results Parser\",\n+                            \"put-es-batch-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The preferred number of flow files to put to the database in a single transaction. Note that the contents of the flow files will be stored in memory until the bulk operation is performed. Also the results should be returned in the same order the flow files were received.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"QUERY_PARSER\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"put-es-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"QUERY_PARSER_INPUT\": {\n-                                \"description\": \"Choice between a splitter and regex matcher used to parse the results of the query into attribute groups.\\nNOTE: This is a multiline regular expression, therefore, the DFM should decide how to handle trailing new line characters.\",\n-                                \"displayName\": \"Parser RegEx\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"QUERY_PARSER_INPUT\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"WHOIS_QUERY_TYPE\": {\n-                                \"description\": \"The Whois query type to be used by the processor (if used)\",\n-                                \"displayName\": \"Whois Query Type\",\n+                            \"put-es-id-attr\": {\n+                                \"description\": \"The name of the FlowFile attribute containing the identifier for the document. If the Index Operation is \\\"index\\\", this property may be left empty or evaluate to an empty value, in which case the document's identifier will be auto-generated by Elasticsearch. For all other Index Operations, the attribute must evaluate to a non-empty value.\",\n+                                \"displayName\": \"Identifier Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"WHOIS_QUERY_TYPE\",\n+                                \"name\": \"put-es-id-attr\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"WHOIS_SERVER\": {\n-                                \"description\": \"The Whois server to be used\",\n-                                \"displayName\": \"Whois Server\",\n+                            \"put-es-index\": {\n+                                \"description\": \"The name of the index to insert into\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"WHOIS_SERVER\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"WHOIS_SERVER_PORT\": {\n-                                \"defaultValue\": \"43\",\n-                                \"description\": \"The TCP port of the remote Whois server\",\n-                                \"displayName\": \"Whois Server Port\",\n+                            \"put-es-index-op\": {\n+                                \"defaultValue\": \"index\",\n+                                \"description\": \"The type of the operation used to index (create, index, update, upsert, delete)\",\n+                                \"displayName\": \"Index Operation\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"WHOIS_SERVER_PORT\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-index-op\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"WHOIS_TIMEOUT\": {\n-                                \"defaultValue\": \"1500 ms\",\n-                                \"description\": \"The amount of time to wait until considering a query as failed\",\n-                                \"displayName\": \"Whois Query Timeout\",\n+                            \"put-es-type\": {\n+                                \"description\": \"The type of this document (required by Elasticsearch versions < 7.0 for indexing and searching). This must be unset or '_doc' for Elasticsearch 7.0+.\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"WHOIS_TIMEOUT\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Where to route flow files if data enrichment query rendered no results\",\n-                                \"name\": \"not found\"\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"Where to route flow files after successfully enriching attributes with data\",\n-                                \"name\": \"found\"\n+                                \"description\": \"All FlowFiles that are written to Elasticsearch are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be written to Elasticsearch are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"enrich\",\n-                            \"ip\",\n-                            \"whois\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.enrich.QueryWhois\",\n-                        \"typeDescription\": \"A powerful whois query processor primary designed to enrich DataFlows with whois based APIs (e.g. ShadowServer's ASN lookup) but that can be also used to perform regular whois lookups.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The captured fields of the Whois query response for each of the records received\",\n-                                \"name\": \"enrich.dns.record*.group*\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-dropbox-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-dropbox-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"access-token\": {\n-                                \"description\": \"Access Token of the user's Dropbox app. See Additional Details for more information about Access Token generation.\",\n-                                \"displayName\": \"Access Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"access-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"app-key\": {\n-                                \"description\": \"App Key of the user's Dropbox app. See Additional Details for more information.\",\n-                                \"displayName\": \"App Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"app-key\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"app-secret\": {\n-                                \"description\": \"App Secret of the user's Dropbox app. See Additional Details for more information.\",\n-                                \"displayName\": \"App Secret\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"app-secret\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"refresh-token\": {\n-                                \"description\": \"Refresh Token of the user's Dropbox app. See Additional Details for more information about Refresh Token generation.\",\n-                                \"displayName\": \"Refresh Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"refresh-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n+                        \"systemResourceConsiderations\": [\n                             {\n-                                \"artifact\": \"nifi-dropbox-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"credentials\",\n-                            \"dropbox\",\n-                            \"provider\"\n+                            \"delete\",\n+                            \"elasticsearch\",\n+                            \"http\",\n+                            \"insert\",\n+                            \"put\",\n+                            \"update\",\n+                            \"upsert\",\n+                            \"write\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.dropbox.StandardDropboxCredentialService\",\n-                        \"typeDescription\": \"Defines credentials for Dropbox processors.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchHttp\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to Elasticsearch, using the specified parameters such as the index to insert into and the type of the document.\",\n                         \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-update-attribute-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-update-attribute-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-elasticsearch-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"EVENT_DRIVEN\": 0,\n@@ -4156,1878 +2757,1464 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Updates a FlowFile attribute specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A FlowFile attribute to update\",\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A URL query parameter\",\n                                 \"value\": \"The value to set it to\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Delete Attributes Expression\": {\n-                                \"description\": \"Regular expression for attributes to be deleted from FlowFiles.  Existing attributes that match will be deleted regardless of whether they are updated by this processor.\",\n-                                \"displayName\": \"Delete Attributes Expression\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Delete Attributes Expression\",\n-                                \"required\": false,\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Stateful Variables Initial Value\": {\n-                                \"description\": \"If using state to set/reference variables then this value is used to set the initial value of the stateful variable. This will only be used in the @OnScheduled method when state does not contain a value for the variable. This is required if running statefully but can be empty if needed.\",\n-                                \"displayName\": \"Stateful Variables Initial Value\",\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, the default format 'yyyy-MM-dd' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/25/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Stateful Variables Initial Value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Date Format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Store State\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Do not store state\",\n-                                        \"value\": \"Do not store state\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Store state locally\",\n-                                        \"value\": \"Store state locally\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Do not store state\",\n-                                \"description\": \"Select whether or not state will be stored. Selecting 'Stateless' will offer the default functionality of purely updating the attributes on a FlowFile in a stateless manner. Selecting a stateful option will not only store the attributes on the FlowFile but also in the Processors state. See the 'Stateful Usage' topic of the 'Additional Details' section of this processor's documentation for more information\",\n-                                \"displayName\": \"Store State\",\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Store State\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"canonical-value-lookup-cache-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies how many canonical lookup values should be stored in the cache\",\n-                                \"displayName\": \"Cache Value Lookup Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"canonical-value-lookup-cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"stateful\": {\n-                            \"description\": \"Gives the option to store values not only on the FlowFile but as stateful variables to be referenced in a recursive manner.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successful FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"attributes\",\n-                            \"delete\",\n-                            \"modification\",\n-                            \"state\",\n-                            \"update\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.attributes.UpdateAttribute\",\n-                        \"typeDescription\": \"Updates the Attributes for a FlowFile by using the Attribute Expression Language and/or deletes the attributes based on a regular expression\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"This processor may write or remove zero or more attributes as described in additional details\",\n-                                \"name\": \"See additional details\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-airtable-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-airtable-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"15 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n-                        \"propertyDescriptors\": {\n-                            \"api-key\": {\n-                                \"description\": \"The REST API key to use in queries. Should be generated on Airtable's account page.\",\n-                                \"displayName\": \"API Key\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"api-key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"api-url\": {\n-                                \"defaultValue\": \"https://api.airtable.com/v0\",\n-                                \"description\": \"The URL for the Airtable REST API including the domain and the path to the API (e.g. https://api.airtable.com/v0).\",\n-                                \"displayName\": \"API URL\",\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, the default format 'HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"api-url\",\n-                                \"required\": true,\n+                                \"name\": \"Time Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"base-id\": {\n-                                \"description\": \"The ID of the Airtable base to be queried.\",\n-                                \"displayName\": \"Base ID\",\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, the default format 'yyyy-MM-dd HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/25/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"base-id\",\n-                                \"required\": true,\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-filter\": {\n-                                \"description\": \"Filter records by Airtable's formulas.\",\n-                                \"displayName\": \"Custom Filter\",\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"custom-filter\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"fields\": {\n-                                \"description\": \"Comma-separated list of fields to query from the table. Both the field's name and ID can be used.\",\n-                                \"displayName\": \"Fields\",\n+                            \"elasticsearch-http-connect-timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"fields\",\n-                                \"required\": false,\n+                                \"name\": \"elasticsearch-http-connect-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-records-per-flowfile\": {\n-                                \"description\": \"The maximum number of result records that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If no value specified, then all records are returned in a single FlowFile.\",\n-                                \"displayName\": \"Max Records Per FlowFile\",\n+                            \"elasticsearch-http-proxy-host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max-records-per-flowfile\",\n+                                \"name\": \"elasticsearch-http-proxy-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"query-page-size\": {\n-                                \"description\": \"Number of records to be fetched in a page. Should be between 1 and 100 inclusively.\",\n-                                \"displayName\": \"Query Page Size\",\n+                            \"elasticsearch-http-proxy-port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"query-page-size\",\n+                                \"name\": \"elasticsearch-http-proxy-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"query-time-window-lag\": {\n-                                \"defaultValue\": \"3 s\",\n-                                \"description\": \"The amount of lag to be applied to the query time window's end point. Set this property to avoid missing records when the clock of your local machines and Airtable servers' clock are not in sync. Must be greater than or equal to 1 second.\",\n-                                \"displayName\": \"Query Time Window Lag\",\n+                            \"elasticsearch-http-response-timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n+                                \"displayName\": \"Response Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"query-time-window-lag\",\n+                                \"name\": \"elasticsearch-http-response-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"table-id\": {\n-                                \"description\": \"The name or the ID of the Airtable table to be queried.\",\n-                                \"displayName\": \"Table ID\",\n+                            \"elasticsearch-http-url\": {\n+                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n+                                \"displayName\": \"Elasticsearch URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"table-id\",\n+                                \"name\": \"elasticsearch-http-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"web-client-service-provider\": {\n-                                \"description\": \"Web Client Service Provider to use for Airtable REST API requests\",\n-                                \"displayName\": \"Web Client Service Provider\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The last successful query's time is stored in order to enable incremental loading. The initial query returns all the records in the table and each subsequent query filters the records by their last modified time. In other words, if a record is updated after the last successful query only the updated records will be returned in the next query. State is stored across the cluster, so this Processor can run only on the Primary Node and if a new Primary Node is selected, the new node can pick up where the previous one left off without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"airtable\",\n-                            \"database\",\n-                            \"query\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.airtable.QueryAirtableTable\",\n-                        \"typeDescription\": \"Query records from an Airtable table. Records are incrementally retrieved based on the last modified time of the records. Records can also be further filtered by setting the 'Custom Filter' property which supports the formulas provided by the Airtable API. This processor is intended to be run on the Primary Node only.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the number of records in the FlowFile.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Records Per FlowFile' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Records Per FlowFile' is set then this is the total number of FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet.\",\n-                                \"name\": \"fragment.count\"\n                             },\n-                            {\n-                                \"description\": \"If 'Max Records Per FlowFile' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-mqtt-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mqtt-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Broker URI\": {\n-                                \"description\": \"The URI(s) to use to connect to the MQTT broker (e.g., tcp://localhost:1883). The 'tcp', 'ssl', 'ws' and 'wss' schemes are supported. In order to use 'ssl', the SSL Context Service property must be set. When a comma-separated URI list is set (e.g., tcp://localhost:1883,tcp://localhost:1884), the processor will use a round-robin algorithm to connect to the brokers on connection failure.\",\n-                                \"displayName\": \"Broker URI\",\n+                            \"proxy-password\": {\n+                                \"description\": \"Proxy Password\",\n+                                \"displayName\": \"Proxy Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Broker URI\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Client ID\": {\n-                                \"description\": \"MQTT client ID to use. If not set, a UUID will be generated.\",\n-                                \"displayName\": \"Client ID\",\n+                            \"proxy-username\": {\n+                                \"description\": \"Proxy Username\",\n+                                \"displayName\": \"Proxy Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Client ID\",\n+                                \"name\": \"proxy-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Timeout (seconds)\": {\n-                                \"defaultValue\": \"30\",\n-                                \"description\": \"Maximum time interval the client will wait for the network connection to the MQTT server to be established. The default timeout is 30 seconds. A value of 0 disables timeout processing meaning the client will wait until the network connection is made successfully or fails.\",\n-                                \"displayName\": \"Connection Timeout (seconds)\",\n+                            \"put-es-record-at-timestamp\": {\n+                                \"description\": \"The value to use as the @timestamp field (required for Elasticsearch Data Streams)\",\n+                                \"displayName\": \"@timestamp Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout (seconds)\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-at-timestamp\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Group ID\": {\n-                                \"description\": \"MQTT consumer group ID to use. If group ID not set, client will connect as individual consumer.\",\n-                                \"displayName\": \"Group ID\",\n+                            \"put-es-record-at-timestamp-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the @timestamp for the document. If left blank the @timestamp will be determined using the main @timestamp property\",\n+                                \"displayName\": \"@timestamp Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Group ID\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-at-timestamp-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Alive Interval (seconds)\": {\n-                                \"defaultValue\": \"60\",\n-                                \"description\": \"Defines the maximum time interval between messages sent or received. It enables the client to detect if the server is no longer available, without having to wait for the TCP/IP timeout. The client will ensure that at least one message travels across the network within each keep alive period. In the absence of a data-related message during the time period, the client sends a very small \\\"ping\\\" message, which the server will acknowledge. A value of 0 disables keepalive processing in the client.\",\n-                                \"displayName\": \"Keep Alive Interval (seconds)\",\n+                            \"put-es-record-id-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the identifier for the document. If the Index Operation is \\\"index\\\" or \\\"create\\\", this property may be left empty or evaluate to an empty value, in which case the document's identifier will be auto-generated by Elasticsearch. For all other Index Operations, the field's value must be non-empty.\",\n+                                \"displayName\": \"Identifier Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Alive Interval (seconds)\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-id-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will Message\": {\n-                                \"description\": \"The message to send as the client's Last Will.\",\n-                                \"displayName\": \"Last Will Message\",\n+                            \"put-es-record-index\": {\n+                                \"description\": \"The name of the index to insert into\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Message\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-index\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will QoS Level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n-                                        \"displayName\": \"0 - At most once\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n-                                        \"displayName\": \"1 - At least once\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n-                                        \"displayName\": \"2 - Exactly once\",\n-                                        \"value\": \"2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"QoS level to be used when publishing the Last Will Message.\",\n-                                \"displayName\": \"Last Will QoS Level\",\n+                            \"put-es-record-index-op\": {\n+                                \"defaultValue\": \"index\",\n+                                \"description\": \"The type of the operation used to index (create, index, update, upsert, delete)\",\n+                                \"displayName\": \"Index Operation\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will QoS Level\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-index-op\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will Retain\": {\n+                            \"put-es-record-log-all-errors\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether to retain the client's Last Will.\",\n-                                \"displayName\": \"Last Will Retain\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Retain\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Will Topic\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"The topic to send the client's Last Will to.\",\n-                                \"displayName\": \"Last Will Topic\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"MQTT Specification Version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Start with v3.1.1 and fallback to v3.1.0 if not supported by a broker\",\n-                                        \"displayName\": \"v3 AUTO\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"v5.0\",\n-                                        \"value\": \"5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"v3.1.1\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"v3.1.0\",\n-                                        \"value\": \"3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The MQTT specification version when connecting with the broker. See the allowable value descriptions for more details.\",\n-                                \"displayName\": \"MQTT Specification Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"MQTT Specification Version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Queue Size\": {\n-                                \"description\": \"The MQTT messages are always being sent to subscribers on a topic regardless of how frequently the processor is scheduled to run. If the 'Run Schedule' is significantly behind the rate at which the messages are arriving to this processor, then a back up can occur in the internal queue of this processor. This property specifies the maximum number of messages this processor will hold in memory at one time in the internal queue. This data would be lost in case of a NiFi restart.\",\n-                                \"displayName\": \"Max Queue Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Queue Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password to use when connecting to the broker\",\n-                                \"displayName\": \"Password\",\n+                                \"description\": \"After sending a batch of records, Elasticsearch will report if individual records failed to insert. As an example, this can happen if the record doesn't match the mapping for the index it is being inserted into. If this is set to true, the processor will log the failure reason for the every failed record. When set to false only the first error in the batch will be logged.\",\n+                                \"displayName\": \"Log all errors in batch\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"put-es-record-log-all-errors\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Quality of Service(QoS)\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n-                                        \"displayName\": \"0 - At most once\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n-                                        \"displayName\": \"1 - At least once\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n-                                        \"displayName\": \"2 - Exactly once\",\n-                                        \"value\": \"2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The Quality of Service (QoS) to receive the message with. Accepts values '0', '1' or '2'; '0' for 'at most once', '1' for 'at least once', '2' for 'exactly once'.\",\n-                                \"displayName\": \"Quality of Service (QoS)\",\n+                            \"put-es-record-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Quality of Service(QoS)\",\n+                                \"name\": \"put-es-record-record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"put-es-record-record-writer\": {\n+                                \"description\": \"After sending a batch of records, Elasticsearch will report if individual records failed to insert. As an example, this can happen if the record doesn't match the mappingfor the index it is being inserted into. This property specifies the Controller Service to use for writing out those individual records sent to 'failure'. If this is not set, then the whole FlowFile will be routed to failure (including any records which may have been inserted successfully). Note that this will only be used if Elasticsearch reports that individual records failed and that in the event that the entire FlowFile fails (e.g. in the event ES is down), the FF will be routed to failure without being interpreted by this record writer. If there is an error while attempting to route the failures, the entire FlowFile will be routed to Failure. Also if every record failed individually, the entire FlowFile will be routed to Failure without being parsed by the writer.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"put-es-record-record-writer\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Session Expiry Interval\": {\n-                                \"defaultValue\": \"24 hrs\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"5\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n-                                        \"propertyName\": \"MQTT Specification Version\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"false\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Session state\",\n-                                        \"propertyName\": \"Session state\"\n-                                    }\n-                                ],\n-                                \"description\": \"After this interval the broker will expire the client and clear the session state.\",\n-                                \"displayName\": \"Session Expiry Interval\",\n+                            \"put-es-record-type\": {\n+                                \"description\": \"The type of this document (required by Elasticsearch versions < 7.0 for indexing and searching). This must be unset or '_doc' for Elasticsearch 7.0+.\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session Expiry Interval\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Session state\": {\n+                            \"suppress-nulls\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Client and Server discard any previous session and start a new one. This session lasts as long as the network connection. State data associated with this session is not reused in any subsequent session\",\n-                                        \"displayName\": \"Clean Session\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will be written out as a null value\",\n+                                        \"displayName\": \"Never Suppress\",\n+                                        \"value\": \"never-suppress\"\n                                     },\n                                     {\n-                                        \"description\": \"Server resumes communications with the client based on state from the current session (as identified by the ClientID). The client and server store the session after the client and server are disconnected. After the disconnection of a session that was not a clean session, the server stores further QoS 1 and QoS 2 messages that match any subscriptions that the client had at the time of disconnection as part of the session state\",\n-                                        \"displayName\": \"Resume Session\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to start a fresh or resume previous flows. See the allowable value descriptions for more details.\",\n-                                \"displayName\": \"Session state\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session state\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Topic Filter\": {\n-                                \"description\": \"The MQTT topic filter to designate the topics to subscribe to.\",\n-                                \"displayName\": \"Topic Filter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Topic Filter\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to use when connecting to the broker\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"add-attributes-as-fields\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will not be written out\",\n+                                        \"displayName\": \"Always Suppress\",\n+                                        \"value\": \"always-suppress\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n+                                        \"description\": \"When a field has a value of null, it will be written out. However, if a field is defined in the schema and not present in the record, the field will not be written out.\",\n+                                        \"displayName\": \"Suppress Missing Values\",\n+                                        \"value\": \"suppress-missing\"\n                                     }\n                                 ],\n-                                \"description\": \"If setting this property to true, default fields are going to be added in each record: _topic, _qos, _isDuplicate, _isRetained.\",\n-                                \"displayName\": \"Add attributes as fields\",\n+                                \"defaultValue\": \"never-suppress\",\n+                                \"description\": \"Specifies how the writer should handle a null field\",\n+                                \"displayName\": \"Suppress Null Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"add-attributes-as-fields\",\n+                                \"name\": \"suppress-nulls\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"message-demarcator\": {\n-                                \"description\": \"With this property, you have an option to output FlowFiles which contains multiple messages. This property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple messages. This is an optional property ; if not provided, and if not defining a Record Reader/Writer, each message received will result in a single FlowFile. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS.\",\n-                                \"displayName\": \"Message Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"message-demarcator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for parsing received MQTT Messages into Records.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records before writing them to a FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.mqtt.PublishMQTT\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a message cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"The MQTT message output\",\n-                                \"name\": \"Message\"\n+                                \"description\": \"All FlowFiles that are written to Elasticsearch are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be written to Elasticsearch are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The 'Max Queue Size' specifies the maximum number of messages that can be hold in memory by NiFi by a single instance of this processor. A high value for this property could represent a lot of data being stored in memory.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"IOT\",\n-                            \"MQTT\",\n-                            \"consume\",\n-                            \"listen\",\n-                            \"subscribe\"\n+                            \"delete\",\n+                            \"elasticsearch\",\n+                            \"http\",\n+                            \"insert\",\n+                            \"put\",\n+                            \"record\",\n+                            \"update\",\n+                            \"upsert\",\n+                            \"write\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mqtt.ConsumeMQTT\",\n-                        \"typeDescription\": \"Subscribes to a topic and receives messages from an MQTT broker\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchHttpRecord\",\n+                        \"typeDescription\": \"Writes the records from a FlowFile into to Elasticsearch, using the specified parameters such as the index to insert into and the type of the document, as well as the operation type (index, upsert, delete, etc.). Note: The Bulk API is used to send the records. This means that the entire contents of the incoming flow file are read into memory, and each record is transformed into a JSON document which is added to a single HTTP request body. For very large flow files (files with a large number of records, e.g.), this could cause memory usage issues.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records received\",\n+                                \"description\": \"The number of records in an outgoing FlowFile. This is only populated on the 'success' relationship.\",\n                                 \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"MQTT broker that was the message source\",\n-                                \"name\": \"mqtt.broker\"\n-                            },\n-                            {\n-                                \"description\": \"MQTT topic on which message was received\",\n-                                \"name\": \"mqtt.topic\"\n-                            },\n-                            {\n-                                \"description\": \"The quality of service for this message.\",\n-                                \"name\": \"mqtt.qos\"\n-                            },\n-                            {\n-                                \"description\": \"Whether or not this message might be a duplicate of one which has already been received.\",\n-                                \"name\": \"mqtt.isDuplicate\"\n-                            },\n-                            {\n-                                \"description\": \"Whether or not this message was from a current publisher, or was \\\"retained\\\" by the server as the last message published on the topic.\",\n-                                \"name\": \"mqtt.isRetained\"\n+                                \"description\": \"The number of records found by Elasticsearch to have errors. This is only populated on the 'failure' relationship.\",\n+                                \"name\": \"failure.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mqtt-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A URL query parameter\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Broker URI\": {\n-                                \"description\": \"The URI(s) to use to connect to the MQTT broker (e.g., tcp://localhost:1883). The 'tcp', 'ssl', 'ws' and 'wss' schemes are supported. In order to use 'ssl', the SSL Context Service property must be set. When a comma-separated URI list is set (e.g., tcp://localhost:1883,tcp://localhost:1884), the processor will use a round-robin algorithm to connect to the brokers on connection failure.\",\n-                                \"displayName\": \"Broker URI\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Broker URI\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client ID\": {\n-                                \"description\": \"MQTT client ID to use. If not set, a UUID will be generated.\",\n-                                \"displayName\": \"Client ID\",\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Client ID\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Connection Timeout (seconds)\": {\n-                                \"defaultValue\": \"30\",\n-                                \"description\": \"Maximum time interval the client will wait for the network connection to the MQTT server to be established. The default timeout is 30 seconds. A value of 0 disables timeout processing meaning the client will wait until the network connection is made successfully or fails.\",\n-                                \"displayName\": \"Connection Timeout (seconds)\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout (seconds)\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Keep Alive Interval (seconds)\": {\n-                                \"defaultValue\": \"60\",\n-                                \"description\": \"Defines the maximum time interval between messages sent or received. It enables the client to detect if the server is no longer available, without having to wait for the TCP/IP timeout. The client will ensure that at least one message travels across the network within each keep alive period. In the absence of a data-related message during the time period, the client sends a very small \\\"ping\\\" message, which the server will acknowledge. A value of 0 disables keepalive processing in the client.\",\n-                                \"displayName\": \"Keep Alive Interval (seconds)\",\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Alive Interval (seconds)\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will Message\": {\n-                                \"description\": \"The message to send as the client's Last Will.\",\n-                                \"displayName\": \"Last Will Message\",\n+                            \"elasticsearch-http-connect-timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Message\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-connect-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will QoS Level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n-                                        \"displayName\": \"0 - At most once\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n-                                        \"displayName\": \"1 - At least once\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n-                                        \"displayName\": \"2 - Exactly once\",\n-                                        \"value\": \"2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"QoS level to be used when publishing the Last Will Message.\",\n-                                \"displayName\": \"Last Will QoS Level\",\n+                            \"elasticsearch-http-proxy-host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will QoS Level\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-proxy-host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will Retain\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether to retain the client's Last Will.\",\n-                                \"displayName\": \"Last Will Retain\",\n+                            \"elasticsearch-http-proxy-port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Retain\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-proxy-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will Topic\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"The topic to send the client's Last Will to.\",\n-                                \"displayName\": \"Last Will Topic\",\n+                            \"elasticsearch-http-response-timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n+                                \"displayName\": \"Response Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Topic\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-response-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"MQTT Specification Version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Start with v3.1.1 and fallback to v3.1.0 if not supported by a broker\",\n-                                        \"displayName\": \"v3 AUTO\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"v5.0\",\n-                                        \"value\": \"5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"v3.1.1\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"v3.1.0\",\n-                                        \"value\": \"3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The MQTT specification version when connecting with the broker. See the allowable value descriptions for more details.\",\n-                                \"displayName\": \"MQTT Specification Version\",\n+                            \"elasticsearch-http-url\": {\n+                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n+                                \"displayName\": \"Elasticsearch URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"MQTT Specification Version\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password to use when connecting to the broker\",\n-                                \"displayName\": \"Password\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"proxy-password\": {\n+                                \"description\": \"Proxy Password\",\n+                                \"displayName\": \"Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Quality of Service(QoS)\": {\n-                                \"description\": \"The Quality of Service (QoS) to send the message with. Accepts three values '0', '1' and '2'; '0' for 'at most once', '1' for 'at least once', '2' for 'exactly once'. Expression language is allowed in order to support publishing messages with different QoS but the end value of the property must be either '0', '1' or '2'. \",\n-                                \"displayName\": \"Quality of Service (QoS)\",\n+                            \"proxy-username\": {\n+                                \"description\": \"Proxy Username\",\n+                                \"displayName\": \"Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"query-es-fields\": {\n+                                \"description\": \"A comma-separated list of fields to retrieve from the document. If the Fields property is left blank, then the entire document's source will be retrieved.\",\n+                                \"displayName\": \"Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Quality of Service(QoS)\",\n-                                \"required\": true,\n+                                \"name\": \"query-es-fields\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Retain Message\": {\n-                                \"description\": \"Whether or not the retain flag should be set on the MQTT message.\",\n-                                \"displayName\": \"Retain Message\",\n+                            \"query-es-index\": {\n+                                \"description\": \"The name of the index to read from. If the property is unset or set to _all, the query will match across all indexes.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Retain Message\",\n+                                \"name\": \"query-es-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"query-es-limit\": {\n+                                \"description\": \"If set, limits the number of results that will be returned.\",\n+                                \"displayName\": \"Limit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"query-es-limit\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Session Expiry Interval\": {\n-                                \"defaultValue\": \"24 hrs\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"5\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n-                                        \"propertyName\": \"MQTT Specification Version\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"false\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Session state\",\n-                                        \"propertyName\": \"Session state\"\n-                                    }\n-                                ],\n-                                \"description\": \"After this interval the broker will expire the client and clear the session state.\",\n-                                \"displayName\": \"Session Expiry Interval\",\n+                            \"query-es-query\": {\n+                                \"description\": \"The Lucene-style query to run against ElasticSearch (e.g., genre:blues AND -artist:muddy)\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session Expiry Interval\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"query-es-query\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"query-es-size\": {\n+                                \"defaultValue\": \"20\",\n+                                \"description\": \"Determines how many documents to return per page during scrolling.\",\n+                                \"displayName\": \"Page Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"query-es-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"query-es-sort\": {\n+                                \"description\": \"A sort parameter (e.g., timestamp:asc). If the Sort property is left blank, then the results will be retrieved in document order.\",\n+                                \"displayName\": \"Sort\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"query-es-sort\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Session state\": {\n+                            \"query-es-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Client and Server discard any previous session and start a new one. This session lasts as long as the network connection. State data associated with this session is not reused in any subsequent session\",\n-                                        \"displayName\": \"Clean Session\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Flow file content\",\n+                                        \"value\": \"Flow file content\"\n                                     },\n                                     {\n-                                        \"description\": \"Server resumes communications with the client based on state from the current session (as identified by the ClientID). The client and server store the session after the client and server are disconnected. After the disconnection of a session that was not a clean session, the server stores further QoS 1 and QoS 2 messages that match any subscriptions that the client had at the time of disconnection as part of the session state\",\n-                                        \"displayName\": \"Resume Session\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Flow file attributes\",\n+                                        \"value\": \"Flow file attributes\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to start a fresh or resume previous flows. See the allowable value descriptions for more details.\",\n-                                \"displayName\": \"Session state\",\n+                                \"defaultValue\": \"Flow file content\",\n+                                \"description\": \"Indicates where the results should be placed.  In the case of 'Flow file content', the JSON response will be written as the content of the flow file.  In the case of 'Flow file attributes', the original flow file (if applicable) will be cloned for each result, and all return fields will be placed in a flow file attribute of the same name, but prefixed by 'es.result.'\",\n+                                \"displayName\": \"Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session state\",\n+                                \"name\": \"query-es-target\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Topic\": {\n-                                \"description\": \"The topic to publish the message to.\",\n-                                \"displayName\": \"Topic\",\n+                            \"query-es-type\": {\n+                                \"description\": \"The type of document (if unset, the query will be against all types in the _index). This should be unset or '_doc' for Elasticsearch 7.0+.\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to use when connecting to the broker\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-demarcator\": {\n-                                \"description\": \"With this property, you have an option to publish multiple messages from a single FlowFile. This property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart the FlowFile content. This is an optional property ; if not provided, and if not defining a Record Reader/Writer, each FlowFile will be published as a single message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS.\",\n-                                \"displayName\": \"Message Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"message-demarcator\",\n+                                \"name\": \"query-es-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for parsing the incoming FlowFile into Records.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records before publishing them as an MQTT Message.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"routing-query-info-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Always route Query Info\",\n+                                        \"displayName\": \"Always\",\n+                                        \"value\": \"ALWAYS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Never route Query Info\",\n+                                        \"displayName\": \"Never\",\n+                                        \"value\": \"NEVER\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Route Query Info if the Query returns no hits\",\n+                                        \"displayName\": \"No Hits\",\n+                                        \"value\": \"NOHIT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Always append Query Info as attributes, using the existing relationships (does not add the Query Info relationship).\",\n+                                        \"displayName\": \"Append as Attributes\",\n+                                        \"value\": \"APPEND_AS_ATTRIBUTES\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NEVER\",\n+                                \"description\": \"Specifies when to generate and route Query Info after a successful query\",\n+                                \"displayName\": \"Routing Strategy for Query Info\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"routing-query-info-strategy\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.mqtt.ConsumeMQTT\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n+                                \"description\": \"A FlowFile is routed to this relationship if the document cannot be fetched but attempting the operation again may succeed. Note that if the processor has no incoming connections, flow files may still be sent to this relationship based on the processor properties and the results of the fetch operation.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that are read from Elasticsearch are routed to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are transferred to this relationship.\",\n+                                \"description\": \"All FlowFiles that cannot be read from Elasticsearch are routed to this relationship. Note that only incoming flow files will be routed to failure.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"IOT\",\n-                            \"MQTT\",\n-                            \"publish\"\n+                            \"elasticsearch\",\n+                            \"get\",\n+                            \"http\",\n+                            \"query\",\n+                            \"read\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mqtt.PublishMQTT\",\n-                        \"typeDescription\": \"Publishes a message to an MQTT topic\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hubspot-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.QueryElasticsearchHttp\",\n+                        \"typeDescription\": \"Queries Elasticsearch using the specified connection properties. Note that the full body of each page of documents will be read into memory before being written to Flow Files for transfer.  Also note that the Elasticsearch max_result_window index setting is the upper bound on the number of records that can be retrieved using this query.  To retrieve more records, use the ScrollElasticsearchHttp processor.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The filename attribute is set to the document identifier\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The number of hits for a query\",\n+                                \"name\": \"es.query.hitcount\"\n+                            },\n+                            {\n+                                \"description\": \"The Elasticsearch document identifier\",\n+                                \"name\": \"es.id\"\n+                            },\n+                            {\n+                                \"description\": \"The Elasticsearch index containing the document\",\n+                                \"name\": \"es.index\"\n+                            },\n+                            {\n+                                \"description\": \"The Elasticsearch query that was built\",\n+                                \"name\": \"es.query.url\"\n+                            },\n+                            {\n+                                \"description\": \"The Elasticsearch document type\",\n+                                \"name\": \"es.type\"\n+                            },\n+                            {\n+                                \"description\": \"If Target is 'Flow file attributes', the JSON attributes of each result will be placed into corresponding attributes with this prefix.\",\n+                                \"name\": \"es.result.*\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hubspot-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-elasticsearch-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"10 sec\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A URL query parameter\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"access-token\": {\n-                                \"description\": \"Access Token to authenticate requests\",\n-                                \"displayName\": \"Access Token\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"access-token\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"incremental-delay\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Incremental Loading\",\n-                                        \"propertyName\": \"is-incremental\"\n-                                    }\n-                                ],\n-                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35. Set this property to avoid missing objects when the clock of your local machines and HubSpot servers' clock are not in sync and to protect against HubSpot's mechanism that changes last updated timestamps after object creation.\",\n-                                \"displayName\": \"Incremental Delay\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"incremental-delay\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"elasticsearch-http-connect-timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-connect-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"incremental-initial-start-time\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Incremental Loading\",\n-                                        \"propertyName\": \"is-incremental\"\n-                                    }\n-                                ],\n-                                \"description\": \"This property specifies the start time that the processor applies when running the first request. The expected format is a UTC date-time such as '2011-12-03T10:15:30Z'\",\n-                                \"displayName\": \"Incremental Initial Start Time\",\n+                            \"elasticsearch-http-proxy-host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"incremental-initial-start-time\",\n+                                \"name\": \"elasticsearch-http-proxy-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"is-incremental\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"The processor can incrementally load the queried objects so that each object is queried exactly once. For each query, the processor queries objects within a time window where the objects were modified between the previous run time and the current time (optionally adjusted by the Incremental Delay property).\",\n-                                \"displayName\": \"Incremental Loading\",\n+                            \"elasticsearch-http-proxy-port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"is-incremental\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-proxy-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"object-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"In HubSpot, the companies object is a standard CRM object. Individual company records can be used to store information about businesses and organizations within company properties.\",\n-                                        \"displayName\": \"Companies\",\n-                                        \"value\": \"/crm/v3/objects/companies\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, contacts store information about individuals. From marketing automation to smart content, the lead-specific data found in contact records helps users leverage much of HubSpot's functionality.\",\n-                                        \"displayName\": \"Contacts\",\n-                                        \"value\": \"/crm/v3/objects/contacts\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, a deal represents an ongoing transaction that a sales team is pursuing with a contact or company. It\\u2019s tracked through pipeline stages until won or lost.\",\n-                                        \"displayName\": \"Deals\",\n-                                        \"value\": \"/crm/v3/objects/deals\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, line items can be thought of as a subset of products. When a product is attached to a deal, it becomes a line item. Line items can be created that are unique to an individual quote, but they will not be added to the product library.\",\n-                                        \"displayName\": \"Line Items\",\n-                                        \"value\": \"/crm/v3/objects/line_items\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, products represent the goods or services to be sold. Building a product library allows the user to quickly add products to deals, generate quotes, and report on product performance.\",\n-                                        \"displayName\": \"Products\",\n-                                        \"value\": \"/crm/v3/objects/products\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, a ticket represents a customer request for help or support.\",\n-                                        \"displayName\": \"Tickets\",\n-                                        \"value\": \"/crm/v3/objects/tickets\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, quotes are used to share pricing information with potential buyers.\",\n-                                        \"displayName\": \"Quotes\",\n-                                        \"value\": \"/crm/v3/objects/quotes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Get calls on CRM records and on the calls index page.\",\n-                                        \"displayName\": \"Calls\",\n-                                        \"value\": \"/crm/v3/objects/calls\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Get emails on CRM records.\",\n-                                        \"displayName\": \"Emails\",\n-                                        \"value\": \"/crm/v3/objects/emails\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Get meetings on CRM records.\",\n-                                        \"displayName\": \"Meetings\",\n-                                        \"value\": \"/crm/v3/objects/meetings\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Get notes on CRM records.\",\n-                                        \"displayName\": \"Notes\",\n-                                        \"value\": \"/crm/v3/objects/notes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Get tasks on CRM records.\",\n-                                        \"displayName\": \"Tasks\",\n-                                        \"value\": \"/crm/v3/objects/tasks\"\n-                                    }\n-                                ],\n-                                \"description\": \"The HubSpot Object Type requested\",\n-                                \"displayName\": \"Object Type\",\n+                            \"elasticsearch-http-response-timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n+                                \"displayName\": \"Response Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"object-type\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-response-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"result-limit\": {\n-                                \"description\": \"The maximum number of results to request for each invocation of the Processor\",\n-                                \"displayName\": \"Result Limit\",\n+                            \"elasticsearch-http-url\": {\n+                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n+                                \"displayName\": \"Elasticsearch URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"result-limit\",\n-                                \"required\": false,\n+                                \"name\": \"elasticsearch-http-url\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"web-client-service-provider\": {\n-                                \"description\": \"Controller service for HTTP client operations\",\n-                                \"displayName\": \"Web Client Service Provider\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"In case of incremental loading, the start and end timestamps of the last query time window are stored in the state. When the 'Result Limit' property is set, the paging cursor is saved after executing a request. Only the objects after the paging cursor will be retrieved. The maximum number of retrieved objects can be set in the 'Result Limit' property.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"hubspot\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hubspot.GetHubSpot\",\n-                        \"typeDescription\": \"Retrieves JSON data from a private HubSpot application. This processor is intended to be run on the Primary Node only.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the MIME type to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-workday-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-workday-processors-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Web Client Service Provider\": {\n-                                \"description\": \"Web client which is used to communicate with the Workday API.\",\n-                                \"displayName\": \"Web Client Service Provider\",\n+                            },\n+                            \"proxy-password\": {\n+                                \"description\": \"Proxy Password\",\n+                                \"displayName\": \"Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Web Client Service Provider\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"proxy-username\": {\n+                                \"description\": \"Proxy Username\",\n+                                \"displayName\": \"Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"scroll-es-fields\": {\n+                                \"description\": \"A comma-separated list of fields to retrieve from the document. If the Fields property is left blank, then the entire document's source will be retrieved.\",\n+                                \"displayName\": \"Fields\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scroll-es-fields\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"scroll-es-index\": {\n+                                \"description\": \"The name of the index to read from. If the property is set to _all, the query will match across all indexes.\",\n+                                \"displayName\": \"Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scroll-es-index\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Workday Password\": {\n-                                \"description\": \"The password provided for authentication of Workday requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n-                                \"displayName\": \"Workday Password\",\n+                            \"scroll-es-query\": {\n+                                \"description\": \"The Lucene-style query to run against ElasticSearch (e.g., genre:blues AND -artist:muddy)\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Workday Password\",\n+                                \"name\": \"scroll-es-query\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Workday Report URL\": {\n-                                \"description\": \"HTTP remote URL of Workday report including a scheme of http or https, as well as a hostname or IP address with optional port and path elements.\",\n-                                \"displayName\": \"Workday Report URL\",\n+                            \"scroll-es-scroll\": {\n+                                \"defaultValue\": \"1m\",\n+                                \"description\": \"The scroll duration is how long each search context is kept in memory.\",\n+                                \"displayName\": \"Scroll Duration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Workday Report URL\",\n+                                \"name\": \"scroll-es-scroll\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Workday Username\": {\n-                                \"description\": \"The username provided for authentication of Workday requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n-                                \"displayName\": \"Workday Username\",\n+                            \"scroll-es-size\": {\n+                                \"defaultValue\": \"20\",\n+                                \"description\": \"Determines how many documents to return per page during scrolling.\",\n+                                \"displayName\": \"Page Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Workday Username\",\n+                                \"name\": \"scroll-es-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"scroll-es-sort\": {\n+                                \"description\": \"A sort parameter (e.g., timestamp:asc). If the Sort property is left blank, then the results will be retrieved in document order.\",\n+                                \"displayName\": \"Sort\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scroll-es-sort\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"scroll-es-type\": {\n+                                \"description\": \"The type of document (if unset, the query will be against all types in the _index). This should be unset or '_doc' for Elasticsearch 7.0+.\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scroll-es-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After each successful scroll page, the latest scroll_id is persisted in scrollId as input for the next scroll call.  Once the entire query is complete, finishedQuery state will be set to true, and the processor will not execute unless this is cleared.\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"description\": \"All FlowFiles that are read from Elasticsearch are routed to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n+                                \"description\": \"All FlowFiles that cannot be read from Elasticsearch are routed to this relationship. Note that only incoming flow files will be routed to failure.\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Workday\",\n-                            \"report\"\n+                            \"elasticsearch\",\n+                            \"get\",\n+                            \"http\",\n+                            \"query\",\n+                            \"read\",\n+                            \"scroll\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.workday.GetWorkdayReport\",\n-                        \"typeDescription\": \"A processor which can interact with a configurable Workday Report. The processor can forward the content without modification, or you can transform it by providing the specific Record Reader and Record Writer services based on your needs. You can also remove fields by defining schema in the Record Writer. Supported Workday report formats are: csv, simplexml, json\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.ScrollElasticsearchHttp\",\n+                        \"typeDescription\": \"Scrolls through an Elasticsearch query using the specified connection properties. This processor is intended to be run on the primary node, and is designed for scrolling through huge result sets, as in the case of a reindex.  The state must be cleared before another query can be run.  Each page of results is returned, wrapped in a JSON object like so: { \\\"hits\\\" : [ <doc1>, <doc2>, <docn> ] }.  Note that the full body of each page of documents will be read into memory before being written to a Flow File for transfer.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The Java exception class raised when the processor fails\",\n-                                \"name\": \"getworkdayreport.java.exception.class\"\n-                            },\n-                            {\n-                                \"description\": \"The Java exception message raised when the processor fails\",\n-                                \"name\": \"getworkdayreport.java.exception.message\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Source / Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The Elasticsearch index containing the document\",\n+                                \"name\": \"es.index\"\n                             },\n                             {\n-                                \"description\": \"The number of records in an outgoing FlowFile. This is only populated on the 'success' relationship when Record Reader and Writer is set.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The Elasticsearch document type\",\n+                                \"name\": \"es.type\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-prometheus-nar\",\n+            \"artifact\": \"nifi-metrics-reporter-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hashicorp-vault-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-prometheus-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hashicorp-vault-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Allows any Spring Vault property keys to be specified, as described in (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration). See Additional Details for more information.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A Spring Vault configuration property name\",\n+                                \"value\": \"The property value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"prometheus-reporting-task-client-auth\": {\n+                            \"configuration-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ReportingTask will not authenticate clients. Anyone can communicate with this ReportingTask anonymously\",\n-                                        \"displayName\": \"No Authentication\",\n-                                        \"value\": \"No Authentication\"\n+                                        \"description\": \"Use properties, including dynamic properties, configured directly in the Controller Service to configure the client\",\n+                                        \"displayName\": \"Direct Properties\",\n+                                        \"value\": \"direct-properties\"\n                                     },\n                                     {\n-                                        \"description\": \"ReportingTask will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n-                                        \"displayName\": \"Want Authentication\",\n-                                        \"value\": \"Want Authentication\"\n+                                        \"description\": \"Use one or more '.properties' files to configure the client\",\n+                                        \"displayName\": \"Properties Files\",\n+                                        \"value\": \"properties-files\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"direct-properties\",\n+                                \"description\": \"Specifies the source of the configuration properties.\",\n+                                \"displayName\": \"Configuration Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"configuration-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"vault.authentication\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TOKEN\",\n+                                        \"value\": \"TOKEN\"\n                                     },\n                                     {\n-                                        \"description\": \"ReportingTask will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n-                                        \"displayName\": \"Need Authentication\",\n-                                        \"value\": \"Need Authentication\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"APPID\",\n+                                        \"value\": \"APPID\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"APPROLE\",\n+                                        \"value\": \"APPROLE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AWS_EC2\",\n+                                        \"value\": \"AWS_EC2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AZURE\",\n+                                        \"value\": \"AZURE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CERT\",\n+                                        \"value\": \"CERT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CUBBYHOLE\",\n+                                        \"value\": \"CUBBYHOLE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KUBERNETES\",\n+                                        \"value\": \"KUBERNETES\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"No Authentication\",\n-                                \"description\": \"Specifies whether or not the Reporting Task should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n-                                \"displayName\": \"Client Authentication\",\n+                                \"defaultValue\": \"TOKEN\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"direct-properties\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Vault authentication method, as described in the Spring Vault Environment Configuration documentation (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration).\",\n+                                \"displayName\": \"Vault Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-client-auth\",\n+                                \"name\": \"vault.authentication\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-instance-id\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Prometheus\",\n-                                \"displayName\": \"Instance ID\",\n+                            \"vault.connection.timeout\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The connection timeout for the HashiCorp Vault client\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"prometheus-reporting-task-instance-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"vault.connection.timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-metrics-endpoint-port\": {\n-                                \"defaultValue\": \"9092\",\n-                                \"description\": \"The Port where prometheus metrics can be accessed\",\n-                                \"displayName\": \"Prometheus Metrics Endpoint Port\",\n+                            \"vault.properties.files\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"properties-files\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"A comma-separated list of files containing HashiCorp Vault configuration properties, as described in the Spring Vault Environment Configuration documentation (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration). All of the Spring property keys and authentication-specific property keys are supported.\",\n+                                \"displayName\": \"Vault Properties Files\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"vault.properties.files\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-ssl-context\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server willaccept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n+                            \"vault.read.timeout\": {\n+                                \"defaultValue\": \"15 sec\",\n+                                \"description\": \"The read timeout for the HashiCorp Vault client\",\n+                                \"displayName\": \"Read Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"vault.read.timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"vault.ssl.context.service\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"direct-properties\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections to the HashiCorp Vault server.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-ssl-context\",\n+                                \"name\": \"vault.ssl.context.service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"vault.uri\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"direct-properties\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The URI of the HashiCorp Vault server (e.g., http://localhost:8200).  Required if not specified in the Bootstrap HashiCorp Vault Configuration File.\",\n+                                \"displayName\": \"Vault URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"vault.uri\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultClientService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"prometheus\",\n-                            \"record\",\n-                            \"send\",\n-                            \"write\"\n+                            \"client\",\n+                            \"hashicorp\",\n+                            \"vault\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.prometheus.PrometheusRecordSink\",\n-                        \"typeDescription\": \"Specifies a Record Sink Service that exposes data points to a Prometheus scraping service. Numeric fields are exposed as Gauges, String fields are the label values for the gauges, and all other fields are ignored.\",\n+                        \"type\": \"org.apache.nifi.vault.hashicorp.StandardHashiCorpVaultClientService\",\n+                        \"typeDescription\": \"A controller service for interacting with HashiCorp Vault.\",\n                         \"version\": \"1.27.0\"\n                     }\n                 ],\n                 \"processors\": [],\n-                \"reportingTasks\": [\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hwx-schema-registry-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-prometheus-nar\",\n+                        \"artifact\": \"nifi-hwx-schema-registry-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"60 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"This controller service is deprecated and will be removed in NiFi 2.x.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"prometheus-reporting-task-client-auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"ReportingTask will not authenticate clients. Anyone can communicate with this ReportingTask anonymously\",\n-                                        \"displayName\": \"No Authentication\",\n-                                        \"value\": \"No Authentication\"\n-                                    },\n+                            \"basic-auth-password\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"ReportingTask will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n-                                        \"displayName\": \"Want Authentication\",\n-                                        \"value\": \"Want Authentication\"\n-                                    },\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"ssl-context-service\"\n+                                    }\n+                                ],\n+                                \"description\": \"The password to use for basic authentication when the Schema Registry is behind a proxy such as Apache Knox.\",\n+                                \"displayName\": \"Basic Authentication Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"basic-auth-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"basic-auth-username\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"ReportingTask will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n-                                        \"displayName\": \"Need Authentication\",\n-                                        \"value\": \"Need Authentication\"\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"ssl-context-service\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"No Authentication\",\n-                                \"description\": \"Specifies whether or not the Reporting Task should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n-                                \"displayName\": \"Client Authentication\",\n+                                \"description\": \"The username to use for basic authentication when the Schema Registry is behind a proxy such as Apache Knox.\",\n+                                \"displayName\": \"Basic Authentication Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-client-auth\",\n-                                \"required\": true,\n+                                \"name\": \"basic-auth-username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-instance-id\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Prometheus\",\n-                                \"displayName\": \"Instance ID\",\n+                            \"cache-expiration\": {\n+                                \"defaultValue\": \"1 hour\",\n+                                \"description\": \"Specifies how long a Schema that is cached should remain in the cache. Once this time period elapses, a cached version of a schema will no longer be used, and the service will have to communicate with the Hortonworks Schema Registry again in order to obtain the schema.\",\n+                                \"displayName\": \"Cache Expiration\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"prometheus-reporting-task-instance-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-expiration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-metrics-endpoint-port\": {\n-                                \"defaultValue\": \"9092\",\n-                                \"description\": \"The Port where prometheus metrics can be accessed\",\n-                                \"displayName\": \"Prometheus Metrics Endpoint Port\",\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached from the Hortonworks Schema Registry\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-metrics-send-jvm\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Send JVM metrics in addition to the NiFi metrics\",\n-                                \"displayName\": \"Send JVM metrics\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-metrics-send-jvm\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"prometheus-reporting-task-metrics-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Send rollup metrics for the entire root process group\",\n-                                        \"displayName\": \"Root Process Group\",\n-                                        \"value\": \"Root Process Group\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Send metrics for each process group\",\n-                                        \"displayName\": \"All Process Groups\",\n-                                        \"value\": \"All Process Groups\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Send metrics for each component in the system, to include processors, connections, controller services, etc.\",\n-                                        \"displayName\": \"All Components\",\n-                                        \"value\": \"All Components\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"All Components\",\n-                                \"description\": \"The granularity on which to report metrics. Options include only the root process group, all process groups, or all components\",\n-                                \"displayName\": \"Metrics Reporting Strategy\",\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password for the kerberos principal when not using the kerberos credentials service\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-metrics-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The kerberos principal to authenticate with when not using the kerberos credentials service\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kerberos-principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-ssl-context\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server willaccept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"Specifies the SSL Context Service to use for communicating with Schema Registry.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-ssl-context\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"url\": {\n+                                \"description\": \"URL of the schema registry that this Controller Service should connect to, including version. For example, http://localhost:9090/api/v1\",\n+                                \"displayName\": \"Schema Registry URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                \"version\": \"1.27.0\"\n+                            }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"metrics\",\n-                            \"prometheus\",\n-                            \"reporting\",\n-                            \"time series data\"\n+                            \"avro\",\n+                            \"hortonworks\",\n+                            \"hwx\",\n+                            \"registry\",\n+                            \"schema\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.prometheus.PrometheusReportingTask\",\n-                        \"typeDescription\": \"Reports metrics in Prometheus format by creating a /metrics HTTP(S) endpoint which can be used for external monitoring of the application. The reporting task reports a set of metrics regarding the JVM (optional) and the NiFi instance. Note that if the underlying Jetty server (i.e. the Prometheus endpoint) cannot be started (for example if two PrometheusReportingTask instances are started on the same port), this may cause a delay in shutting down NiFi while it waits for the server resources to be cleaned up.\",\n+                        \"type\": \"org.apache.nifi.schemaregistry.hortonworks.HortonworksSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a Schema Registry Service that interacts with a Hortonworks Schema Registry, available at https://github.com/hortonworks/registry\",\n                         \"version\": \"1.27.0\"\n                     }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-websocket-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n+                ],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-avro-nar\",\n+            \"artifact\": \"nifi-websocket-processors-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-avro-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-websocket-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -6035,123 +4222,119 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.avro.AvroReader\",\n-                            \"org.apache.nifi.json.JsonRecordSetWriter\",\n-                            \"org.apache.nifi.processors.standard.ConvertRecord\"\n-                        ],\n-                        \"deprecationReason\": \"ConvertAvroToJSON is no longer needed since there is the AvroReader which along with JsonRecordSetWriter can be used in ConvertRecord to achieve the same thing.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Avro schema\": {\n-                                \"description\": \"If the Avro records do not contain the schema (datum only), it must be specified here.\",\n-                                \"displayName\": \"Avro schema\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Avro schema\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"JSON container options\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"array\",\n-                                        \"value\": \"array\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"array\",\n-                                \"description\": \"Determines how stream of records is exposed: either as a sequence of single Objects (none) (i.e. writing every Object to a new line), or as an array of Objects (array).\",\n-                                \"displayName\": \"JSON container options\",\n+                            \"websocket-client-controller-service\": {\n+                                \"description\": \"A WebSocket CLIENT Controller Service which can connect to a WebSocket server.\",\n+                                \"displayName\": \"WebSocket Client ControllerService\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON container options\",\n+                                \"name\": \"websocket-client-controller-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Wrap Single Record\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Determines if the resulting output for empty records or a single record should be wrapped in a container array as specified by 'JSON container options'\",\n-                                \"displayName\": \"Wrap Single Record\",\n+                            \"websocket-client-id\": {\n+                                \"description\": \"The client ID to identify WebSocket session. It should be unique within the WebSocket Client Controller Service. Otherwise, it throws WebSocketConfigurationException when it gets started.\",\n+                                \"displayName\": \"WebSocket Client Id\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Wrap Single Record\",\n+                                \"name\": \"websocket-client-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship after it has been converted to JSON\",\n+                                \"description\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of successful connection\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be parsed as Avro or cannot be converted to JSON for any reason\",\n+                                \"description\": \"The WebSocket text message output\",\n+                                \"name\": \"text message\"\n+                            },\n+                            {\n+                                \"description\": \"The WebSocket binary message output\",\n+                                \"name\": \"binary message\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of connection failure\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The WebSocket session is established\",\n+                                \"name\": \"connected\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"convert\",\n-                            \"json\"\n+                            \"WebSocket\",\n+                            \"consume\",\n+                            \"listen\",\n+                            \"subscribe\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.avro.ConvertAvroToJSON\",\n-                        \"typeDescription\": \"Converts a Binary Avro record into a JSON object. This processor provides a direct mapping of an Avro field to a JSON field, such that the resulting JSON will have the same hierarchical structure as the Avro document. Note that the Avro schema information will be lost, as this is not a translation from binary Avro to JSON formatted Avro. The output JSON is encoded the UTF-8 encoding. If an incoming FlowFile contains a stream of multiple Avro records, the resultant FlowFile will contain a JSON Array containing all of the Avro records or a sequence of JSON Objects.  If an incoming FlowFile does not contain any records, an empty JSON object is the output. Empty/Single Avro record FlowFile inputs are optionally wrapped in a container as dictated by 'Wrap Single Record'\",\n+                        \"type\": \"org.apache.nifi.processors.websocket.ConnectWebSocket\",\n+                        \"typeDescription\": \"Acts as a WebSocket client endpoint to interact with a remote WebSocket server. FlowFiles are transferred to downstream relationships according to received message types as WebSocket client configured with this processor receives messages from remote WebSocket server. If a new flowfile is passed to the processor, the previous sessions will be closed and any data being sent will be aborted.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime type to application/json\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"WebSocket Controller Service id.\",\n+                                \"name\": \"websocket.controller.service.id\"\n+                            },\n+                            {\n+                                \"description\": \"Established WebSocket session id.\",\n+                                \"name\": \"websocket.session.id\"\n+                            },\n+                            {\n+                                \"description\": \"WebSocket endpoint id.\",\n+                                \"name\": \"websocket.endpoint.id\"\n+                            },\n+                            {\n+                                \"description\": \"WebSocket client address.\",\n+                                \"name\": \"websocket.local.address\"\n+                            },\n+                            {\n+                                \"description\": \"WebSocket server address.\",\n+                                \"name\": \"websocket.remote.address\"\n+                            },\n+                            {\n+                                \"description\": \"TEXT or BINARY.\",\n+                                \"name\": \"websocket.message.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-avro-nar\",\n+                        \"artifact\": \"nifi-websocket-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -6160,132 +4343,110 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Count Items\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true the number of items in the datafile will be counted and stored in a FlowFile attribute 'item.count'. The counting is done by reading blocks and getting the number of items for each block, thus avoiding de-serializing. The items being counted will be the top-level items in the datafile. For example, with a schema of type record the items will be the records, and for a schema of type Array the items will be the arrays (not the number of entries in each array).\",\n-                                \"displayName\": \"Count Items\",\n+                            \"server-url-path\": {\n+                                \"description\": \"The WetSocket URL Path on which this processor listens to. Must starts with '/', e.g. '/example'.\",\n+                                \"displayName\": \"Server URL Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Count Items\",\n+                                \"name\": \"server-url-path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Fingerprint Algorithm\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CRC-64-AVRO\",\n-                                        \"value\": \"CRC-64-AVRO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"CRC-64-AVRO\",\n-                                \"description\": \"The algorithm used to generate the schema fingerprint. Available choices are based on the Avro recommended practices for fingerprint generation.\",\n-                                \"displayName\": \"Fingerprint Algorithm\",\n+                            \"websocket-server-controller-service\": {\n+                                \"description\": \"A WebSocket SERVER Controller Service which can accept WebSocket requests.\",\n+                                \"displayName\": \"WebSocket Server ControllerService\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fingerprint Algorithm\",\n+                                \"name\": \"websocket-server-controller-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Metadata Keys\": {\n-                                \"description\": \"A comma-separated list of keys indicating key/value pairs to extract from the Avro file header. The key 'avro.schema' can be used to extract the full schema in JSON format, and 'avro.codec' can be used to extract the codec name if one exists.\",\n-                                \"displayName\": \"Metadata Keys\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Metadata Keys\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship after metadata has been extracted.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The WebSocket text message output\",\n+                                \"name\": \"text message\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be parsed as Avro or metadata cannot be extracted for any reason\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The WebSocket binary message output\",\n+                                \"name\": \"binary message\"\n+                            },\n+                            {\n+                                \"description\": \"The WebSocket session is established\",\n+                                \"name\": \"connected\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"metadata\",\n-                            \"schema\"\n+                            \"WebSocket\",\n+                            \"consume\",\n+                            \"listen\",\n+                            \"subscribe\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.avro.ExtractAvroMetadata\",\n-                        \"typeDescription\": \"Extracts metadata from the header of an Avro datafile.\",\n+                        \"type\": \"org.apache.nifi.processors.websocket.ListenWebSocket\",\n+                        \"typeDescription\": \"Acts as a WebSocket server endpoint to accept client connections. FlowFiles are transferred to downstream relationships according to received message types as the WebSocket server configured with this processor receives client requests\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The type of the schema (i.e. record, enum, etc.).\",\n-                                \"name\": \"schema.type\"\n+                                \"description\": \"WebSocket Controller Service id.\",\n+                                \"name\": \"websocket.controller.service.id\"\n                             },\n                             {\n-                                \"description\": \"Contains the name when the type is a record, enum or fixed, otherwise contains the name of the primitive type.\",\n-                                \"name\": \"schema.name\"\n+                                \"description\": \"Established WebSocket session id.\",\n+                                \"name\": \"websocket.session.id\"\n                             },\n                             {\n-                                \"description\": \"The result of the Fingerprint Algorithm as a Hex string.\",\n-                                \"name\": \"schema.fingerprint\"\n+                                \"description\": \"WebSocket endpoint id.\",\n+                                \"name\": \"websocket.endpoint.id\"\n                             },\n                             {\n-                                \"description\": \"The total number of items in the datafile, only written if Count Items is set to true.\",\n-                                \"name\": \"item.count\"\n+                                \"description\": \"WebSocket server address.\",\n+                                \"name\": \"websocket.local.address\"\n+                            },\n+                            {\n+                                \"description\": \"WebSocket client address.\",\n+                                \"name\": \"websocket.remote.address\"\n+                            },\n+                            {\n+                                \"description\": \"TEXT or BINARY.\",\n+                                \"name\": \"websocket.message.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-avro-nar\",\n+                        \"artifact\": \"nifi-websocket-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -6297,2994 +4458,2434 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Output Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of Avro records to include per split file. In cases where the incoming file has less records than the Output Size, or when the total number of records does not divide evenly by the Output Size, it is possible to get a split file with less records.\",\n-                                \"displayName\": \"Output Size\",\n+                            \"websocket-controller-service-id\": {\n+                                \"defaultValue\": \"${websocket.controller.service.id}\",\n+                                \"description\": \"A NiFi Expression to retrieve the id of a WebSocket ControllerService.\",\n+                                \"displayName\": \"WebSocket ControllerService Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"websocket-controller-service-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Avro's object container file format\",\n-                                        \"displayName\": \"Datafile\",\n-                                        \"value\": \"Datafile\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Bare Avro records\",\n-                                        \"displayName\": \"Bare Record\",\n-                                        \"value\": \"Bare Record\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Datafile\",\n-                                \"description\": \"Determines the format of the output. Either Avro Datafile, or bare record. Bare record output is only intended for use with systems that already require it, and shouldn't be needed for normal use.\",\n-                                \"displayName\": \"Output Strategy\",\n+                            \"websocket-endpoint-id\": {\n+                                \"defaultValue\": \"${websocket.endpoint.id}\",\n+                                \"description\": \"A NiFi Expression to retrieve the endpoint id of a WebSocket ControllerService.\",\n+                                \"displayName\": \"WebSocket Endpoint Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"websocket-endpoint-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Split Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Split at Record boundaries\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"Record\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Record\",\n-                                \"description\": \"The strategy for splitting the incoming datafile. The Record strategy will read the incoming datafile by de-serializing each record.\",\n-                                \"displayName\": \"Split Strategy\",\n+                            \"websocket-message-type\": {\n+                                \"defaultValue\": \"TEXT\",\n+                                \"description\": \"The type of message content: TEXT or BINARY\",\n+                                \"displayName\": \"WebSocket Message Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Split Strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"websocket-message-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Metadata\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to transfer metadata from the parent datafile to the children. If the Output Strategy is Bare Record, then the metadata will be stored as FlowFile attributes, otherwise it will be in the Datafile header.\",\n-                                \"displayName\": \"Transfer Metadata\",\n+                            \"websocket-session-id\": {\n+                                \"defaultValue\": \"${websocket.session.id}\",\n+                                \"description\": \"A NiFi Expression to retrieve the session id. If not specified, a message will be sent to all connected WebSocket peers for the WebSocket controller service endpoint.\",\n+                                \"displayName\": \"WebSocket Session Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Metadata\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"websocket-session-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid Avro), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile that was split. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All new files split from the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"split\"\n+                                \"description\": \"FlowFiles that failed to send to the destination are transferred to this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"systemResourceConsiderations\": [\n                             {\n                                 \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n                                 \"resource\": \"MEMORY\"\n                             }\n                         ],\n                         \"tags\": [\n-                            \"avro\",\n-                            \"split\"\n+                            \"WebSocket\",\n+                            \"publish\",\n+                            \"send\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.avro.SplitAvro\",\n-                        \"typeDescription\": \"Splits a binary encoded Avro datafile into smaller files based on the configured Output Size. The Output Strategy determines if the smaller files will be Avro datafiles, or bare Avro records with metadata in the FlowFile attributes. The output will always be binary encoded.\",\n+                        \"type\": \"org.apache.nifi.processors.websocket.PutWebSocket\",\n+                        \"typeDescription\": \"Sends messages to a WebSocket remote endpoint using a WebSocket session that is established by either ListenWebSocket or ConnectWebSocket.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n+                                \"description\": \"WebSocket Controller Service id.\",\n+                                \"name\": \"websocket.controller.service.id\"\n                             },\n                             {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"Established WebSocket session id.\",\n+                                \"name\": \"websocket.session.id\"\n                             },\n                             {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"WebSocket endpoint id.\",\n+                                \"name\": \"websocket.endpoint.id\"\n                             },\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n+                                \"description\": \"TEXT or BINARY.\",\n+                                \"name\": \"websocket.message.type\"\n+                            },\n+                            {\n+                                \"description\": \"WebSocket server address.\",\n+                                \"name\": \"websocket.local.address\"\n+                            },\n+                            {\n+                                \"description\": \"WebSocket client address.\",\n+                                \"name\": \"websocket.remote.address\"\n+                            },\n+                            {\n+                                \"description\": \"Detail of the failure.\",\n+                                \"name\": \"websocket.failure.detail\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-dropbox-processors-nar\",\n+            \"artifact\": \"nifi-dropbox-services-api-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n-                \"processors\": [\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-lookup-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dropbox-processors-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"dropbox-credential-service\": {\n-                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n-                                \"displayName\": \"Dropbox Credential Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dropbox-credential-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"file\": {\n-                                \"defaultValue\": \"${dropbox.id}\",\n-                                \"description\": \"The Dropbox identifier or path of the Dropbox file to fetch. The 'File' should match the following regular expression pattern: /.*|id:.* . When ListDropbox is used for input, either '${dropbox.id}' (identifying files by Dropbox id) or '${path}/${filename}' (identifying files by path) can be used as 'File' value.\",\n-                                \"displayName\": \"File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.dropbox.ListDropbox\",\n-                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n-                                \"name\": \"failure\"\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"dropbox\",\n-                            \"fetch\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n-                        \"typeDescription\": \"Fetches files from Dropbox. Designed to be used in tandem with ListDropbox.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The error message returned by Dropbox\",\n-                                \"name\": \"error.message\"\n-                            },\n-                            {\n-                                \"description\": \"The Dropbox identifier of the file\",\n-                                \"name\": \"dropbox.id\"\n-                            },\n-                            {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"dropbox.size\"\n-                            },\n-                            {\n-                                \"description\": \"The server modified time of the file\",\n-                                \"name\": \"dropbox.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"Revision of the file\",\n-                                \"name\": \"dropbox.revision\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dropbox-processors-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"dropbox-credential-service\": {\n-                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n-                                \"displayName\": \"Dropbox Credential Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dropbox-credential-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"et-initial-listing-target\": {\n+                            \"CSV Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n+                                        \"displayName\": \"Custom Format\",\n+                                        \"value\": \"custom\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n+                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n+                                        \"displayName\": \"RFC 4180\",\n+                                        \"value\": \"rfc-4180\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"excel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n+                                        \"displayName\": \"Tab-Delimited\",\n+                                        \"value\": \"tdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by MySQL\",\n+                                        \"displayName\": \"MySQL Format\",\n+                                        \"value\": \"mysql\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n+                                        \"displayName\": \"Informix Unload\",\n+                                        \"value\": \"informix-unload\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n+                                        \"displayName\": \"Informix Unload Escape Disabled\",\n+                                        \"value\": \"informix-unload-csv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Same as custom format. Available for compatibility reasons.\",\n+                                        \"displayName\": \"Default Format\",\n+                                        \"value\": \"default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Same as RFC 4180. Available for compatibility reasons.\",\n+                                        \"displayName\": \"RFC4180\",\n+                                        \"value\": \"RFC4180\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n+                                \"displayName\": \"CSV Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"CSV Format\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Encoding that is used to decode the CSV file.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Comment Marker\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"entities\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n+                                \"displayName\": \"Comment Marker\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Comment Marker\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n+                            \"Escape Character\": {\n+                                \"defaultValue\": \"\\\\\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"entities\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n+                                \"displayName\": \"Escape Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Escape Character\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"folder\": {\n-                                \"defaultValue\": \"/\",\n-                                \"description\": \"The Dropbox identifier or path of the folder from which to pull list of files. 'Folder' should match the following regular expression pattern: /.*|id:.* . Example for folder identifier: id:odTlUvbpIEAAAAAAAAAGGQ. Example for folder path: /Team1/Task1.\",\n-                                \"displayName\": \"Folder\",\n+                            \"Quote Character\": {\n+                                \"defaultValue\": \"\\\"\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n+                                \"displayName\": \"Quote Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"folder\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Quote Character\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"Quote Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n+                                        \"description\": \"All values will be quoted using the configured quote character.\",\n+                                        \"displayName\": \"Quote All Values\",\n+                                        \"value\": \"ALL\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n+                                        \"displayName\": \"Quote Minimal\",\n+                                        \"value\": \"MINIMAL\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n-                                        \"displayName\": \"Time Window\",\n-                                        \"value\": \"time-window\"\n+                                        \"description\": \"Values will be quoted unless the value is a number.\",\n+                                        \"displayName\": \"Quote Non-Numeric Values\",\n+                                        \"value\": \"NON_NUMERIC\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n+                                        \"displayName\": \"Do Not Quote Values\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"MINIMAL\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies how fields should be quoted when they are written\",\n+                                \"displayName\": \"Quote Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"Quote Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age a file must be in order to be considered; any files newer than this will be ignored.\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"Trim Fields\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n+                                \"displayName\": \"Trim Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n+                                \"name\": \"Trim Fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Value Separator\": {\n+                                \"defaultValue\": \",\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n+                                \"displayName\": \"Value Separator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Value Separator\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"csv-file\": {\n+                                \"description\": \"Path to a CSV File in which the key value pairs can be looked up.\",\n+                                \"displayName\": \"CSV File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"csv-file\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"recursive-search\": {\n+                            \"ignore-duplicates\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subfolders of the Dropbox folder.\",\n-                                \"displayName\": \"Search Recursively\",\n+                                \"description\": \"Ignore duplicate keys for records in the CSV file.\",\n+                                \"displayName\": \"Ignore Duplicates\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recursive-search\",\n+                                \"name\": \"ignore-duplicates\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-key-column\": {\n+                                \"description\": \"The field in the CSV file that will serve as the lookup key. This is the field that will be matched against the property specified in the lookup processor.\",\n+                                \"displayName\": \"Lookup Key Column\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"lookup-key-column\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n-                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"dropbox\",\n-                            \"storage\"\n+                            \"cache\",\n+                            \"csv\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"record\",\n+                            \"reloadable\",\n+                            \"value\"\n                         ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.dropbox.ListDropbox\",\n-                        \"typeDescription\": \"Retrieves a listing of files from Dropbox (shortcuts are ignored). Each listed file may result in one FlowFile, the metadata being written as FlowFile attributes. When the 'Record Writer' property is set, the entire result is written as records to a single FlowFile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The Dropbox identifier of the file\",\n-                                \"name\": \"dropbox.id\"\n-                            },\n-                            {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"dropbox.size\"\n-                            },\n-                            {\n-                                \"description\": \"The server modified time of the file\",\n-                                \"name\": \"dropbox.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"Revision of the file\",\n-                                \"name\": \"dropbox.revision\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.lookup.CSVRecordLookupService\",\n+                        \"typeDescription\": \"A reloadable CSV file-based lookup service. When the lookup key is found in the CSV file, the columns are returned as a Record. All returned fields will be strings. The first line of the csv file is considered as header.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dropbox-processors-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"chunked-upload-size\": {\n-                                \"defaultValue\": \"8 MB\",\n-                                \"description\": \"Defines the size of a chunk. Used when a FlowFile's size exceeds 'Chunked Upload Threshold' and content is uploaded in smaller chunks. It is recommended to specify chunked upload size smaller than 'Chunked Upload Threshold' and as multiples of 4 MB. Maximum allowed value is 150 MB.\",\n-                                \"displayName\": \"Chunked Upload Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"chunked-upload-threshold\": {\n-                                \"defaultValue\": \"150 MB\",\n-                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks. Maximum allowed value is 150 MB.\",\n-                                \"displayName\": \"Chunked Upload Threshold\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-threshold\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"conflict-resolution-strategy\": {\n+                            \"character-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Handle file conflict as failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Ignore conflict, do not change the original file.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n                                     },\n                                     {\n-                                        \"description\": \"Replace existing file in case of conflict.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16\",\n+                                        \"value\": \"UTF-16\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16LE\",\n+                                        \"value\": \"UTF-16LE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16BE\",\n+                                        \"value\": \"UTF-16BE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US-ASCII\",\n+                                        \"value\": \"US-ASCII\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Dropbox folder.\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies a character encoding to use.\",\n+                                \"displayName\": \"Character Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"name\": \"character-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dropbox-credential-service\": {\n-                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n-                                \"displayName\": \"Dropbox Credential Service\",\n+                            \"distributed-map-cache-service\": {\n+                                \"description\": \"The Controller Service that is used to get the cached values.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dropbox-credential-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The full name of the file to upload.\",\n-                                \"displayName\": \"Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"folder\": {\n-                                \"defaultValue\": \"/\",\n-                                \"description\": \"The path of the Dropbox folder to upload files to. The folder will be created if it does not exist yet.\",\n-                                \"displayName\": \"Folder\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"folder\",\n+                                \"name\": \"distributed-map-cache-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the Dropbox object.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n-                            \"org.apache.nifi.processors.dropbox.ListDropbox\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to Dropbox are transferred to this relationship.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.27.0\"\n                             },\n                             {\n-                                \"description\": \"Files that could not be written to Dropbox for some reason are transferred to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"dropbox\",\n-                            \"put\",\n-                            \"storage\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"enrich\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"map\",\n+                            \"value\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.dropbox.PutDropbox\",\n-                        \"typeDescription\": \"Puts content to a Dropbox folder.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The error message returned by Dropbox\",\n-                                \"name\": \"error.message\"\n-                            },\n-                            {\n-                                \"description\": \"The Dropbox identifier of the file\",\n-                                \"name\": \"dropbox.id\"\n-                            },\n-                            {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"dropbox.size\"\n-                            },\n-                            {\n-                                \"description\": \"The server modified time of the file\",\n-                                \"name\": \"dropbox.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"Revision of the file\",\n-                                \"name\": \"dropbox.revision\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-couchbase-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-standard-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cassandra-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-rethinkdb-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"type\": \"org.apache.nifi.lookup.DistributedMapCacheLookupService\",\n+                        \"typeDescription\": \"Allows to choose a distributed map cache client to retrieve the value associated to a key. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-rethinkdb-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"RethinkDB 2.4 requires API changes that would alter the configuration and behavior of this Processor\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"rethinkdb-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"configuration-file\": {\n+                                \"description\": \"A configuration file\",\n+                                \"displayName\": \"Configuration File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-charset\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"configuration-file\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.27.0\"\n                             },\n-                            \"rethinkdb-dbname\": {\n-                                \"description\": \"RethinkDB database to connect to\",\n-                                \"displayName\": \"DB Name\",\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"properties\",\n+                            \"reloadable\",\n+                            \"value\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.PropertiesFileLookupService\",\n+                        \"typeDescription\": \"A reloadable properties file-based lookup service\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"All dynamic properties are added as HTTP headers with the name as the header name and the value as the header value.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"*\",\n+                                \"value\": \"*\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-dbname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"rethinkdb-document-identifier\": {\n-                                \"description\": \"A FlowFile attribute, or attribute expression used for determining RethinkDB key for the Flow File content\",\n-                                \"displayName\": \"Document Identifier\",\n+                            \"rest-lookup-basic-auth-password\": {\n+                                \"description\": \"The password to be used by the client to authenticate against the Remote URL.\",\n+                                \"displayName\": \"Basic Authentication Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-document-identifier\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"rest-lookup-basic-auth-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"rethinkdb-durability\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Save change to disk before ack\",\n-                                        \"displayName\": \"Hard\",\n-                                        \"value\": \"hard\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Don't save changes to disk before ack\",\n-                                        \"displayName\": \"Soft\",\n-                                        \"value\": \"soft\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"hard\",\n-                                \"description\": \"Durability of documents being inserted\",\n-                                \"displayName\": \"Durablity of documents\",\n+                            \"rest-lookup-basic-auth-username\": {\n+                                \"description\": \"The username to be used by the client to authenticate against the Remote URL.  Cannot include control characters (0-31), ':', or DEL (127).\",\n+                                \"displayName\": \"Basic Authentication Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-durability\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"rest-lookup-basic-auth-username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-host\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"RethinkDB hostname\",\n-                                \"displayName\": \"Hostname\",\n+                            \"rest-lookup-connection-timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Max wait time for connection to remote service.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-host\",\n+                                \"name\": \"rest-lookup-connection-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-password\": {\n-                                \"description\": \"Password for user\",\n-                                \"displayName\": \"Password\",\n+                            \"rest-lookup-digest-auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to communicate with the website using Digest Authentication. 'Basic Authentication Username' and 'Basic Authentication Password' are used for authentication.\",\n+                                \"displayName\": \"Use Digest Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-password\",\n+                                \"name\": \"rest-lookup-digest-auth\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"rethinkdb-port\": {\n-                                \"defaultValue\": \"28015\",\n-                                \"description\": \"RethinkDB database port to connect to\",\n-                                \"displayName\": \"DB Port\",\n+                            \"rest-lookup-read-timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for response from remote service.\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-port\",\n+                                \"name\": \"rest-lookup-read-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-return-result\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Return changed document\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Do not return changed document\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Return old value which were deleted\",\n-                                \"displayName\": \"Return deleted value\",\n+                            \"rest-lookup-record-path\": {\n+                                \"description\": \"An optional record path that can be used to define where in a record to get the real data to merge into the record set to be enriched. See documentation for examples of when this might be useful.\",\n+                                \"displayName\": \"Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-return-result\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"rest-lookup-record-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-table\": {\n-                                \"description\": \"RethinkDB table to connect to\",\n-                                \"displayName\": \"Table name\",\n+                            \"rest-lookup-record-reader\": {\n+                                \"description\": \"The record reader to use for loading the payload and handling it as a record set.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-table\",\n+                                \"name\": \"rest-lookup-record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"rethinkdb-username\": {\n-                                \"description\": \"Username for accessing RethinkDB\",\n-                                \"displayName\": \"Username\",\n+                            \"rest-lookup-ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-username\",\n+                                \"name\": \"rest-lookup-ssl-context-service\",\n                                 \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"rest-lookup-url\": {\n+                                \"description\": \"The URL for the REST endpoint. Expression language is evaluated against the lookup key/value pairs, not flowfile attributes.\",\n+                                \"displayName\": \"URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"rest-lookup-url\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.rethinkdb.GetRethinkDB\",\n-                            \"org.apache.nifi.processors.rethinkdb.PutRethinkDB\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Sucessful FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Document not found are routed to this relationship\",\n-                                \"name\": \"not_found\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n                             },\n                             {\n-                                \"description\": \"Failed FlowFiles are routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"delete\",\n-                            \"remove\",\n-                            \"rethinkdb\"\n+                            \"http\",\n+                            \"json\",\n+                            \"lookup\",\n+                            \"rest\",\n+                            \"xml\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.rethinkdb.DeleteRethinkDB\",\n-                        \"typeDescription\": \"Processor to remove a JSON document from RethinkDB (https://www.rethinkdb.com/) using the document id.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"RethinkDB error message\",\n-                                \"name\": \"rethinkdb.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"Error count while delete documents\",\n-                                \"name\": \"rethinkdb.delete.errors\"\n-                            },\n+                        \"type\": \"org.apache.nifi.lookup.RestLookupService\",\n+                        \"typeDescription\": \"Use a REST service to look up values.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Number of documents deleted\",\n-                                \"name\": \"rethinkdb.delete.deleted\"\n-                            },\n-                            {\n-                                \"description\": \"Number of documents inserted\",\n-                                \"name\": \"rethinkdb.delete.inserted\"\n-                            },\n-                            {\n-                                \"description\": \"Number of documents replaced\",\n-                                \"name\": \"rethinkdb.delete.replaced\"\n-                            },\n-                            {\n-                                \"description\": \"Number of documents skipped\",\n-                                \"name\": \"rethinkdb.delete.skipped\"\n-                            },\n-                            {\n-                                \"description\": \"Number of documents unchanged since they already existed\",\n-                                \"name\": \"rethinkdb.delete.unchanged\"\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n                             }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-rethinkdb-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"RethinkDB 2.4 requires API changes that would alter the configuration and behavior of this Processor\",\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"rethinkdb-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-charset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"rethinkdb-dbname\": {\n-                                \"description\": \"RethinkDB database to connect to\",\n-                                \"displayName\": \"DB Name\",\n+                            \"CSV Format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n+                                        \"displayName\": \"Custom Format\",\n+                                        \"value\": \"custom\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n+                                        \"displayName\": \"RFC 4180\",\n+                                        \"value\": \"rfc-4180\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"excel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n+                                        \"displayName\": \"Tab-Delimited\",\n+                                        \"value\": \"tdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by MySQL\",\n+                                        \"displayName\": \"MySQL Format\",\n+                                        \"value\": \"mysql\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n+                                        \"displayName\": \"Informix Unload\",\n+                                        \"value\": \"informix-unload\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n+                                        \"displayName\": \"Informix Unload Escape Disabled\",\n+                                        \"value\": \"informix-unload-csv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Same as custom format. Available for compatibility reasons.\",\n+                                        \"displayName\": \"Default Format\",\n+                                        \"value\": \"default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Same as RFC 4180. Available for compatibility reasons.\",\n+                                        \"displayName\": \"RFC4180\",\n+                                        \"value\": \"RFC4180\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n+                                \"displayName\": \"CSV Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-dbname\",\n+                                \"name\": \"CSV Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-document-identifier\": {\n-                                \"description\": \"A FlowFile attribute, or attribute expression used for determining RethinkDB key for the Flow File content\",\n-                                \"displayName\": \"Document Identifier\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Encoding that is used to decode the CSV file.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-document-identifier\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-host\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"RethinkDB hostname\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Comment Marker\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n+                                \"displayName\": \"Comment Marker\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-host\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Comment Marker\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-max-document-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Maximum size of documents allowed to be posted in one batch\",\n-                                \"displayName\": \"Max size of documents\",\n+                            \"Escape Character\": {\n+                                \"defaultValue\": \"\\\\\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n+                                \"displayName\": \"Escape Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-max-document-size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Escape Character\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-password\": {\n-                                \"description\": \"Password for user\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"rethinkdb-port\": {\n-                                \"defaultValue\": \"28015\",\n-                                \"description\": \"RethinkDB database port to connect to\",\n-                                \"displayName\": \"DB Port\",\n+                            \"Quote Character\": {\n+                                \"defaultValue\": \"\\\"\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n+                                \"displayName\": \"Quote Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Quote Character\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-read-mode\": {\n+                            \"Quote Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Read values from memory from primary replica (Default)\",\n-                                        \"displayName\": \"Single\",\n-                                        \"value\": \"single\"\n+                                        \"description\": \"All values will be quoted using the configured quote character.\",\n+                                        \"displayName\": \"Quote All Values\",\n+                                        \"value\": \"ALL\"\n                                     },\n                                     {\n-                                        \"description\": \"Read values committed to disk on majority of replicas\",\n-                                        \"displayName\": \"Majority\",\n-                                        \"value\": \"majority\"\n+                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n+                                        \"displayName\": \"Quote Minimal\",\n+                                        \"value\": \"MINIMAL\"\n                                     },\n                                     {\n-                                        \"description\": \"Read values from memory from an arbitrary replica \",\n-                                        \"displayName\": \"Outdated\",\n-                                        \"value\": \"outdated\"\n+                                        \"description\": \"Values will be quoted unless the value is a number.\",\n+                                        \"displayName\": \"Quote Non-Numeric Values\",\n+                                        \"value\": \"NON_NUMERIC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n+                                        \"displayName\": \"Do Not Quote Values\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"single\",\n-                                \"description\": \"Read mode used for consistency\",\n-                                \"displayName\": \"Read Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-read-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"rethinkdb-table\": {\n-                                \"description\": \"RethinkDB table to connect to\",\n-                                \"displayName\": \"Table name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-table\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"rethinkdb-username\": {\n-                                \"description\": \"Username for accessing RethinkDB\",\n-                                \"displayName\": \"Username\",\n+                                \"defaultValue\": \"MINIMAL\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies how fields should be quoted when they are written\",\n+                                \"displayName\": \"Quote Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.rethinkdb.DeleteRethinkDB\",\n-                            \"org.apache.nifi.processors.rethinkdb.PutRethinkDB\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Sucessful FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Document not found are routed to this relationship\",\n-                                \"name\": \"not_found\"\n-                            },\n-                            {\n-                                \"description\": \"Failed FlowFiles are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"fetch\",\n-                            \"get\",\n-                            \"read\",\n-                            \"rethinkdb\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.rethinkdb.GetRethinkDB\",\n-                        \"typeDescription\": \"Processor to get a JSON document from RethinkDB (https://www.rethinkdb.com/) using the document id. The FlowFile will contain the retrieved document\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"RethinkDB error message\",\n-                                \"name\": \"rethinkdb.error.message\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-rethinkdb-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"RethinkDB 2.4 requires API changes that would alter the configuration and behavior of this Processor\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"rethinkdb-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-charset\",\n+                                \"name\": \"Quote Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-conflict-strategy\": {\n+                            \"Trim Fields\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Update the document having same id with new values\",\n-                                        \"displayName\": \"Update\",\n-                                        \"value\": \"update\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Replace the document with having same id new document\",\n-                                        \"displayName\": \"Replace\",\n-                                        \"value\": \"replace\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Return error if the document with same id exists\",\n-                                        \"displayName\": \"Error\",\n-                                        \"value\": \"error\"\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"update\",\n-                                \"description\": \"Conflict strategy to be used in case of inserting existing document.\",\n-                                \"displayName\": \"Conflict strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-conflict-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"rethinkdb-dbname\": {\n-                                \"description\": \"RethinkDB database to connect to\",\n-                                \"displayName\": \"DB Name\",\n+                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n+                                \"displayName\": \"Trim Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-dbname\",\n+                                \"name\": \"Trim Fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-durability\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Save change to disk before ack\",\n-                                        \"displayName\": \"Hard\",\n-                                        \"value\": \"hard\"\n-                                    },\n+                            \"Value Separator\": {\n+                                \"defaultValue\": \",\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Don't save changes to disk before ack\",\n-                                        \"displayName\": \"Soft\",\n-                                        \"value\": \"soft\"\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"hard\",\n-                                \"description\": \"Durability of documents being inserted\",\n-                                \"displayName\": \"Durablity of documents\",\n+                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n+                                \"displayName\": \"Value Separator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-durability\",\n+                                \"name\": \"Value Separator\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-host\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"RethinkDB hostname\",\n-                                \"displayName\": \"Hostname\",\n+                            \"csv-file\": {\n+                                \"description\": \"Path to a CSV File in which the key value pairs can be looked up.\",\n+                                \"displayName\": \"CSV File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-host\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"csv-file\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-max-document-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Maximum size of documents allowed to be posted in one batch\",\n-                                \"displayName\": \"Max size of documents\",\n+                            \"ignore-duplicates\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Ignore duplicate keys for records in the CSV file.\",\n+                                \"displayName\": \"Ignore Duplicates\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-max-document-size\",\n+                                \"name\": \"ignore-duplicates\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-password\": {\n-                                \"description\": \"Password for user\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"rethinkdb-port\": {\n-                                \"defaultValue\": \"28015\",\n-                                \"description\": \"RethinkDB database port to connect to\",\n-                                \"displayName\": \"DB Port\",\n+                            \"lookup-key-column\": {\n+                                \"description\": \"The field in the CSV file that will serve as the lookup key. This is the field that will be matched against the property specified in the lookup processor.\",\n+                                \"displayName\": \"Lookup Key Column\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-port\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"lookup-key-column\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-table\": {\n-                                \"description\": \"RethinkDB table to connect to\",\n-                                \"displayName\": \"Table name\",\n+                            \"lookup-value-column\": {\n+                                \"description\": \"Lookup value column.\",\n+                                \"displayName\": \"Lookup Value Column\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-table\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"lookup-value-column\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"rethinkdb-username\": {\n-                                \"description\": \"Username for accessing RethinkDB\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.rethinkdb.DeleteRethinkDB\",\n-                            \"org.apache.nifi.processors.rethinkdb.GetRethinkDB\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Sucessful FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.27.0\"\n                             },\n                             {\n-                                \"description\": \"Failed FlowFiles are routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"insert\",\n-                            \"put\",\n-                            \"rethinkdb\",\n-                            \"stream\",\n-                            \"update\",\n-                            \"write\"\n+                            \"cache\",\n+                            \"csv\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"reloadable\",\n+                            \"value\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.rethinkdb.PutRethinkDB\",\n-                        \"typeDescription\": \"Processor to write the JSON content of a FlowFile to RethinkDB (https://www.rethinkdb.com/). The flow file should contain either JSON Object an array of JSON documents\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"RethinkDB error message\",\n-                                \"name\": \"rethinkdb.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"Error count while inserting documents\",\n-                                \"name\": \"rethinkdb.insert.errors\"\n-                            },\n-                            {\n-                                \"description\": \"Number of documents deleted\",\n-                                \"name\": \"rethinkdb.insert.deleted\"\n-                            },\n-                            {\n-                                \"description\": \"Keys generated on inserting documents\",\n-                                \"name\": \"rethinkdb.insert.generated_keys\"\n-                            },\n-                            {\n-                                \"description\": \"Number of documents inserted\",\n-                                \"name\": \"rethinkdb.insert.inserted\"\n-                            },\n-                            {\n-                                \"description\": \"Number of documents replaced\",\n-                                \"name\": \"rethinkdb.insert.replaced\"\n-                            },\n-                            {\n-                                \"description\": \"Number of documents skipped because they already existed\",\n-                                \"name\": \"rethinkdb.insert.skipped\"\n-                            },\n+                        \"type\": \"org.apache.nifi.lookup.SimpleCsvFileLookupService\",\n+                        \"typeDescription\": \"A reloadable CSV file-based lookup service. The first line of the csv file is considered as header.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Number of documents unchanged since they already existed\",\n-                                \"name\": \"rethinkdb.insert.unchanged\"\n-                            },\n+                                \"description\": \"Allows users to add key/value pairs as User-defined Properties. Each property that is added can be looked up by Property Name. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A key that can be looked up\",\n+                                \"value\": \"The value for the key\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"First error while inserting documents\",\n-                                \"name\": \"rethinkdb.insert.first_error\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.27.0\"\n                             },\n                             {\n-                                \"description\": \"Warning message in case of large number of ids being returned on insertion\",\n-                                \"name\": \"rethinkdb.insert.warnings\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n                             }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hazelcast-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"enrich\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"value\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.SimpleKeyValueLookupService\",\n+                        \"typeDescription\": \"Allows users to add key/value pairs as User-defined Properties. Each property that is added can be looked up by Property Name. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"hazelcast-cache-manager\": {\n-                                \"description\": \"A Hazelcast Cache Manager which manages connections to Hazelcast and provides cache instances.\",\n-                                \"displayName\": \"Hazelcast Cache Manager\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-cache-manager\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-hazelcast-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"hazelcast-cache-name\": {\n-                                \"description\": \"The name of a given cache. A Hazelcast cluster may handle multiple independent caches, each identified by a name. Clients using caches with the same name are working on the same data structure within Hazelcast.\",\n-                                \"displayName\": \"Hazelcast Cache Name\",\n+                            \"configuration-file\": {\n+                                \"description\": \"A configuration file\",\n+                                \"displayName\": \"Configuration File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hazelcast-cache-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hazelcast-entry-ttl\": {\n-                                \"defaultValue\": \"5 min\",\n-                                \"description\": \"Indicates how long the written entries should exist in Hazelcast. Setting it to '0 secs' means that the datawill exists until its deletion or until the Hazelcast server is shut down. Using `EmbeddedHazelcastCacheManager` ascache manager will not provide policies to limit the size of the cache.\",\n-                                \"displayName\": \"Hazelcast Entry Lifetime\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-entry-ttl\",\n+                                \"name\": \"configuration-file\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n                                 \"version\": \"1.27.0\"\n                             },\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n                             \"cache\",\n-                            \"hazelcast\",\n-                            \"map\"\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"reloadable\",\n+                            \"value\",\n+                            \"xml\"\n                         ],\n-                        \"type\": \"org.apache.nifi.hazelcast.services.cacheclient.HazelcastMapCacheClient\",\n-                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Hazelcast as the backing cache. This service relies on an other controller service, manages the actual Hazelcast calls, set in Hazelcast Cache Manager.\",\n+                        \"type\": \"org.apache.nifi.lookup.XMLFileLookupService\",\n+                        \"typeDescription\": \"A reloadable XML file-based lookup service. This service uses Apache Commons Configuration. Example XML configuration file and how to access specific configuration can be found at http://commons.apache.org/proper/commons-configuration/userguide/howto_hierarchical.html. External entity processing is disabled.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"hazelcast-cluster-name\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"Name of the Hazelcast cluster.\",\n-                                \"displayName\": \"Hazelcast Cluster Name\",\n+                            \"Cache Expiration\": {\n+                                \"description\": \"Time interval to clear all cache entries. If the Cache Size is zero then this property is ignored.\",\n+                                \"displayName\": \"Cache Expiration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hazelcast-cluster-name\",\n+                                \"name\": \"Cache Expiration\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-clustering-strategy\": {\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbrecord-lookup-cache-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies how many lookup values/records should be cached. The cache is shared for all tables and keeps a map of lookup values to records. Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n+                                \"displayName\": \"Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbrecord-lookup-cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbrecord-lookup-clear-cache-on-enabled\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No high availability or data replication is provided, every node has access only to the data stored locally.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Creates Hazelcast cluster based on the NiFi cluster: It expects every NiFi nodes to have a running Hazelcast instance on the same port as specified in the Hazelcast Port property. No explicit listing of the instances is needed.\",\n-                                        \"displayName\": \"All Nodes\",\n-                                        \"value\": \"all_nodes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Works with an explicit list of Hazelcast instances, creating a cluster using the listed instances. This provides greater control, making it possible to utilize only certain nodes as Hazelcast servers. The list of Hazelcast instances can be set in the property \\\"Hazelcast Instances\\\". The list items must refer to hosts within the NiFi cluster, no external Hazelcast is allowed. NiFi nodes are not listed will be join to the Hazelcast cluster as clients.\",\n-                                        \"displayName\": \"Explicit\",\n-                                        \"value\": \"explicit\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"Specifies with what strategy the Hazelcast cluster should be created.\",\n-                                \"displayName\": \"Hazelcast Clustering Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to clear the cache when this service is enabled. If the Cache Size is zero then this property is ignored. Clearing the cache when the service is enabled ensures that the service will first go to the database to get the most recent data.\",\n+                                \"displayName\": \"Clear Cache on Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-clustering-strategy\",\n+                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-instances\": {\n-                                \"description\": \"Only used with \\\"Explicit\\\" Clustering Strategy! List of NiFi instance host names which should be part of the Hazelcast cluster. Host names are separated by comma. The port specified in the \\\"Hazelcast Port\\\" property will be used as server port. The list must contain every instance that will be part of the cluster. Other instances will join the Hazelcast cluster as clients.\",\n-                                \"displayName\": \"Hazelcast Instances\",\n+                            \"dbrecord-lookup-dbcp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dbrecord-lookup-dbcp-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"dbrecord-lookup-key-column\": {\n+                                \"description\": \"The column in the table that will serve as the lookup key. This is the column that will be matched against the property specified in the lookup processor. Note that this may be case-sensitive depending on the database.\",\n+                                \"displayName\": \"Lookup Key Column\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hazelcast-instances\",\n-                                \"required\": false,\n+                                \"name\": \"dbrecord-lookup-key-column\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-port\": {\n-                                \"defaultValue\": \"5701\",\n-                                \"description\": \"Port for the Hazelcast instance to use.\",\n-                                \"displayName\": \"Hazelcast Port\",\n+                            \"dbrecord-lookup-table-name\": {\n+                                \"description\": \"The name of the database table to be queried. Note that this may be case-sensitive depending on the database.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hazelcast-port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbrecord-lookup-table-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"dbrecord-lookup-value-columns\": {\n+                                \"description\": \"A comma-delimited list of columns in the table that will be returned when the lookup key matches. Note that this may be case-sensitive depending on the database.\",\n+                                \"displayName\": \"Lookup Value Columns\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbrecord-lookup-value-columns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n                             \"cache\",\n-                            \"hazelcast\"\n+                            \"database\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"rdbms\",\n+                            \"record\",\n+                            \"reloadable\",\n+                            \"value\"\n                         ],\n-                        \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.EmbeddedHazelcastCacheManager\",\n-                        \"typeDescription\": \"A service that runs embedded Hazelcast and provides cache instances backed by that. The server does not ask for authentication, it is recommended to run it within secured network.\",\n+                        \"type\": \"org.apache.nifi.lookup.db.DatabaseRecordLookupService\",\n+                        \"typeDescription\": \"A relational-database-based lookup service. When the lookup key is found in the database, the specified columns (or all if Lookup Value Columns are not specified) are returned as a Record. Only one row will be returned for each lookup, duplicate database entries are ignored.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"hazelcast-cluster-name\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"Name of the Hazelcast cluster.\",\n-                                \"displayName\": \"Hazelcast Cluster Name\",\n+                            \"Cache Expiration\": {\n+                                \"description\": \"Time interval to clear all cache entries. If the Cache Size is zero then this property is ignored.\",\n+                                \"displayName\": \"Cache Expiration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hazelcast-cluster-name\",\n-                                \"required\": true,\n+                                \"name\": \"Cache Expiration\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-connection-timeout\": {\n-                                \"defaultValue\": \"20 secs\",\n-                                \"description\": \"The maximum amount of time the client tries to connect or reconnect before giving up.\",\n-                                \"displayName\": \"Hazelcast Connection Timeout\",\n+                            \"dbrecord-lookup-cache-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies how many lookup values/records should be cached. The cache is shared for all tables and keeps a map of lookup values to records. Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-connection-timeout\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbrecord-lookup-cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-retry-backoff-initial\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"description\": \"The amount of time the client waits before it tries to reestablish connection for the first time.\",\n-                                \"displayName\": \"Hazelcast Initial Backoff\",\n+                            \"dbrecord-lookup-clear-cache-on-enabled\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to clear the cache when this service is enabled. If the Cache Size is zero then this property is ignored. Clearing the cache when the service is enabled ensures that the service will first go to the database to get the most recent data.\",\n+                                \"displayName\": \"Clear Cache on Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-retry-backoff-initial\",\n+                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-retry-backoff-maximum\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"The maximum amount of time the client waits before it tries to reestablish connection.\",\n-                                \"displayName\": \"Hazelcast Maximum Backoff\",\n+                            \"dbrecord-lookup-dbcp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-retry-backoff-maximum\",\n+                                \"name\": \"dbrecord-lookup-dbcp-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"dbrecord-lookup-key-column\": {\n+                                \"description\": \"The column in the table that will serve as the lookup key. This is the column that will be matched against the property specified in the lookup processor. Note that this may be case-sensitive depending on the database.\",\n+                                \"displayName\": \"Lookup Key Column\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbrecord-lookup-key-column\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-retry-backoff-multiplier\": {\n-                                \"defaultValue\": \"1.5\",\n-                                \"description\": \"A multiplier by which the wait time is increased before each attempt to reestablish connection.\",\n-                                \"displayName\": \"Hazelcast Backoff Multiplier\",\n+                            \"dbrecord-lookup-table-name\": {\n+                                \"description\": \"The name of the database table to be queried. Note that this may be case-sensitive depending on the database.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-retry-backoff-multiplier\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbrecord-lookup-table-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-server-address\": {\n-                                \"description\": \"Addresses of one or more the Hazelcast instances, using {host:port} format, separated by comma.\",\n-                                \"displayName\": \"Hazelcast Server Address\",\n+                            \"lookup-value-column\": {\n+                                \"description\": \"The column whose value will be returned when the Lookup value is matched\",\n+                                \"displayName\": \"Lookup Value Column\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hazelcast-server-address\",\n+                                \"name\": \"lookup-value-column\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.27.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n                             \"cache\",\n-                            \"hazelcast\"\n+                            \"database\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"rdbms\",\n+                            \"reloadable\",\n+                            \"value\"\n                         ],\n-                        \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.ExternalHazelcastCacheManager\",\n-                        \"typeDescription\": \"A service that provides cache instances backed by Hazelcast running outside of NiFi.\",\n+                        \"type\": \"org.apache.nifi.lookup.db.SimpleDatabaseLookupService\",\n+                        \"typeDescription\": \"A relational-database-based lookup service. When the lookup key is found in the database, the specified lookup value column is returned. Only one value will be returned for each lookup, duplicate database entries are ignored.\",\n                         \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-asana-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-gcp-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-proxy-configuration-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-proxy-configuration-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"proxy-server-host\": {\n-                                \"description\": \"Proxy server hostname or ip-address.\",\n-                                \"displayName\": \"Proxy Server Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-server-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-server-port\": {\n-                                \"description\": \"Proxy server port number.\",\n-                                \"displayName\": \"Proxy Server Port\",\n+                            \"database-file\": {\n+                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n+                                \"displayName\": \"MaxMind Database File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-server-port\",\n-                                \"required\": false,\n+                                \"name\": \"database-file\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-type\": {\n+                            \"lookup-anonymous-ip\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not information about whether or not the IP address belongs to an anonymous network should be returned.\",\n+                                \"displayName\": \"Lookup Anonymous IP Information\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"lookup-anonymous-ip\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-city\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type.\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not information about the geographic information, such as cities, corresponding to the IP address should be returned\",\n+                                \"displayName\": \"Lookup Geo Enrichment\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-type\",\n+                                \"name\": \"lookup-city\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-user-name\": {\n-                                \"description\": \"The name of the proxy client for user authentication.\",\n-                                \"displayName\": \"Proxy User Name\",\n+                            \"lookup-connection-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not information about the Connection Type corresponding to the IP address should be returned. If true, the lookup will contain a 'connectionType' field that (if populated) will contain a value of 'Dialup', 'Cable/DSL', 'Corporate', or 'Cellular'\",\n+                                \"displayName\": \"Lookup Connection Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-user-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"lookup-connection-type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-user-password\": {\n-                                \"description\": \"The password of the proxy client for user authentication.\",\n-                                \"displayName\": \"Proxy User Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-user-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"socks-version\": {\n+                            \"lookup-domain\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SOCKS4\",\n-                                        \"value\": \"SOCKS4\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SOCKS5\",\n-                                        \"value\": \"SOCKS5\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SOCKS5\",\n-                                \"dependencies\": [\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not information about the Domain Name corresponding to the IP address should be returned. If true, the lookup will contain second-level domain information, such as foo.com but will not contain bar.foo.com\",\n+                                \"displayName\": \"Lookup Domain Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"lookup-domain\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-isp\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SOCKS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Proxy Type\",\n-                                        \"propertyName\": \"proxy-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"SOCKS Protocol Version\",\n-                                \"displayName\": \"SOCKS Version\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not information about the Information Service Provider corresponding to the IP address should be returned\",\n+                                \"displayName\": \"Lookup ISP\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"socks-version\",\n+                                \"name\": \"lookup-isp\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Proxy\"\n+                            \"anonymous\",\n+                            \"cellular\",\n+                            \"domain\",\n+                            \"enrich\",\n+                            \"geo\",\n+                            \"ip\",\n+                            \"ipgeo\",\n+                            \"isp\",\n+                            \"lookup\",\n+                            \"maxmind\",\n+                            \"tor\"\n                         ],\n-                        \"type\": \"org.apache.nifi.proxy.StandardProxyConfigurationService\",\n-                        \"typeDescription\": \"Provides a set of configurations for different NiFi components to use a proxy server.\",\n+                        \"type\": \"org.apache.nifi.lookup.maxmind.IPLookupService\",\n+                        \"typeDescription\": \"A lookup service that provides several types of enrichment information for IP addresses. The service is configured by providing a MaxMind Database file and specifying which types of enrichment should be provided for an IP Address or Hostname. Each type of enrichment is a separate lookup, so configuring the service to provide all of the available enrichment data may be slower than returning only a portion of the available enrichments. In order to use this service, a lookup must be performed using key of 'ip' and a value that is a valid IP address or hostname. View the Usage of this component and choose to view Additional Details for more information, such as the Schema that pertains to the information that is returned.\",\n                         \"version\": \"1.27.0\"\n                     }\n                 ],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-scripting-nar\",\n+            \"artifact\": \"nifi-poi-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-poi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Date Format\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"Password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PASSWORD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protection Type\",\n+                                        \"propertyName\": \"Protection Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The password for a password protected Excel spreadsheet\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"Password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Script Engine\": {\n+                            \"Protection Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_302-b08]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"An Excel spreadsheet not protected by a password\",\n+                                        \"displayName\": \"Unprotected\",\n+                                        \"value\": \"UNPROTECTED\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"An Excel spreadsheet protected by a password\",\n+                                        \"displayName\": \"Password Protected\",\n+                                        \"value\": \"PASSWORD\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"UNPROTECTED\",\n+                                \"description\": \"Specifies whether an Excel spreadsheet is protected by a password or not.\",\n+                                \"displayName\": \"Protection Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"Protection Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"Required Sheets\": {\n+                                \"description\": \"Comma-separated list of Excel document sheet names whose rows should be extracted from the excel document. If this property is left blank then all the rows from all the sheets will be extracted from the Excel document. The list of names is case sensitive. Any sheets not specified in this value will be ignored. An exception will be thrown if a specified sheet(s) are not found.\",\n+                                \"displayName\": \"Required Sheets\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Required Sheets\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lookup\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"record\",\n-                            \"ruby\",\n-                            \"script\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.script.ScriptedLookupService\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted LookupService instance in order to enrich records from an incoming flow file. Please note, that due to a bug in Jython that remains unresolved, it is not possible to use Jython to write a script for this service in Python.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            },\n+                            \"Starting Row\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The row number of the first row to start processing (One based). Use this to skip over rows of data at the top of a worksheet that are not part of the dataset.\",\n+                                \"displayName\": \"Starting Row\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Starting Row\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Time Format\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"Timestamp Format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_302-b08]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n+                                        \"displayName\": \"Infer Schema\",\n+                                        \"value\": \"infer-schema\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"infer-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.27.0\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lookup\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"ruby\",\n-                            \"script\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.script.SimpleScriptedLookupService\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted LookupService instance in order to enrich records from an incoming flow file. The script is expected to return an optional string value rather than an arbitrary object (record, e.g.). Also the scripted lookup service should implement StringLookupService, otherwise the getValueType() method must be implemented even though it will be ignored, as SimpleScriptedLookupService returns String as the value type on the script's behalf. Please note that due to a bug in Jython that remains unresolved, it is not possible to use Jython to write a script for this service in Python.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Script Engine\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_302-b08]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python DEPRECATED\",\n-                                        \"value\": \"python\"\n-                                    },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n                                 \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n+                            \"cell\",\n+                            \"excel\",\n+                            \"parse\",\n+                            \"reader\",\n                             \"record\",\n-                            \"recordFactory\",\n-                            \"ruby\",\n-                            \"script\"\n+                            \"row\",\n+                            \"spreadsheet\",\n+                            \"values\",\n+                            \"xlsx\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.script.ScriptedReader\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted RecordReaderFactory instance in order to read/parse/generate records from an incoming flow file.\",\n+                        \"type\": \"org.apache.nifi.excel.ExcelReader\",\n+                        \"typeDescription\": \"Parses a Microsoft Excel document returning each row in each sheet as a separate record. This reader allows for inferring a schema from all the required sheets or providing an explicit schema for interpreting the values.See Controller Service's Usage for further documentation. This reader is currently only capable of processing .xlsx (XSSF 2007 OOXML file format) Excel documents and not older .xls (HSSF '97(-2007) file format) documents.\",\n                         \"version\": \"1.27.0\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-poi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.csv.CSVRecordSetWriter\",\n+                            \"org.apache.nifi.excel.ExcelReader\",\n+                            \"org.apache.nifi.processors.standard.ConvertRecord\"\n                         ],\n+                        \"deprecationReason\": \"ConvertExcelToCSVProcessor is no longer needed since there is now the ExcelReader which along with CSVRecordSetWriter can be used in ConvertRecord to achieve the same thing.\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Engine\": {\n+                            \"CSV Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_302-b08]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n+                                        \"displayName\": \"Custom Format\",\n+                                        \"value\": \"custom\"\n                                     },\n                                     {\n-                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n+                                        \"displayName\": \"RFC 4180\",\n+                                        \"value\": \"rfc-4180\"\n                                     },\n                                     {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python DEPRECATED\",\n-                                        \"value\": \"python\"\n+                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"excel\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n+                                        \"displayName\": \"Tab-Delimited\",\n+                                        \"value\": \"tdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by MySQL\",\n+                                        \"displayName\": \"MySQL Format\",\n+                                        \"value\": \"mysql\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n+                                        \"displayName\": \"Informix Unload\",\n+                                        \"value\": \"informix-unload\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n+                                        \"displayName\": \"Informix Unload Escape Disabled\",\n+                                        \"value\": \"informix-unload-csv\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"custom\",\n+                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n+                                \"displayName\": \"CSV Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"CSV Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"Comment Marker\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n+                                \"displayName\": \"Comment Marker\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Comment Marker\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"record\",\n-                            \"ruby\",\n-                            \"script\",\n-                            \"writer\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.script.ScriptedRecordSetWriter\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted RecordSetWriterFactory instance in order to write records to an outgoing flow file.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            },\n+                            \"Escape Character\": {\n+                                \"defaultValue\": \"\\\\\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n+                                \"displayName\": \"Escape Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Escape Character\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"Include Header Line\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not the CSV column names should be written out as the first line.\",\n+                                \"displayName\": \"Include Header Line\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"Include Header Line\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Include Trailing Delimiter\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_302-b08]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python DEPRECATED\",\n-                                        \"value\": \"python\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"description\": \"If true, a trailing delimiter will be added to each CSV Record that is written. If false, the trailing delimiter will be omitted.\",\n+                                \"displayName\": \"Include Trailing Delimiter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"Include Trailing Delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"record\",\n-                            \"record sink\",\n-                            \"ruby\",\n-                            \"script\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.sink.script.ScriptedRecordSink\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted RecordSinkService instance in order to transmit records to the desired target. The script must set a variable 'recordSink' to an implementation of RecordSinkService.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"Null String\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies a String that, if present as a value in the CSV, should be considered a null field instead of using the literal value.\",\n+                                \"displayName\": \"Null String\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Null String\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"Quote Character\": {\n+                                \"defaultValue\": \"\\\"\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n+                                \"displayName\": \"Quote Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Quote Character\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Quote Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_302-b08]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"description\": \"All values will be quoted using the configured quote character.\",\n+                                        \"displayName\": \"Quote All Values\",\n+                                        \"value\": \"ALL\"\n                                     },\n                                     {\n-                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n+                                        \"displayName\": \"Quote Minimal\",\n+                                        \"value\": \"MINIMAL\"\n                                     },\n                                     {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python DEPRECATED\",\n-                                        \"value\": \"python\"\n+                                        \"description\": \"Values will be quoted unless the value is a number.\",\n+                                        \"displayName\": \"Quote Non-Numeric Values\",\n+                                        \"value\": \"NON_NUMERIC\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n+                                        \"displayName\": \"Do Not Quote Values\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies how fields should be quoted when they are written\",\n+                                \"displayName\": \"Quote Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"Quote Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.rules.engine.RulesEngineService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"ruby\",\n-                            \"rules\",\n-                            \"rules engine\",\n-                            \"script\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.rules.engine.script.ScriptedRulesEngine\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted RulesEngineService for custom firing of rules depending on the supplied facts. The script must set a variable 'rulesEngine' to an implementation of RulesEngineService.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"Record Separator\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the characters to use in order to separate CSV Records\",\n+                                \"displayName\": \"Record Separator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"Record Separator\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Trim Fields\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_302-b08]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python DEPRECATED\",\n-                                        \"value\": \"python\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n+                                \"displayName\": \"Trim Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"Trim Fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"Value Separator\": {\n+                                \"defaultValue\": \",\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n+                                \"displayName\": \"Value Separator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.rules.PropertyContextActionHandler\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"action\",\n-                            \"action handler\",\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"ruby\",\n-                            \"rules\",\n-                            \"rules engine\",\n-                            \"script\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.rules.handlers.script.ScriptedActionHandler\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted ActionHandler for custom firing of rules depending on the supplied facts. The script must set a variable 'actionHandler' to an implementation of ActionHandler.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Value Separator\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"excel-extract-column-to-skip\": {\n+                                \"description\": \"Comma delimited list of column numbers to skip. Use the columns number and not the letter designation. Use this to skip over columns anywhere in your worksheet that you don't want extracted as part of the record.\",\n+                                \"displayName\": \"Columns To Skip\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"excel-extract-column-to-skip\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"excel-extract-first-row\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The row number of the first row to start processing.Use this to skip over rows of data at the top of your worksheet that are not part of the dataset.Empty rows of data anywhere in the spreadsheet will always be skipped, no matter what this value is set to.\",\n+                                \"displayName\": \"Number of Rows to Skip\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"excel-extract-first-row\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"excel-format-booleans\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Clojure 1.8.0 [Clojure UNKNOWN]\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n-                                    },\n-                                    {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_302-b08]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"lua 5.2 [Luaj Luaj-jse 3.0.1]\",\n-                                        \"displayName\": \"lua DEPRECATED\",\n-                                        \"value\": \"lua\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, true/false will be represented by TRUE/FALSE. If false, true/false will be represented by 0/1.\",\n+                                \"displayName\": \"Format Booleans\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"excel-format-booleans\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"excel-format-values\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python DEPRECATED\",\n-                                        \"value\": \"python\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Clojure\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Should the cell values be written to CSV using the formatting applied in Excel, or should they be printed as raw values.\",\n+                                \"displayName\": \"Format Cell Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"excel-format-values\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"extract-sheets\": {\n+                                \"description\": \"Comma separated list of Excel document sheet names that should be extracted from the excel document. If this property is left blank then all of the sheets will be extracted from the Excel document. The list of names is case in-sensitive. Any sheets not specified in this value will be ignored. A bulletin will be generated if a specified sheet(s) are not found.\",\n+                                \"displayName\": \"Sheets to Extract\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"extract-sheets\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.InvokeScriptedProcessor\"\n-                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Scripts can store and retrieve state using the State Management APIs. Consult the State Manager section of the Developer's Guide for more details.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\",\n-                                \"LOCAL\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that were successfully processed\",\n+                                \"description\": \"Original Excel document received by this processor\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"Excel data converted to csv\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to be processed\",\n+                                \"description\": \"Failed to parse the Excel document\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"clojure\",\n-                            \"execute\",\n-                            \"groovy\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"ruby\",\n-                            \"script\"\n+                            \"csv\",\n+                            \"excel\",\n+                            \"poi\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.ExecuteScript\",\n-                        \"typeDescription\": \"Experimental - Executes a script given the flow file and a process session.  The script is responsible for handling the incoming flow file (transfer to SUCCESS or remove, e.g.) as well as any flow files created by the script. If the handling is incomplete or incorrect, the session will be rolled back. Experimental: Impact of sustained usage not yet verified.\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.poi.ConvertExcelToCSVProcessor\",\n+                        \"typeDescription\": \"Consumes a Microsoft Excel document and converts each worksheet to csv. Each sheet from the incoming Excel document will generate a new Flowfile that will be output from this processor. Each output Flowfile's contents will be formatted as a csv file where the each row from the excel sheet is output as a newline in the csv file. This processor is currently only capable of processing .xlsx (XSSF 2007 OOXML file format) Excel documents and not older .xls (HSSF '97(-2007) file format) documents. This processor also expects well formatted CSV content and will not escape cell's containing invalid content such as newlines or additional commas.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Excel sheet that this particular row of data came from in the Excel document\",\n+                                \"name\": \"sheetname\"\n+                            },\n+                            {\n+                                \"description\": \"The number of rows in this Excel Sheet\",\n+                                \"name\": \"numrows\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Excel document file that this data originated from\",\n+                                \"name\": \"sourcefilename\"\n+                            },\n+                            {\n+                                \"description\": \"Error message that was encountered on a per Excel sheet basis. This attribute is only populated if an error was occured while processing the particular sheet. Having the error present at the sheet level will allow for the end user to better understand what syntax errors in their excel doc on a larger scale caused the error.\",\n+                                \"name\": \"convertexceltocsvprocessor.error\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-poi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -9292,1211 +6893,1698 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"Password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PASSWORD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protection Type\",\n+                                        \"propertyName\": \"Protection Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The password for a password protected Excel spreadsheet\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"Password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Script Engine\": {\n+                            \"Protection Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_302-b08]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python DEPRECATED\",\n-                                        \"value\": \"python\"\n+                                        \"description\": \"An Excel spreadsheet not protected by a password\",\n+                                        \"displayName\": \"Unprotected\",\n+                                        \"value\": \"UNPROTECTED\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"An Excel spreadsheet protected by a password\",\n+                                        \"displayName\": \"Password Protected\",\n+                                        \"value\": \"PASSWORD\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"UNPROTECTED\",\n+                                \"description\": \"Specifies whether an Excel spreadsheet is protected by a password or not.\",\n+                                \"displayName\": \"Protection Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"Protection Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ExecuteScript\"\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The individual Excel 'segments' of the original Excel FlowFile will be routed to this relationship.\",\n+                                \"name\": \"split\"\n+                            }\n                         ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Scripts can store and retrieve state using the State Management APIs. Consult the State Manager section of the Developer's Guide for more details.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\",\n-                                \"LOCAL\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"ruby\",\n-                            \"script\"\n+                            \"split\",\n+                            \"text\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.InvokeScriptedProcessor\",\n-                        \"typeDescription\": \"Experimental - Invokes a script engine for a Processor defined in the given script. The script must define a valid class that implements the Processor interface, and it must set a variable 'processor' to an instance of the class. Processor methods such as onTrigger() will be delegated to the scripted Processor instance. Also any Relationships or PropertyDescriptors defined by the scripted processor will be added to the configuration dialog. The scripted processor can implement public void setLogger(ComponentLog logger) to get access to the parent logger, as well as public void onScheduled(ProcessContext context) and public void onStopped(ProcessContext context) methods to be invoked when the parent InvokeScriptedProcessor is scheduled or stopped, respectively.  NOTE: The script will be loaded when the processor is populated with property values, see the Restrictions section for more security implications.  Experimental: Impact of sustained usage not yet verified.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n+                        \"type\": \"org.apache.nifi.processors.poi.SplitExcel\",\n+                        \"typeDescription\": \"Splits a multi sheet Microsoft Excel spreadsheet into multiple Microsoft Excel spreadsheets where each sheet from the original file is converted to an individual spreadsheet in its own flow file.  This processor is currently only capable of processing .xlsx (XSSF 2007 OOXML file format) Excel documents and not older .xls (HSSF '97(-2007) file format) documents.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All split Excel FlowFiles produced from the same parent Excel FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split Excel FlowFiles that were created from a single parent Excel FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split Excel FlowFiles generated from the parent Excel FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent Excel FlowFile\",\n+                                \"name\": \"segment.original.filename\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Excel sheet from the original spreadsheet.\",\n+                                \"name\": \"sheetname\"\n+                            },\n+                            {\n+                                \"description\": \"The number of rows in the Excel sheet from the original spreadsheet.\",\n+                                \"name\": \"total.rows\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-ranger-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kafka-1-0-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kafka-1-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ack.wait.time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"acks\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted successfully' after successfully writing the content to a Kafka node, without waiting for a response. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted successfully' if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes.\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted unsuccessfully' unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration.\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"acks\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"compression.type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max.block.ms\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.request.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"record-sink-record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ECMAScript\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n                                     },\n                                     {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lua\",\n-                                        \"value\": \"lua\"\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ruby\",\n-                                        \"value\": \"ruby\"\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedValidateRecord\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Matching records of the original FlowFile will be routed to this relationship. If there are no matching records, no FlowFile will be routed here.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"In case of any issue during processing the incoming FlowFile, the incoming FlowFile will be routed to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"After successful procession, the incoming FlowFile will be transferred to this relationship. This happens regardless the number of filtered or remaining records.\",\n-                                \"name\": \"original\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"filter\",\n-                            \"groovy\",\n-                            \"jython\",\n-                            \"python\",\n+                            \"kafka\",\n                             \"record\",\n-                            \"script\"\n+                            \"sink\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n-                        \"typeDescription\": \"This processor provides the ability to filter records out from FlowFiles using the user-provided script. Every record will be evaluated by the script which must return with a boolean value. Records with \\\"true\\\" result will be routed to the \\\"matching\\\" relationship in a batch. Other records will be filtered out.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records within the flow file.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_1_0\",\n+                        \"typeDescription\": \"Provides a service to write records to a Kafka 1.x topic.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-kafka-1-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"auto.offset.reset\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n+                                \"displayName\": \"Offset Reset\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"auto.offset.reset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"group.id\": {\n+                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n+                                \"displayName\": \"Group ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"group.id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"header-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n+                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"header-name-regex\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                            \"honor-transactions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n+                                \"displayName\": \"Honor Transactions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"honor-transactions\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n+                                \"displayName\": \"Max Uncommitted Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-uncommit-offset-wait\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n+                                \"displayName\": \"Max Poll Records\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.poll.records\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n                                 \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ECMAScript\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n                                     },\n                                     {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lua\",\n-                                        \"value\": \"lua\"\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ruby\",\n-                                        \"value\": \"ruby\"\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topic Name(s)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"topic_type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Name Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"topic_type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedValidateRecord\"\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_1_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_1_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_1_0\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully partitioned will be routed to this relationship\",\n+                                \"description\": \"FlowFiles received from Kafka.  Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile cannot be partitioned from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Once all records in an incoming FlowFile have been partitioned, the original FlowFile is routed to this relationship.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"If a message from Kafka cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"group\",\n-                            \"jython\",\n-                            \"organize\",\n-                            \"partition\",\n-                            \"python\",\n-                            \"record\",\n-                            \"script\",\n-                            \"segment\",\n-                            \"split\"\n+                            \"1.0\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Record\",\n+                            \"Topic\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n-                        \"typeDescription\": \"Receives Record-oriented data (i.e., data that can be read by the configured Record Reader) and evaluates the user provided script against each record in the incoming flow file. Each record is then grouped with other records sharing the same partition and a FlowFile is created for each groups of records. Two records shares the same partition if the evaluation of the script results the same return value for both. Those will be considered as part of the same partition.\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_1_0\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 1.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafkaRecord_1_0. Please note that, at this time, the Processor assumes that all records that are retrieved from a given partition have the same schema. If any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The partition of the outgoing flow file. If the script indicates that the partition has a null value, the attribute will be set to the literal string \\\"<null partition>\\\" (without quotes). Otherwise, the attribute is set to the String representation of whatever value is returned by the script.\",\n-                                \"name\": \"partition\"\n+                                \"description\": \"The number of records received\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The number of records within the flow file.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"The partition of the topic the records are from\",\n+                                \"name\": \"kafka.partition\"\n                             },\n                             {\n-                                \"description\": \"A one-up number that indicates the ordering of the partitioned FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"The topic records are from\",\n+                                \"name\": \"kafka.topic\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-kafka-1-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"auto.offset.reset\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n+                                \"displayName\": \"Offset Reset\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"auto.offset.reset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"group.id\": {\n+                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n+                                \"displayName\": \"Group ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"group.id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"header-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n+                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"header-name-regex\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"honor-transactions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n+                                \"displayName\": \"Honor Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"honor-transactions\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"key-attribute-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"key-attribute-encoding\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n+                                \"displayName\": \"Max Uncommitted Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"max-uncommit-offset-wait\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"max.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n+                                \"displayName\": \"Max Poll Records\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.poll.records\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-demarcator\": {\n+                                \"description\": \"Since KafkaConsumer receives messages in batches, you have an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n+                                \"displayName\": \"Message Demarcator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ECMAScript\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n                                     },\n                                     {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lua\",\n-                                        \"value\": \"lua\"\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ruby\",\n-                                        \"value\": \"ruby\"\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topic Name(s)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"topic_type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Name Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"topic_type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.jolt.record.JoltTransformRecord\",\n-                            \"org.apache.nifi.processors.script.ExecuteScript\",\n-                            \"org.apache.nifi.processors.standard.LookupRecord\",\n-                            \"org.apache.nifi.processors.standard.QueryRecord\",\n-                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Each FlowFile that were successfully transformed will be routed to this Relationship\",\n+                                \"description\": \"FlowFiles received from Kafka. Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be transformed will be routed to this Relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"filter\",\n-                            \"groovy\",\n-                            \"jython\",\n-                            \"modify\",\n-                            \"python\",\n-                            \"record\",\n-                            \"script\",\n-                            \"transform\",\n-                            \"update\"\n+                            \"1.0\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Topic\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n-                        \"typeDescription\": \"Provides the ability to evaluate a simple script against each record in an incoming FlowFile. The script may transform the record in some way, filter the record, or fork additional records. See Processor's Additional Details for more information.\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_1_0\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 1.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafka_1_0.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The number of messages written if more than one\",\n+                                \"name\": \"kafka.count\"\n                             },\n                             {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n+                                \"name\": \"kafka.key\"\n                             },\n                             {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"The offset of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.offset\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The partition of the topic the message or message bundle is from\",\n+                                \"name\": \"kafka.partition\"\n+                            },\n+                            {\n+                                \"description\": \"The topic the message or message bundle is from\",\n+                                \"name\": \"kafka.topic\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-kafka-1-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Record Reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"ack.wait.time\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"acks\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"attribute-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"attribute-name-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ECMAScript\",\n-                                        \"value\": \"ECMAScript\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lua\",\n-                                        \"value\": \"lua\"\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ruby\",\n-                                        \"value\": \"ruby\"\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"max.block.ms\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFile containing the valid records from the incoming FlowFile will be routed to this relationship. If there are no valid records, no FlowFile will be routed to this Relationship.\",\n-                                \"name\": \"valid\"\n                             },\n-                            {\n-                                \"description\": \"FlowFile containing the invalid records from the incoming FlowFile will be routed to this relationship. If there are no invalid records, no FlowFile will be routed to this Relationship.\",\n-                                \"name\": \"invalid\"\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.request.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"In case of any issue during processing the incoming flow file, the incoming FlowFile will be routed to this relationship.\",\n-                                \"name\": \"failure\"\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"After successful procession, the incoming FlowFile will be transferred to this relationship. This happens regardless the FlowFiles might routed to \\\"valid\\\" and \\\"invalid\\\" relationships.\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"jython\",\n-                            \"python\",\n-                            \"record\",\n-                            \"script\",\n-                            \"validate\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.ScriptedValidateRecord\",\n-                        \"typeDescription\": \"This processor provides the ability to validate records in FlowFiles using the user-provided script. The script is expected to have a record as incoming argument and return with a boolean value. Based on this result, the processor categorizes the records as \\\"valid\\\" or \\\"invalid\\\" and routes them to the respective relationship in batch. Additionally the original FlowFile will be routed to the \\\"original\\\" relationship or in case of unsuccessful processing, to the \\\"failed\\\" relationship.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records within the flow file.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A script engine property to update\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"message-key-field\": {\n+                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n+                                \"displayName\": \"Message Key Field\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"message-key-field\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to. How this value is interpreted is dictated by the <Partitioner class> property.\",\n+                                \"displayName\": \"Partition\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"partition\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"partitioner.class\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_302-b08]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n                                     },\n                                     {\n-                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"Messages will be assigned to random partitions.\",\n+                                        \"displayName\": \"DefaultPartitioner\",\n+                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n                                     },\n                                     {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python DEPRECATED\",\n-                                        \"value\": \"python\"\n+                                        \"description\": \"Interprets the <Partition> property as a RecordPath that will be evaluated against each Record to determine which partition the Record will go to. All Records that have the same value for the given RecordPath will go to the same Partition.\",\n+                                        \"displayName\": \"RecordPath Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RecordPathPartitioner\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n+                                        \"displayName\": \"Expression Language Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n+                                \"displayName\": \"Partitioner class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n-                                \"required\": true,\n+                                \"name\": \"partitioner.class\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"execute\",\n-                            \"groovy\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"reporting\",\n-                            \"ruby\",\n-                            \"script\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.reporting.script.ScriptedReportingTask\",\n-                        \"typeDescription\": \"Provides reporting and status information to a script. ReportingContext, ComponentLog, and VirtualMachineMetrics objects are made available as variables (context, log, and vmMetrics, respectively) to the script for further processing. The context makes various information available such as events, provenance, bulletins, controller services, process groups, Java Virtual Machine metrics, etc.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-http-context-map-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-http-context-map-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Maximum Outstanding Requests\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The maximum number of HTTP requests that can be outstanding at any one time. Any attempt to register an additional HTTP Request will cause an error\",\n-                                \"displayName\": \"Maximum Outstanding Requests\",\n+                            },\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Outstanding Requests\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Expiration\": {\n-                                \"defaultValue\": \"1 min\",\n-                                \"description\": \"Specifies how long an HTTP Request should be left unanswered before being evicted from the cache and being responded to with a Service Unavailable status code\",\n-                                \"displayName\": \"Request Expiration\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Expiration\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"transactional-id-prefix\": {\n+                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n+                                \"displayName\": \"Transactional Id Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"transactional-id-prefix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"use-transactions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n+                                \"displayName\": \"Use Transactions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-transactions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_1_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_1_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_1_0\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.http.HttpContextMap\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.HandleHttpRequest\",\n-                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"http\",\n-                            \"request\",\n-                            \"response\"\n+                            \"1.0\",\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Record\",\n+                            \"Send\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\",\n+                            \"logs\"\n                         ],\n-                        \"type\": \"org.apache.nifi.http.StandardHttpContextMap\",\n-                        \"typeDescription\": \"Provides the ability to store and retrieve HTTP requests and responses external to a Processor, so that multiple Processors can interact with the same HTTP request.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-compress-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_1_0\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as individual records to Apache Kafka using the Kafka 1.0 Producer API. The contents of the FlowFile are expected to be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafkaRecord_1_0.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n+                                \"name\": \"msg.count\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-compress-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-1-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -10504,894 +8592,1317 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Input Compression Strategy\": {\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ack.wait.time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"acks\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No Compression\",\n-                                        \"displayName\": \"no compression\",\n-                                        \"value\": \"no compression\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use the [mime.type] attribute from the input FlowFile to determine the format\",\n-                                        \"displayName\": \"use mime.type attribute\",\n-                                        \"value\": \"use mime.type attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"GZIP\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Deflate\",\n-                                        \"displayName\": \"deflate\",\n-                                        \"value\": \"deflate\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BZIP2\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"XZ-LZMA2\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZMA\",\n-                                        \"displayName\": \"lzma\",\n-                                        \"value\": \"lzma\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy-Framed\",\n-                                        \"displayName\": \"snappy-framed\",\n-                                        \"value\": \"snappy-framed\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZ4\",\n-                                        \"displayName\": \"lz4-framed\",\n-                                        \"value\": \"lz4-framed\"\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"ZSTD\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\n+                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n-                                        \"description\": \"Brotli\",\n-                                        \"displayName\": \"brotli\",\n-                                        \"value\": \"brotli\"\n+                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"no compression\",\n-                                \"description\": \"The strategy to use for decompressing input FlowFiles\",\n-                                \"displayName\": \"Input Compression Strategy\",\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Input Compression Strategy\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Compression Level\": {\n+                            \"attribute-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"attribute-name-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"0\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"3\",\n-                                        \"value\": \"3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"4\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"5\",\n-                                        \"value\": \"5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"6\",\n-                                        \"value\": \"6\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"7\",\n-                                        \"value\": \"7\"\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"8\",\n-                                        \"value\": \"8\"\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"9\",\n-                                        \"value\": \"9\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"zstd\",\n-                                            \"use mime.type attribute\",\n-                                            \"deflate\",\n-                                            \"brotli\",\n-                                            \"gzip\",\n-                                            \"xz-lzma2\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Compression Strategy\",\n-                                        \"propertyName\": \"Output Compression Strategy\"\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n                                     }\n                                 ],\n-                                \"description\": \"The compression level for output FlowFiles for supported formats. A lower value results in faster processing but less compression; a value of 0 indicates no (that is, simple archiving) for gzip or minimal for xz-lzma2 compression. Higher levels can mean much larger memory usage such as the case with levels 7-9 for xz-lzma/2 so be careful relative to heap size.\",\n-                                \"displayName\": \"Output Compression Level\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Compression Level\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Compression Strategy\": {\n+                            \"kafka-key\": {\n+                                \"description\": \"The Key to use for the Message. If not specified, the flow file attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n+                                \"displayName\": \"Kafka Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"kafka-key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"key-attribute-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No Compression\",\n-                                        \"displayName\": \"no compression\",\n-                                        \"value\": \"no compression\"\n-                                    },\n-                                    {\n-                                        \"description\": \"GZIP\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Deflate\",\n-                                        \"displayName\": \"deflate\",\n-                                        \"value\": \"deflate\"\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n                                     },\n                                     {\n-                                        \"description\": \"BZIP2\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n                                     },\n                                     {\n-                                        \"description\": \"XZ-LZMA2\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n-                                    },\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-attribute-encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max.block.ms\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.request.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-demarcator\": {\n+                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n+                                \"displayName\": \"Message Demarcator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to.\",\n+                                \"displayName\": \"Partition\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"partition\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"partitioner.class\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"LZMA\",\n-                                        \"displayName\": \"lzma\",\n-                                        \"value\": \"lzma\"\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n                                     },\n                                     {\n-                                        \"description\": \"Snappy\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"description\": \"Messages will be assigned to random partitions.\",\n+                                        \"displayName\": \"DefaultPartitioner\",\n+                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n                                     },\n                                     {\n-                                        \"description\": \"Snappy-Hadoop\",\n-                                        \"displayName\": \"snappy-hadoop\",\n-                                        \"value\": \"snappy-hadoop\"\n-                                    },\n+                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n+                                        \"displayName\": \"Expression Language Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n+                                \"displayName\": \"Partitioner class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"partitioner.class\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Snappy-Framed\",\n-                                        \"displayName\": \"snappy-framed\",\n-                                        \"value\": \"snappy-framed\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n-                                        \"description\": \"LZ4\",\n-                                        \"displayName\": \"lz4-framed\",\n-                                        \"value\": \"lz4-framed\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n                                     },\n                                     {\n-                                        \"description\": \"ZSTD\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n                                     },\n                                     {\n-                                        \"description\": \"Brotli\",\n-                                        \"displayName\": \"brotli\",\n-                                        \"value\": \"brotli\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"no compression\",\n-                                \"description\": \"The strategy to use for compressing output FlowFiles\",\n-                                \"displayName\": \"Output Compression Strategy\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Compression Strategy\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Filename Strategy\": {\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"transactional-id-prefix\": {\n+                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n+                                \"displayName\": \"Transactional Id Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"transactional-id-prefix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"use-transactions\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Retain the filename attribute value from the input FlowFile\",\n-                                        \"displayName\": \"Original\",\n-                                        \"value\": \"ORIGINAL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Remove the filename extension when decompressing and add a new extension for compressed output FlowFiles\",\n-                                        \"displayName\": \"Updated\",\n-                                        \"value\": \"UPDATED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UPDATED\",\n-                                \"description\": \"Processing strategy for filename attribute on output FlowFiles\",\n-                                \"displayName\": \"Output Filename Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n+                                \"displayName\": \"Use Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Filename Strategy\",\n+                                \"name\": \"use-transactions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the Decompression Format is set to 'use mime.type attribute', this attribute is used to determine the decompression type. Otherwise, this attribute is ignored.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles will be transferred to the success relationship on compression modification success\",\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles will be transferred to the failure relationship on compression modification errors\",\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"CPU\"\n-                            },\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"brotli\",\n-                            \"bzip2\",\n-                            \"compress\",\n-                            \"content\",\n-                            \"deflate\",\n-                            \"gzip\",\n-                            \"lz4-framed\",\n-                            \"lzma\",\n-                            \"recompress\",\n-                            \"snappy\",\n-                            \"snappy framed\",\n-                            \"snappy-hadoop\",\n-                            \"xz-lzma2\",\n-                            \"zstd\"\n+                            \"1.0\",\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Send\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.compress.ModifyCompression\",\n-                        \"typeDescription\": \"Changes the compression algorithm used to compress the contents of a FlowFile by decompressing the contents of FlowFiles using a user-specified compression algorithm and recompressing the contents using the specified compression format properties. This processor operates in a very memory efficient way so very large objects well beyond the heap size are generally fine to process\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_1_0\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as a message to Apache Kafka using the Kafka 1.0 Producer API.The messages to send may be individual FlowFiles or may be delimited, using a user-specified delimiter, such as a new-line. The complementary NiFi processor for fetching messages is ConsumeKafka_1_0.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The appropriate MIME Type is set based on the value of the Compression Format property. If the Compression Format is 'no compression' this attribute is removed as the MIME Type is no longer known.\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success. If the <Message Demarcator> Property is not set, this will always be 1, but if the Property is set, it may be greater than 1.\",\n+                                \"name\": \"msg.count\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-file-resource-service-nar\",\n+            \"artifact\": \"nifi-key-service-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-file-resource-service-nar\",\n+                        \"artifact\": \"nifi-key-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"file-path\": {\n-                                \"defaultValue\": \"${absolute.path}/${filename}\",\n-                                \"description\": \"Path to a file that can be accessed locally.\",\n-                                \"displayName\": \"File Path\",\n+                            \"key\": {\n+                                \"description\": \"Private Key structured using PKCS8 and encoded as PEM\",\n+                                \"displayName\": \"Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-path\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"key-file\": {\n+                                \"description\": \"File path to Private Key structured using PKCS8 and encoded as PEM\",\n+                                \"displayName\": \"Key File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-file\",\n+                                \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n+                            },\n+                            \"key-password\": {\n+                                \"description\": \"Password used for decrypting Private Keys\",\n+                                \"displayName\": \"Key Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                \"type\": \"org.apache.nifi.key.service.api.PrivateKeyService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"file\",\n-                            \"resource\"\n+                            \"PEM\",\n+                            \"PKCS8\"\n                         ],\n-                        \"type\": \"org.apache.nifi.fileresource.service.StandardFileResourceService\",\n-                        \"typeDescription\": \"Provides a file resource for other components. The file needs to be available locally by Nifi (e.g. local disk or mounted storage). NiFi needs to have read permission to the file.\",\n+                        \"type\": \"org.apache.nifi.key.service.StandardPrivateKeyService\",\n+                        \"typeDescription\": \"Private Key Service provides access to a Private Key loaded from configured sources\",\n                         \"version\": \"1.27.0\"\n                     }\n                 ],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-asana-processors-nar\",\n+            \"artifact\": \"nifi-hadoop-libraries-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kudu-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kudu-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"kudu-lu-kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials to use for authentication\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kudu-lu-kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"kudu-lu-masters\": {\n+                                \"description\": \"Comma separated addresses of the Kudu masters to connect to.\",\n+                                \"displayName\": \"Kudu Masters\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kudu-lu-masters\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kudu-lu-operations-timeout-ms\": {\n+                                \"defaultValue\": \"30000ms\",\n+                                \"description\": \"Default timeout used for user operations (using sessions and scanners)\",\n+                                \"displayName\": \"Kudu Operation Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kudu-lu-operations-timeout-ms\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kudu-lu-replica-selection\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Select the closest replica to the client. Replicas are classified from closest to furthest as follows: 1) Local replicas 2) Replicas whose tablet server has the same location as the client 3) All other replicas\",\n+                                        \"displayName\": \"CLOSEST_REPLICA\",\n+                                        \"value\": \"CLOSEST_REPLICA\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Select the LEADER replica\",\n+                                        \"displayName\": \"LEADER_ONLY\",\n+                                        \"value\": \"LEADER_ONLY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"CLOSEST_REPLICA\",\n+                                \"description\": \"Policy with which to choose amongst multiple replicas\",\n+                                \"displayName\": \"Kudu Replica Selection\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kudu-lu-replica-selection\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kudu-lu-return-cols\": {\n+                                \"defaultValue\": \"*\",\n+                                \"description\": \"A comma-separated list of columns to return when scanning. To return all columns set to \\\"*\\\"\",\n+                                \"displayName\": \"Kudu Return Columns\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kudu-lu-return-cols\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kudu-lu-table-name\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"Name of the table to access.\",\n+                                \"displayName\": \"Kudu Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kudu-lu-table-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"enrich\",\n+                            \"key\",\n+                            \"kudu\",\n+                            \"lookup\",\n+                            \"value\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.controller.kudu.KuduLookupService\",\n+                        \"typeDescription\": \"Lookup a record from Kudu Server associated with the specified key. Binary columns are base64 encoded. Only one matched row will be returned\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-asana-processors-nar\",\n+                        \"artifact\": \"nifi-kudu-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"asana-controller-service\": {\n-                                \"description\": \"Specify which controller service to use for accessing Asana.\",\n-                                \"displayName\": \"Asana Client Service\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of Records to process in a single Kudu-client batch, between 1 - 100000. Depending on your memory size, and data size per row set an appropriate batch size. Gradually increase this number to find out the best one for best performances.\",\n+                                \"displayName\": \"Max Records per Batch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Data RecordPath\": {\n+                                \"description\": \"If specified, this property denotes a RecordPath that will be evaluated against each incoming Record and the Record that results from evaluating the RecordPath will be sent to Kudu instead of sending the entire incoming Record. If not specified, the entire incoming Record will be published to Kudu.\",\n+                                \"displayName\": \"Data RecordPath\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-controller-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-asana-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.controller.asana.AsanaClientProviderService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Data RecordPath\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"asana-object-type\": {\n+                            \"Failure Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Collect tasks matching to the specified conditions.\",\n-                                        \"displayName\": \"Tasks\",\n-                                        \"value\": \"asana-collect-tasks\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect attached files of tasks matching to the specified conditions.\",\n-                                        \"displayName\": \"Task Attachments\",\n-                                        \"value\": \"asana-collect-task-attachments\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect projects of the workspace.\",\n-                                        \"displayName\": \"Projects\",\n-                                        \"value\": \"asana-collect-projects\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect tags of the workspace.\",\n-                                        \"displayName\": \"Tags\",\n-                                        \"value\": \"asana-collect-tags\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect users assigned to the workspace.\",\n-                                        \"displayName\": \"Users\",\n-                                        \"value\": \"asana-collect-users\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect users assigned to the specified project.\",\n-                                        \"displayName\": \"Members of a Project\",\n-                                        \"value\": \"asana-collect-project-members\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect teams of the workspace.\",\n-                                        \"displayName\": \"Teams\",\n-                                        \"value\": \"asana-collect-teams\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect users assigned to the specified team.\",\n-                                        \"displayName\": \"Team Members\",\n-                                        \"value\": \"asana-collect-team-members\"\n+                                        \"description\": \"The FlowFile containing the Records that failed to insert will be routed to the 'failure' relationship\",\n+                                        \"displayName\": \"Route to Failure\",\n+                                        \"value\": \"route-to-failure\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect stories (comments) of of tasks matching to the specified conditions.\",\n-                                        \"displayName\": \"Stories of Tasks\",\n-                                        \"value\": \"asana-collect-stories\"\n-                                    },\n+                                        \"description\": \"If any Record cannot be inserted, all FlowFiles in the session will be rolled back to their input queue. This means that if data cannot be pushed, it will block any subsequent data from be pushed to Kudu as well until the issue is resolved. However, this may be advantageous if a strict ordering is required.\",\n+                                        \"displayName\": \"Rollback Session\",\n+                                        \"value\": \"rollback\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"route-to-failure\",\n+                                \"description\": \"If one or more Records in a batch cannot be transferred to Kudu, specifies how to handle the failure\",\n+                                \"displayName\": \"Failure Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Failure Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"FlowFiles per Batch\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of FlowFiles to process in a single execution, between 1 - 100000. Depending on your memory size, and data size per row set an appropriate batch size for the number of FlowFiles to process per client connection setup.Gradually increase this number, only if your FlowFiles typically contain a few records.\",\n+                                \"displayName\": \"FlowFiles per Batch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"FlowFiles per Batch\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Flush Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Collect status updates of the specified project.\",\n-                                        \"displayName\": \"Status Updates of a Project\",\n-                                        \"value\": \"asana-collect-project-status-updates\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AUTO_FLUSH_SYNC\",\n+                                        \"value\": \"AUTO_FLUSH_SYNC\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect attached files of project status updates.\",\n-                                        \"displayName\": \"Attachments of Status Updates\",\n-                                        \"value\": \"asana-collect-project-status-attachments\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AUTO_FLUSH_BACKGROUND\",\n+                                        \"value\": \"AUTO_FLUSH_BACKGROUND\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect various events happening on the specified project and on its' tasks.\",\n-                                        \"displayName\": \"Events of a Project\",\n-                                        \"value\": \"asana-collect-project-events\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MANUAL_FLUSH\",\n+                                        \"value\": \"MANUAL_FLUSH\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"asana-collect-tasks\",\n-                                \"description\": \"Specify what kind of objects to be collected from Asana\",\n-                                \"displayName\": \"Object Type\",\n+                                \"defaultValue\": \"AUTO_FLUSH_BACKGROUND\",\n+                                \"description\": \"Set the new flush mode for a kudu session.\\nAUTO_FLUSH_SYNC: the call returns when the operation is persisted, else it throws an exception.\\nAUTO_FLUSH_BACKGROUND: the call returns when the operation has been added to the buffer. This call should normally perform only fast in-memory operations but it may have to wait when the buffer is full and there's another buffer being flushed.\\nMANUAL_FLUSH: the call returns when the operation has been added to the buffer, else it throws a KuduException if the buffer is full.\",\n+                                \"displayName\": \"Flush Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-object-type\",\n+                                \"name\": \"Flush Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"asana-output-batch-size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of items batched together in a single Flow File. If set to 1 (default), then each item is transferred in a separate Flow File and each will have an asana.gid attribute, to help identifying the fetched item on the server side, if needed. If the batch size is greater than 1, then the specified amount of items are batched together in a single Flow File as a Json array, and the Flow Files won't have the asana.gid attribute.\",\n-                                \"displayName\": \"Output Batch Size\",\n+                            \"Handle Schema Drift\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, when fields with names that are not in the target Kudu table are encountered, the Kudu table will be altered to include new columns for those fields.\",\n+                                \"displayName\": \"Handle Schema Drift\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Handle Schema Drift\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ignore NULL\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Ignore NULL on Kudu Put Operation, Update only non-Null columns if set true\",\n+                                \"displayName\": \"Ignore NULL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Ignore NULL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Insert Operation\": {\n+                                \"defaultValue\": \"INSERT\",\n+                                \"description\": \"Specify operationType for this processor.\\nValid values are: INSERT, INSERT_IGNORE, UPSERT, UPDATE, DELETE, UPDATE_IGNORE, DELETE_IGNORE. This Property will be ignored if the <Operation RecordPath> property is set.\",\n+                                \"displayName\": \"Kudu Operation Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Insert Operation\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Kudu Masters\": {\n+                                \"description\": \"Comma separated addresses of the Kudu masters to connect to.\",\n+                                \"displayName\": \"Kudu Masters\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kudu Masters\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Lowercase Field Names\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Convert column names to lowercase when finding index of Kudu table columns\",\n+                                \"displayName\": \"Lowercase Field Names\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Lowercase Field Names\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Operation RecordPath\": {\n+                                \"description\": \"If specified, this property denotes a RecordPath that will be evaluated against each incoming Record in order to determine the Kudu Operation Type. When evaluated, the RecordPath must evaluate to one of the valid Kudu Operation Types (Debezium style operation types are also supported: \\\"r\\\" and \\\"c\\\" for INSERT, \\\"u\\\" for UPDATE, and \\\"d\\\" for DELETE), or the incoming FlowFile will be routed to failure. If this property is specified, the <Kudu Operation Type> property will be ignored.\",\n+                                \"displayName\": \"Operation RecordPath\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-output-batch-size\",\n-                                \"required\": true,\n+                                \"name\": \"Operation RecordPath\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"asana-project-name\": {\n-                                \"dependencies\": [\n+                            \"Skip head line\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"asana-collect-project-members\",\n-                                            \"asana-collect-project-status-attachments\",\n-                                            \"asana-collect-project-status-updates\",\n-                                            \"asana-collect-task-attachments\",\n-                                            \"asana-collect-stories\",\n-                                            \"asana-collect-tasks\",\n-                                            \"asana-collect-project-events\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Type\",\n-                                        \"propertyName\": \"asana-object-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Fetch only objects in this project. Case sensitive.\",\n-                                \"displayName\": \"Project Name\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Deprecated. Used to ignore header lines, but this should be handled by a RecordReader (e.g. \\\"Treat First Line as Header\\\" property of CSVReader)\",\n+                                \"displayName\": \"Skip head line\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-project-name\",\n+                                \"name\": \"Skip head line\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"asana-section-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"asana-collect-task-attachments\",\n-                                            \"asana-collect-stories\",\n-                                            \"asana-collect-tasks\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Type\",\n-                                        \"propertyName\": \"asana-object-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fetch only objects in this section. Case sensitive.\",\n-                                \"displayName\": \"Section Name\",\n+                            \"Table Name\": {\n+                                \"description\": \"The name of the Kudu Table to put data into\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials to use for authentication\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-section-name\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"asana-tag-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"asana-collect-task-attachments\",\n-                                            \"asana-collect-stories\",\n-                                            \"asana-collect-tasks\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Type\",\n-                                        \"propertyName\": \"asana-object-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fetch only objects having this tag. Case sensitive.\",\n-                                \"displayName\": \"Tag\",\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-tag-name\",\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kerberos-principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"asana-team-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"asana-collect-team-members\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Type\",\n-                                        \"propertyName\": \"asana-object-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Team name. Case sensitive.\",\n-                                \"displayName\": \"Team\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-team-name\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"kudu-keep-alive-period-timeout-ms\": {\n+                                \"defaultValue\": \"15000ms\",\n+                                \"description\": \"Default timeout used for user operations\",\n+                                \"displayName\": \"Kudu Keep Alive Period Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kudu-keep-alive-period-timeout-ms\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"distributed-cache-service\": {\n-                                \"description\": \"Cache service to store fetched item fingerprints. These, from the last successful query are stored, in order to enable incremental loading and change detection.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"kudu-operations-timeout-ms\": {\n+                                \"defaultValue\": \"30000ms\",\n+                                \"description\": \"Default timeout used for user operations (using sessions and scanners)\",\n+                                \"displayName\": \"Kudu Operation Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kudu-operations-timeout-ms\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kudu-sasl-protocol-name\": {\n+                                \"defaultValue\": \"kudu\",\n+                                \"description\": \"The SASL protocol name to use for authenticating via Kerberos. Must match the service principal name.\",\n+                                \"displayName\": \"Kudu SASL Protocol Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kudu-sasl-protocol-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The service for reading records from incoming flow files.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-cache-service\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"worker-count\": {\n+                                \"defaultValue\": \"36\",\n+                                \"description\": \"The maximum number of worker threads handling Kudu client read and write operations. Defaults to the number of available processors.\",\n+                                \"displayName\": \"Kudu Client Worker Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"worker-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Notification about deleted objects are routed to this relationship. Flow files will not have any payload. IDs of the resources no longer exist are carried by the asana.gid attribute of the generated FlowFiles.\",\n-                                \"name\": \"removed\"\n-                            },\n-                            {\n-                                \"description\": \"Newly collected objects are routed to this relationship.\",\n-                                \"name\": \"new\"\n+                                \"description\": \"A FlowFile is routed to this relationship after it has been successfully stored in Kudu\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Objects that have already been collected earlier, but were updated since, are routed to this relationship.\",\n-                                \"name\": \"updated\"\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be sent to Kudu\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"systemResourceConsiderations\": [\n                             {\n                                 \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n                                 \"resource\": \"MEMORY\"\n                             }\n                         ],\n                         \"tags\": [\n-                            \"asana\",\n-                            \"ingest\",\n-                            \"source\"\n+                            \"HDFS\",\n+                            \"NoSQL\",\n+                            \"database\",\n+                            \"kudu\",\n+                            \"put\",\n+                            \"record\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.asana.GetAsanaObject\",\n-                        \"typeDescription\": \"This processor collects data from Asana\",\n+                        \"type\": \"org.apache.nifi.processors.kudu.PutKudu\",\n+                        \"typeDescription\": \"Reads records from an incoming FlowFile using the provided Record Reader, and writes those records to the specified Kudu's table. The schema for the Kudu table is inferred from the schema of the Record Reader. If any error occurs while reading records from the input, or writing records to Kudu, the FlowFile will be routed to failure\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Global ID of the object in Asana.\",\n-                                \"name\": \"asana.gid\"\n+                                \"description\": \"Number of records written to Kudu\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-html-nar\",\n+            \"artifact\": \"nifi-cassandra-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-html-nar\",\n+                        \"artifact\": \"nifi-cassandra-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"deprecated\": true,\n-                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n+                        \"deprecationReason\": \"DataStax 3 driver for Cassandra is no longer the current version and requires new components.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Append Element Value\": {\n-                                \"description\": \"Appends the specified value to the resulting Element\",\n-                                \"displayName\": \"Append Element Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Append Element Value\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Attribute Name\": {\n-                                \"description\": \"When getting the value of a HTML element attribute this value is used as the key to determine which attribute on the selected element should be retrieved. This value is used when the \\\"Output Type\\\" is set to \\\"Attribute\\\". If this value is prefixed with 'abs:', then the extracted attribute value will be converted into an absolute URL form using the specified base URL.\",\n-                                \"displayName\": \"Attribute Name\",\n+                            \"Cassandra Contact Points\": {\n+                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n+                                \"displayName\": \"Cassandra Contact Points\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Attribute Name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Cassandra Contact Points\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"CSS Selector\": {\n-                                \"description\": \"CSS selector syntax string used to extract the desired HTML element(s).\",\n-                                \"displayName\": \"CSS Selector\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the record data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"CSS Selector\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Destination\": {\n+                            \"Client Auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"flowfile-attribute\",\n-                                \"description\": \"Control if element extracted is written as a flowfile attribute or as flowfile content.\",\n-                                \"displayName\": \"Destination\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n-                                \"required\": true,\n+                                \"name\": \"Client Auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"HTML Character Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Character encoding of the input HTML\",\n-                                \"displayName\": \"HTML Character Encoding\",\n+                            \"Compression Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Enable compression at transport-level requests and responses\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTML Character Encoding\",\n-                                \"required\": true,\n+                                \"name\": \"Compression Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Type\": {\n+                            \"Consistency Level\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"HTML\",\n-                                        \"value\": \"HTML\"\n+                                        \"displayName\": \"ANY\",\n+                                        \"value\": \"ANY\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n+                                        \"displayName\": \"ONE\",\n+                                        \"value\": \"ONE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Attribute\",\n-                                        \"value\": \"Attribute\"\n+                                        \"displayName\": \"TWO\",\n+                                        \"value\": \"TWO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Data\",\n-                                        \"value\": \"Data\"\n+                                        \"displayName\": \"THREE\",\n+                                        \"value\": \"THREE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"QUORUM\",\n+                                        \"value\": \"QUORUM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ALL\",\n+                                        \"value\": \"ALL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_QUORUM\",\n+                                        \"value\": \"LOCAL_QUORUM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EACH_QUORUM\",\n+                                        \"value\": \"EACH_QUORUM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SERIAL\",\n+                                        \"value\": \"SERIAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_SERIAL\",\n+                                        \"value\": \"LOCAL_SERIAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_ONE\",\n+                                        \"value\": \"LOCAL_ONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"HTML\",\n-                                \"description\": \"Controls the type of DOM value that is retrieved from the HTML element.\",\n-                                \"displayName\": \"Output Type\",\n+                                \"defaultValue\": \"ONE\",\n+                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n+                                \"displayName\": \"Consistency Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Type\",\n-                                \"required\": true,\n+                                \"name\": \"Consistency Level\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Prepend Element Value\": {\n-                                \"description\": \"Prepends the specified value to the resulting Element\",\n-                                \"displayName\": \"Prepend Element Value\",\n+                            \"Keyspace\": {\n+                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor exposes the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n+                                \"displayName\": \"Keyspace\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Prepend Element Value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Keyspace\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"URL\": {\n-                                \"description\": \"Base URL for the HTML page being parsed. This URL will be used to resolve an absolute URL when an attribute value is extracted from a HTML element.\",\n-                                \"displayName\": \"URL\",\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running CQL select query. Must be of format <duration> <TimeUnit> where <duration> is a non-negative integer and TimeUnit is a supported Time Unit, such as: nanos, millis, secs, mins, hrs, days. A value of zero means there is no limit. \",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"URL\",\n+                                \"name\": \"Max Wait Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Cassandra cluster\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Cassandra cluster\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cassandra-connection-provider\": {\n+                                \"description\": \"Specifies the Cassandra connection providing controller service to be used to connect to Cassandra cluster.\",\n+                                \"displayName\": \"Cassandra Connection Provider\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cassandra-connection-provider\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"putcql-stmt-cache-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The maximum number of CQL Prepared Statements to cache. This can improve performance if many incoming flow files have the same CQL statement with different values for the parameters. If this property is set to zero, the cache is effectively disabled.\",\n+                                \"displayName\": \"Statement Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"putcql-stmt-cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.ModifyHTMLElement\",\n-                            \"org.apache.nifi.PutHTMLElement\"\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parameterized CQL statements. The type of each parameter is specified as a lowercase string corresponding to the Cassandra data type (text, int, boolean, e.g.). In the case of collections, the primitive type(s) of the elements in the collection should be comma-delimited, follow the collection type, and be enclosed in angle brackets (< and >), for example set<text> or map<timestamp, int>.\",\n+                                \"name\": \"cql.args.N.type\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parameterized CQL statements. The value of the parameters are specified as cql.args.1.value, cql.args.2.value, cql.args.3.value, and so on. The  type of the cql.args.1.value parameter is specified by the cql.args.1.type attribute.\",\n+                                \"name\": \"cql.args.N.value\"\n+                            }\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Element could not be found in the HTML document. The original HTML input will remain in the FlowFile content unchanged. Relationship 'original' will not be invoked in this scenario.\",\n-                                \"name\": \"element not found\"\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation cannot be completed but attempting it again may succeed.\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"Successfully parsed HTML element\",\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation completed successfully.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The original HTML input\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"The input HTML syntax is invalid\",\n-                                \"name\": \"invalid html\"\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation failed.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"css\",\n-                            \"dom\",\n-                            \"element\",\n-                            \"get\",\n-                            \"html\"\n+                            \"cassandra\",\n+                            \"cql\",\n+                            \"insert\",\n+                            \"put\",\n+                            \"set\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.GetHTMLElement\",\n-                        \"typeDescription\": \"Extracts HTML element values from the incoming flowfile's content using a CSS selector. The incoming HTML is first converted into a HTML Document Object Model so that HTML elements may be selected in the similar manner that CSS selectors are used to apply styles to HTML. The resulting HTML DOM is then \\\"queried\\\" using the user defined CSS selector string. The result of \\\"querying\\\" the HTML DOM may produce 0-N results. If no results are found the flowfile will be transferred to the \\\"element not found\\\" relationship to indicate so to the end user. If N results are found a new flowfile will be created and emitted for each result. The query result will either be placed in the content of the new flowfile or as an attribute of the new flowfile. By default the result is written to an attribute. This can be controlled by the \\\"Destination\\\" property. Resulting query values may also have data prepended or appended to them by setting the value of property \\\"Prepend Element Value\\\" or \\\"Append Element Value\\\". Prepended and appended values are treated as string values and concatenated to the result retrieved from the HTML DOM query operation. A more thorough reference for the CSS selector syntax can be found at \\\"http://jsoup.org/apidocs/org/jsoup/select/Selector.html\\\"\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Flowfile attribute where the element result parsed from the HTML using the CSS selector syntax are placed if the destination is a flowfile attribute.\",\n-                                \"name\": \"HTMLElement\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.cassandra.PutCassandraQL\",\n+                        \"typeDescription\": \"Execute provided Cassandra Query Language (CQL) statement on a Cassandra 1.x, 2.x, or 3.0.x cluster. The content of an incoming FlowFile is expected to be the CQL command to execute. The CQL command may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention cql.args.N.type and cql.args.N.value, where N is a positive integer. The cql.args.N.type is expected to be a lowercase string indicating the Cassandra type.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-html-nar\",\n+                        \"artifact\": \"nifi-cassandra-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -11400,4216 +9911,5466 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"deprecated\": true,\n-                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n+                        \"deprecationReason\": \"DataStax 3 driver for Cassandra is no longer the current version and requires new components.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attribute Name\": {\n-                                \"description\": \"When modifying the value of an element attribute this value is used as the key to determine which attribute on the selected element will be modified with the new value.\",\n-                                \"displayName\": \"Attribute Name\",\n+                            \"Cassandra Contact Points\": {\n+                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n+                                \"displayName\": \"Cassandra Contact Points\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Attribute Name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Cassandra Contact Points\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"CSS Selector\": {\n-                                \"description\": \"CSS selector syntax string used to extract the desired HTML element(s).\",\n-                                \"displayName\": \"CSS Selector\",\n+                            \"Client Auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"CSS Selector\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client Auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Consistency Level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SERIAL\",\n+                                        \"value\": \"SERIAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_SERIAL\",\n+                                        \"value\": \"LOCAL_SERIAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SERIAL\",\n+                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n+                                \"displayName\": \"Consistency Level\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Consistency Level\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Keyspace\": {\n+                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor exposes the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n+                                \"displayName\": \"Keyspace\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Keyspace\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Cassandra cluster\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Cassandra cluster\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cassandra-connection-provider\": {\n+                                \"description\": \"Specifies the Cassandra connection providing controller service to be used to connect to Cassandra cluster.\",\n+                                \"displayName\": \"Cassandra Connection Provider\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cassandra-connection-provider\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"put-cassandra-record-batch-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies the number of 'Insert statements' to be grouped together to execute as a batch (BatchStatement)\",\n+                                \"displayName\": \"Batch size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"put-cassandra-record-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"HTML Character Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Character encoding of the input HTML\",\n-                                \"displayName\": \"HTML Character Encoding\",\n+                            \"put-cassandra-record-batch-statement-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Use a LOGGED batch statement\",\n+                                        \"displayName\": \"LOGGED\",\n+                                        \"value\": \"LOGGED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use an UNLOGGED batch statement\",\n+                                        \"displayName\": \"UNLOGGED\",\n+                                        \"value\": \"UNLOGGED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use a COUNTER batch statement\",\n+                                        \"displayName\": \"COUNTER\",\n+                                        \"value\": \"COUNTER\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The value of the cql.batch.statement.type Attribute will be used to determine which type of batch statement (LOGGED, UNLOGGED or COUNTER) will be used to generate and execute the Update statement.\",\n+                                        \"displayName\": \"Use cql.batch.statement.type Attribute\",\n+                                        \"value\": \"USE_ATTR\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"LOGGED\",\n+                                \"description\": \"Specifies the type of 'Batch Statement' to be used.\",\n+                                \"displayName\": \"Batch Statement Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTML Character Encoding\",\n+                                \"name\": \"put-cassandra-record-batch-statement-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-cassandra-record-reader\": {\n+                                \"description\": \"Specifies the type of Record Reader controller service to use for parsing the incoming data and determining the schema\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-cassandra-record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"put-cassandra-record-statement-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Use an UPDATE statement.\",\n+                                        \"displayName\": \"UPDATE\",\n+                                        \"value\": \"UPDATE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use an INSERT statement.\",\n+                                        \"displayName\": \"INSERT\",\n+                                        \"value\": \"INSERT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The value of the cql.statement.type Attribute will be used to determine which type of statement (UPDATE, INSERT) will be generated and executed\",\n+                                        \"displayName\": \"Use cql.statement.type Attribute\",\n+                                        \"value\": \"USE_ATTR\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"INSERT\",\n+                                \"description\": \"Specifies the type of CQL Statement to generate.\",\n+                                \"displayName\": \"Statement Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-cassandra-record-statement-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Modified Value\": {\n-                                \"description\": \"Value to update the found HTML elements with\",\n-                                \"displayName\": \"Modified Value\",\n+                            \"put-cassandra-record-table\": {\n+                                \"description\": \"The name of the Cassandra table to which the records have to be written.\",\n+                                \"displayName\": \"Table name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Modified Value\",\n+                                \"name\": \"put-cassandra-record-table\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Type\": {\n+                            \"put-cassandra-record-update-keys\": {\n+                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the conversion to CQL will fail. This property is ignored if the Statement Type is not UPDATE.\",\n+                                \"displayName\": \"Update Keys\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-cassandra-record-update-keys\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-cassandra-record-update-method\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTML\",\n-                                        \"value\": \"HTML\"\n+                                        \"description\": \"Use an increment operation (+=) for the Update statement.\",\n+                                        \"displayName\": \"Increment\",\n+                                        \"value\": \"INCREMENT\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n+                                        \"description\": \"Use a decrement operation (-=) for the Update statement.\",\n+                                        \"displayName\": \"Decrement\",\n+                                        \"value\": \"DECREMENT\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Attribute\",\n-                                        \"value\": \"Attribute\"\n+                                        \"description\": \"Use a set operation (=) for the Update statement.\",\n+                                        \"displayName\": \"Set\",\n+                                        \"value\": \"SET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The value of the cql.update.method Attribute will be used to determine which operation (Set, Increment, Decrement) will be used to generate and execute the Update statement.\",\n+                                        \"displayName\": \"Use cql.update.method Attribute\",\n+                                        \"value\": \"USE_ATTR\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"HTML\",\n-                                \"description\": \"Controls whether the HTML element is output as HTML,Text or Data\",\n-                                \"displayName\": \"Output Type\",\n+                                \"defaultValue\": \"SET\",\n+                                \"description\": \"Specifies the method to use to SET the values. This property is used if the Statement Type is UPDATE and ignored otherwise.\",\n+                                \"displayName\": \"Update Method\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Type\",\n-                                \"required\": true,\n+                                \"name\": \"put-cassandra-record-update-method\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.GetHTMLElement\",\n-                            \"org.apache.nifi.PutHTMLElement\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"description\": \"Element could not be found in the HTML document. The original HTML input will remain in the FlowFile content unchanged. Relationship 'original' will not be invoked in this scenario.\",\n-                                \"name\": \"element not found\"\n+                                \"description\": \"If 'Use cql.statement.type Attribute' is selected for the Statement Type property, the value of the cql.statement.type Attribute will be used to determine which type of statement (UPDATE, INSERT) will be generated and executed\",\n+                                \"name\": \"cql.statement.type\"\n                             },\n                             {\n-                                \"description\": \"Successfully parsed HTML element\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If 'Use cql.update.method Attribute' is selected for the Update Method property, the value of the cql.update.method Attribute will be used to determine which operation (Set, Increment, Decrement) will be used to generate and execute the Update statement. Ignored if the Statement Type property is not set to UPDATE\",\n+                                \"name\": \"cql.update.method\"\n                             },\n                             {\n-                                \"description\": \"The original HTML input\",\n-                                \"name\": \"original\"\n+                                \"description\": \"If 'Use cql.batch.statement.type Attribute' is selected for the Batch Statement Type property, the value of the cql.batch.statement.type Attribute will be used to determine which type of batch statement (LOGGED, UNLOGGED, COUNTER) will be generated and executed\",\n+                                \"name\": \"cql.batch.statement.type\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation completed successfully.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The input HTML syntax is invalid\",\n-                                \"name\": \"invalid html\"\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation failed.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"css\",\n-                            \"dom\",\n-                            \"element\",\n-                            \"html\",\n-                            \"modify\"\n+                            \"cassandra\",\n+                            \"cql\",\n+                            \"insert\",\n+                            \"put\",\n+                            \"record\",\n+                            \"set\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.ModifyHTMLElement\",\n-                        \"typeDescription\": \"Modifies the value of an existing HTML element. The desired element to be modified is located by using CSS selector syntax. The incoming HTML is first converted into a HTML Document Object Model so that HTML elements may be selected in the similar manner that CSS selectors are used to apply styles to HTML. The resulting HTML DOM is then \\\"queried\\\" using the user defined CSS selector string to find the element the user desires to modify. If the HTML element is found the element's value is updated in the DOM using the value specified \\\"Modified Value\\\" property. All DOM elements that match the CSS selector will be updated. Once all of the DOM elements have been updated the DOM is rendered to HTML and the result replaces the flowfile content with the updated HTML. A more thorough reference for the CSS selector syntax can be found at \\\"http://jsoup.org/apidocs/org/jsoup/select/Selector.html\\\"\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Total number of HTML element modifications made\",\n-                                \"name\": \"NumElementsModified\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.cassandra.PutCassandraRecord\",\n+                        \"typeDescription\": \"This is a record aware processor that reads the content of the incoming FlowFile as individual records using the configured 'Record Reader' and writes them to Apache Cassandra using native protocol version 3 or higher.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-html-nar\",\n+                        \"artifact\": \"nifi-cassandra-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"deprecated\": true,\n-                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n+                        \"deprecationReason\": \"DataStax 3 driver for Cassandra is no longer the current version and requires new components.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"CSS Selector\": {\n-                                \"description\": \"CSS selector syntax string used to extract the desired HTML element(s).\",\n-                                \"displayName\": \"CSS Selector\",\n+                            \"CQL select query\": {\n+                                \"description\": \"CQL select query\",\n+                                \"displayName\": \"CQL select query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"CSS Selector\",\n+                                \"name\": \"CQL select query\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Element Insert Location Type\": {\n+                            \"Cassandra Contact Points\": {\n+                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n+                                \"displayName\": \"Cassandra Contact Points\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Cassandra Contact Points\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the record data.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client Auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"append-html\",\n-                                        \"value\": \"append-html\"\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"prepend-html\",\n-                                        \"value\": \"prepend-html\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"append-html\",\n-                                \"description\": \"Controls whether the new element is prepended or appended to the children of the Element located by the CSS selector. EX: prepended value '<b>Hi</b>' inside of Element (using CSS Selector 'p') '<p>There</p>' would result in '<p><b>Hi</b>There</p>'. Appending the value would result in '<p>There<b>Hi</b></p>'\",\n-                                \"displayName\": \"Element Insert Location Type\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Element Insert Location Type\",\n-                                \"required\": true,\n+                                \"name\": \"Client Auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"HTML Character Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Character encoding of the input HTML\",\n-                                \"displayName\": \"HTML Character Encoding\",\n+                            \"Compression Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Enable compression at transport-level requests and responses\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTML Character Encoding\",\n+                                \"name\": \"Compression Type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Consistency Level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ANY\",\n+                                        \"value\": \"ANY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ONE\",\n+                                        \"value\": \"ONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TWO\",\n+                                        \"value\": \"TWO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"THREE\",\n+                                        \"value\": \"THREE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"QUORUM\",\n+                                        \"value\": \"QUORUM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ALL\",\n+                                        \"value\": \"ALL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_QUORUM\",\n+                                        \"value\": \"LOCAL_QUORUM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EACH_QUORUM\",\n+                                        \"value\": \"EACH_QUORUM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SERIAL\",\n+                                        \"value\": \"SERIAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_SERIAL\",\n+                                        \"value\": \"LOCAL_SERIAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_ONE\",\n+                                        \"value\": \"LOCAL_ONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ONE\",\n+                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n+                                \"displayName\": \"Consistency Level\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Consistency Level\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Fetch size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of result rows to be fetched from the result set at a time. Zero is the default and means there is no limit.\",\n+                                \"displayName\": \"Fetch size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Fetch size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Put Value\": {\n-                                \"description\": \"Value used when creating the new Element. Value should be a valid HTML element. The text should be supplied unencoded: characters like '<', '>', etc will be properly HTML encoded in the resulting output.\",\n-                                \"displayName\": \"Put Value\",\n+                            \"Keyspace\": {\n+                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor exposes the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n+                                \"displayName\": \"Keyspace\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Keyspace\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Rows Per Flow File\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n+                                \"displayName\": \"Max Rows Per Flow File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Max Rows Per Flow File\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running CQL select query. Must be of format <duration> <TimeUnit> where <duration> is a non-negative integer and TimeUnit is a supported Time Unit, such as: nanos, millis, secs, mins, hrs, days. A value of zero means there is no limit. \",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Put Value\",\n+                                \"name\": \"Max Wait Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Output Format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Avro\",\n+                                        \"value\": \"Avro\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JSON\",\n+                                        \"value\": \"JSON\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Avro\",\n+                                \"description\": \"The format to which the result rows will be converted. If JSON is selected, the output will contain an object with field 'results' containing an array of result rows. Each row in the array is a map of the named column to its value. For example: { \\\"results\\\": [{\\\"userid\\\":1, \\\"name\\\":\\\"Joe Smith\\\"}]}\",\n+                                \"displayName\": \"Output Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output Format\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Cassandra cluster\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Cassandra cluster\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cassandra-connection-provider\": {\n+                                \"description\": \"Specifies the Cassandra connection providing controller service to be used to connect to Cassandra cluster.\",\n+                                \"displayName\": \"Cassandra Connection Provider\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cassandra-connection-provider\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"qdbt-output-batch-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n+                                \"displayName\": \"Output Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"qdbt-output-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"timestamp-format-pattern\": {\n+                                \"defaultValue\": \"yyyy-MM-dd HH:mm:ssZ\",\n+                                \"description\": \"Pattern to use when converting timestamp fields to JSON. Note: the formatted timestamp will be in UTC timezone.\",\n+                                \"displayName\": \"Timestamp Format Pattern for JSON output\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"timestamp-format-pattern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.GetHTMLElement\",\n-                            \"org.apache.nifi.ModifyHTMLElement\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Element could not be found in the HTML document. The original HTML input will remain in the FlowFile content unchanged. Relationship 'original' will not be invoked in this scenario.\",\n-                                \"name\": \"element not found\"\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation cannot be completed but attempting it again may succeed.\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"Successfully parsed HTML element\",\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation completed successfully.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The original HTML input\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"The input HTML syntax is invalid\",\n-                                \"name\": \"invalid html\"\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation failed.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"css\",\n-                            \"dom\",\n-                            \"element\",\n-                            \"html\",\n-                            \"put\"\n+                            \"cassandra\",\n+                            \"cql\",\n+                            \"select\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.PutHTMLElement\",\n-                        \"typeDescription\": \"Places a new HTML element in the existing HTML DOM. The desired position for the new HTML element is specified by using CSS selector syntax. The incoming HTML is first converted into a HTML Document Object Model so that HTML DOM location may be located in a similar manner that CSS selectors are used to apply styles to HTML. The resulting HTML DOM is then \\\"queried\\\" using the user defined CSS selector string to find the position where the user desires to add the new HTML element. Once the new HTML element is added to the DOM it is rendered to HTML and the result replaces the flowfile content with the updated HTML. A more thorough reference for the CSS selector syntax can be found at \\\"http://jsoup.org/apidocs/org/jsoup/select/Selector.html\\\"\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.cassandra.QueryCassandra\",\n+                        \"typeDescription\": \"Execute provided Cassandra Query Language (CQL) select query on a Cassandra 1.x, 2.x, or 3.0.x cluster. Query result may be converted to Avro or JSON format. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query. FlowFile attribute 'executecql.row.count' indicates how many rows were selected.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of rows returned by the CQL query\",\n+                                \"name\": \"executecql.row.count\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            }\n+                        ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-image-viewer-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-azure-nar\",\n+            \"artifact\": \"nifi-record-serialization-services-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"credential-configuration-strategy\": {\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached\",\n+                                \"displayName\": \"Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Uses default credential chain. It first checks environment variables, before trying managed identity.\",\n-                                        \"displayName\": \"Default Credential\",\n-                                        \"value\": \"default-credential\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n-                                        \"displayName\": \"Managed Identity\",\n-                                        \"value\": \"managed-identity\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile has the Avro Schema embedded within the content, and this schema will be used.\",\n+                                        \"displayName\": \"Use Embedded Avro Schema\",\n+                                        \"value\": \"embedded-avro-schema\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"default-credential\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Credential Configuration Strategy\",\n+                                \"defaultValue\": \"embedded-avro-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"credential-configuration-strategy\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"managed-identity-client-id\": {\n+                            \"schema-branch\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"managed-identity\"\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credential Configuration Strategy\",\n-                                        \"propertyName\": \"credential-configuration-strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n-                                \"displayName\": \"Managed Identity Client ID\",\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"managed-identity-client-id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.AzureCredentialsService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"credentials\",\n-                            \"provider\",\n-                            \"security\",\n-                            \"session\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.StandardAzureCredentialsControllerService\",\n-                        \"typeDescription\": \"Provide credentials to use with an Azure client.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"azure-cosmos-db-consistency-level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"STRONG\",\n-                                        \"value\": \"STRONG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BOUNDED_STALENESS\",\n-                                        \"value\": \"BOUNDED_STALENESS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SESSION\",\n-                                        \"value\": \"SESSION\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CONSISTENT_PREFIX\",\n-                                        \"value\": \"CONSISTENT_PREFIX\"\n-                                    },\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EVENTUAL\",\n-                                        \"value\": \"EVENTUAL\"\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SESSION\",\n-                                \"description\": \"Choose from five consistency levels on the consistency spectrum. Refer to Cosmos DB documentation for their differences\",\n-                                \"displayName\": \"Cosmos DB Consistency Level\",\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-consistency-level\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-key\": {\n-                                \"description\": \"Cosmos DB Access Key from Azure Portal (Settings->Keys). Choose a read-write key to enable database or container creation at run time\",\n-                                \"displayName\": \"Cosmos DB Access Key\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-key\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"azure-cosmos-db-uri\": {\n-                                \"description\": \"Cosmos DB URI, typically in the form of https://{databaseaccount}.documents.azure.com:443/ Note this host URL is for Cosmos DB with Core SQL API from Azure Portal (Overview->URI)\",\n-                                \"displayName\": \"Cosmos DB URI\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-uri\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cosmos\",\n-                            \"document\",\n-                            \"service\"\n+                            \"avro\",\n+                            \"comma\",\n+                            \"delimited\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"row\",\n+                            \"separated\",\n+                            \"values\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.cosmos.document.AzureCosmosDBClientService\",\n-                        \"typeDescription\": \"Provides a controller service that configures a connection to Cosmos DB (Core SQL API)  and provides access to that connection to other Cosmos DB-related components.\",\n+                        \"type\": \"org.apache.nifi.avro.AvroReader\",\n+                        \"typeDescription\": \"Parses Avro data and returns each Avro record as an separate Record object. The Avro data may contain the schema itself, or the schema can be externalized and accessed by one of the methods offered by the 'Schema Access Strategy' property.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Authentication Strategy\": {\n+                            \"Schema Write Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Azure Event Hub shared access key\",\n-                                        \"displayName\": \"Shared Access Key\",\n-                                        \"value\": \"SHARED_ACCESS_KEY\"\n+                                        \"description\": \"The FlowFile will have the Avro schema embedded into the content, as is typical with Avro\",\n+                                        \"displayName\": \"Embed Avro Schema\",\n+                                        \"value\": \"avro-embedded\"\n                                     },\n                                     {\n-                                        \"description\": \"The Default Azure Credential will read credentials from standard environment variables and will also attempt to read Managed Identity credentials when running in Microsoft Azure environments\",\n-                                        \"displayName\": \"Default Azure Credential\",\n-                                        \"value\": \"DEFAULT_AZURE_CREDENTIAL\"\n+                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n+                                        \"displayName\": \"Do Not Write Schema\",\n+                                        \"value\": \"no-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n+                                        \"displayName\": \"Set 'schema.name' Attribute\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n+                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n+                                        \"value\": \"full-schema-attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Schema Registry Reference\",\n+                                        \"value\": \"confluent-encoded\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DEFAULT_AZURE_CREDENTIAL\",\n-                                \"description\": \"Strategy for authenticating to Azure Event Hubs\",\n-                                \"displayName\": \"Authentication Strategy\",\n+                                \"defaultValue\": \"avro-embedded\",\n+                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n+                                \"displayName\": \"Schema Write Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Authentication Strategy\",\n+                                \"name\": \"Schema Write Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Event Hub Name\": {\n-                                \"description\": \"Provides the Event Hub Name for connections\",\n-                                \"displayName\": \"Event Hub Name\",\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Name\",\n+                                \"name\": \"cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Event Hub Namespace\": {\n-                                \"description\": \"Provides provides the host for connecting to Azure Event Hubs\",\n-                                \"displayName\": \"Event Hub Namespace\",\n+                            \"compression-format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BZIP2\",\n+                                        \"value\": \"BZIP2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEFLATE\",\n+                                        \"value\": \"DEFLATE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Compression type to use when writing Avro files. Default is None.\",\n+                                \"displayName\": \"Compression Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Namespace\",\n+                                \"name\": \"compression-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Partition Key\": {\n-                                \"description\": \"A hint for Azure Event Hub message broker how to distribute messages across one or more partitions\",\n-                                \"displayName\": \"Partition Key\",\n+                            \"encoder-pool-size\": {\n+                                \"defaultValue\": \"32\",\n+                                \"description\": \"Avro Writers require the use of an Encoder. Creation of Encoders is expensive, but once created, they can be reused. This property controls the maximum number of Encoders that can be pooled and reused. Setting this value too small can result in degraded performance, but setting it higher can result in more heap being used. This property is ignored if the Avro Writer is configured with a Schema Write Strategy of 'Embed Avro Schema'.\",\n+                                \"displayName\": \"Encoder Pool Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Partition Key\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"encoder-pool-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Service Bus Endpoint\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Default Service Bus Endpoint\",\n-                                        \"displayName\": \"Azure\",\n-                                        \"value\": \".servicebus.windows.net\"\n-                                    },\n-                                    {\n-                                        \"description\": \"China Service Bus Endpoint\",\n-                                        \"displayName\": \"Azure China\",\n-                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n+                                        \"displayName\": \"Inherit Record Schema\",\n+                                        \"value\": \"inherit-record-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"Germany Service Bus Endpoint\",\n-                                        \"displayName\": \"Azure Germany\",\n-                                        \"value\": \".servicebus.cloudapi.de\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"United States Government Endpoint\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \".servicebus.windows.net\",\n-                                \"description\": \"Provides the domain for connecting to Azure Event Hubs\",\n-                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"defaultValue\": \"inherit-record-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Service Bus Endpoint\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared Access Policy\": {\n+                            \"schema-branch\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SHARED_ACCESS_KEY\"\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The name of the shared access policy. This policy must have Send claims\",\n-                                \"displayName\": \"Shared Access Policy\",\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-cache\": {\n+                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n+                                \"displayName\": \"Schema Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy\",\n+                                \"name\": \"schema-cache\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Shared Access Policy Key\": {\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SHARED_ACCESS_KEY\"\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The primary or secondary key of the shared access policy\",\n-                                \"displayName\": \"Shared Access Policy Key\",\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy Key\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Transport Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n-                                    },\n+                            \"schema-protocol-version\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\n+                                        \"dependentValues\": [\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n+                                        \"propertyName\": \"Schema Write Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Amqp\",\n-                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n-                                \"displayName\": \"Transport Type\",\n+                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n+                                \"displayName\": \"Schema Protocol Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-protocol-version\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n-                                \"required\": true,\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n+                            \"avro\",\n                             \"record\",\n-                            \"sink\"\n+                            \"recordset\",\n+                            \"result\",\n+                            \"row\",\n+                            \"serializer\",\n+                            \"set\",\n+                            \"writer\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.eventhub.AzureEventHubRecordSink\",\n-                        \"typeDescription\": \"Format and send Records to Azure Event Hubs\",\n+                        \"type\": \"org.apache.nifi.avro.AvroRecordSetWriter\",\n+                        \"typeDescription\": \"Writes the contents of a RecordSet in Binary Avro format.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"managed-identity-client-id\": {\n-                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n-                                \"displayName\": \"Managed Identity Client ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"managed-identity-client-id\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"accept-empty-extensions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, empty extensions will be accepted and will be associated to a null value.\",\n+                                \"displayName\": \"Accept empty extensions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"accept-empty-extensions\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-client-id\": {\n-                                \"description\": \"Client ID (or Application ID) of the Client/Application having the Service Principal. The property is required when Service Principal authentication is used.\",\n-                                \"displayName\": \"Service Principal Client ID\",\n+                            \"datetime-representation\": {\n+                                \"defaultValue\": \"en-US\",\n+                                \"description\": \"The IETF BCP 47 representation of the Locale to be used when parsing date fields with long or short month names (e.g. may <en-US> vs. mai. <fr-FR>. The defaultvalue is generally safe. Only change if having issues parsing CEF messages\",\n+                                \"displayName\": \"DateTime Locale\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-client-id\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"datetime-representation\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-client-secret\": {\n-                                \"description\": \"Password of the Client/Application. The property is required when Service Principal authentication is used.\",\n-                                \"displayName\": \"Service Principal Client Secret\",\n+                            \"inference-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Includes only CEF header fields into the inferred schema.\",\n+                                        \"displayName\": \"Headers only\",\n+                                        \"value\": \"headers-only\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Includes the CEF header and extension fields to the schema, but not the custom extensions.\",\n+                                        \"displayName\": \"Headers and extensions\",\n+                                        \"value\": \"headers-and-extensions\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Includes all fields into the inferred schema, involving custom extension fields as string values.\",\n+                                        \"displayName\": \"With custom extensions as strings\",\n+                                        \"value\": \"custom-extensions-as-string\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Includes all fields into the inferred schema, involving custom extension fields with inferred data types. The inference works based on the values in the FlowFile. In some scenarios this might result unsatisfiable behaviour. In these cases it is suggested to use \\\"With custom extensions as strings\\\" Inference Strategy or predefined schema.\",\n+                                        \"displayName\": \"With custom extensions inferred\",\n+                                        \"value\": \"custom-extensions-inferred\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"custom-extensions-inferred\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"infer-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Defines the set of fields should be included in the schema and the way the fields are being interpreted.\",\n+                                \"displayName\": \"Inference Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-client-secret\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"inference-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-tenant-id\": {\n-                                \"description\": \"Tenant ID of the Azure Active Directory hosting the Service Principal. The property is required when Service Principal authentication is used.\",\n-                                \"displayName\": \"Service Principal Tenant ID\",\n+                            \"invalid-message-field\": {\n+                                \"description\": \"Used when a line in the FlowFile cannot be parsed by the CEF parser. If set, instead of failing to process the FlowFile, a record is being added with one field. This record contains one field with the name specified by the property and the raw message as value.\",\n+                                \"displayName\": \"Invalid Field\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-tenant-id\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"invalid-message-field\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n+                            \"raw-message-field\": {\n+                                \"description\": \"If set the raw message will be added to the record using the property value as field name. This is not the same as the \\\"rawEvent\\\" extension field!\",\n+                                \"displayName\": \"Raw Message Field\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"raw-message-field\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"defaultValue\": \"dfs.core.windows.net\",\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n-                                \"displayName\": \"Endpoint Suffix\",\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n+                                        \"displayName\": \"Infer Schema\",\n+                                        \"value\": \"infer-schema\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"infer-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-use-managed-identity\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"schema-inference-cache\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"infer-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n-                                \"displayName\": \"Use Azure Managed Identity\",\n+                                \"description\": \"Specifies a Schema Cache to use when inferring the schema. If not populated, the schema will be inferred each time. However, if a cache is specified, the cache will first be consulted and if the applicable schema can be found, it will be used instead of inferring the schema.\",\n+                                \"displayName\": \"Schema Inference Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-use-managed-identity\",\n+                                \"name\": \"schema-inference-cache\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"adls\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsControllerService\",\n-                        \"typeDescription\": \"Defines credentials for ADLS processors.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If 'adls.credentials.name' attribute contains the name of the dynamic property, then the ADLSCredentialsService (registered in the value) will be selected.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register ADLSCredentialsService\",\n-                                \"value\": \"The ADLSCredentialsService\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"adls\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsControllerServiceLookup\",\n-                        \"typeDescription\": \"Provides an ADLSCredentialsService that can be used to dynamically select another ADLSCredentialsService. This service requires an attribute named 'adls.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'adls.credentials.name' will be used to select the ADLSCredentialsService that has been registered with that name. This will allow multiple ADLSCredentialsServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'adls.credentials.name' attribute.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Name\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService\",\n-                        \"typeDescription\": \"Defines credentials for Azure Storage processors. Uses Account Name with Account Key or Account Name with SAS Token.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If 'azure.storage.credentials.name' attribute contains the name of the dynamic property, then the AzureStorageCredentialsService (registered in the value) will be selected.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register AzureStorageCredentialsService\",\n-                                \"value\": \"The AzureStorageCredentialsService\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerServiceLookup\",\n-                        \"typeDescription\": \"Provides an AzureStorageCredentialsService that can be used to dynamically select another AzureStorageCredentialsService. This service requires an attribute named 'azure.storage.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'azure.storage.credentials.name' will be used to select the AzureStorageCredentialsService that has been registered with that name. This will allow multiple AzureStorageCredentialsServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'azure.storage.credentials.name' attribute.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If 'azure.storage.credentials.name' attribute contains the name of the dynamic property, then the AzureStorageCredentialsService_v12 (registered in the value) will be selected.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register AzureStorageCredentialsService_v12\",\n-                                \"value\": \"The AzureStorageCredentialsService_v12\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n+                            \"cef\",\n+                            \"parser\",\n+                            \"reader\",\n+                            \"record\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerServiceLookup_v12\",\n-                        \"typeDescription\": \"Provides an AzureStorageCredentialsService_v12 that can be used to dynamically select another AzureStorageCredentialsService_v12. This service requires an attribute named 'azure.storage.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'azure.storage.credentials.name' will be used to select the AzureStorageCredentialsService_v12 that has been registered with that name. This will allow multiple AzureStorageCredentialsServices_v12 to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'azure.storage.credentials.name' attribute.\",\n+                        \"type\": \"org.apache.nifi.cef.CEFReader\",\n+                        \"typeDescription\": \"Parses CEF (Common Event Format) events, returning each row as a record. This reader allows for inferring a schema based on the first event in the FlowFile or providing an explicit schema for interpreting the values.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"credentials-type\": {\n+                            \"CSV Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The primary or secondary Account Key of the storage account that provides full access to the resources in the account\",\n-                                        \"displayName\": \"Account Key\",\n-                                        \"value\": \"ACCOUNT_KEY\"\n+                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n+                                        \"displayName\": \"Custom Format\",\n+                                        \"value\": \"custom\"\n                                     },\n                                     {\n-                                        \"description\": \"SAS (Shared Access Signature) Token generated for accessing resources in the storage account\",\n-                                        \"displayName\": \"SAS Token\",\n-                                        \"value\": \"SAS_TOKEN\"\n+                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n+                                        \"displayName\": \"RFC 4180\",\n+                                        \"value\": \"rfc-4180\"\n                                     },\n                                     {\n-                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n-                                        \"displayName\": \"Managed Identity\",\n-                                        \"value\": \"MANAGED_IDENTITY\"\n+                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"excel\"\n                                     },\n                                     {\n-                                        \"description\": \"Azure Active Directory Service Principal with Client Id / Client Secret of a registered application\",\n-                                        \"displayName\": \"Service Principal\",\n-                                        \"value\": \"SERVICE_PRINCIPAL\"\n+                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n+                                        \"displayName\": \"Tab-Delimited\",\n+                                        \"value\": \"tdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by MySQL\",\n+                                        \"displayName\": \"MySQL Format\",\n+                                        \"value\": \"mysql\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n+                                        \"displayName\": \"Informix Unload\",\n+                                        \"value\": \"informix-unload\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n+                                        \"displayName\": \"Informix Unload Escape Disabled\",\n+                                        \"value\": \"informix-unload-csv\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SAS_TOKEN\",\n-                                \"description\": \"Credentials type to be used for authenticating to Azure\",\n-                                \"displayName\": \"Credentials Type\",\n+                                \"defaultValue\": \"custom\",\n+                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n+                                \"displayName\": \"CSV Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"credentials-type\",\n+                                \"name\": \"CSV Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"managed-identity-client-id\": {\n+                            \"Comment Marker\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"MANAGED_IDENTITY\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n-                                \"displayName\": \"Managed Identity Client ID\",\n+                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n+                                \"displayName\": \"Comment Marker\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Comment Marker\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"managed-identity-client-id\",\n+                                \"name\": \"Date Format\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n+                            \"Escape Character\": {\n+                                \"defaultValue\": \"\\\\\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\",\n-                                            \"MANAGED_IDENTITY\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n+                                \"displayName\": \"Escape Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Escape Character\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-client-id\": {\n+                            \"Null String\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Client ID (or Application ID) of the Client/Application having the Service Principal. The property is required when Service Principal authentication is used.\",\n-                                \"displayName\": \"Service Principal Client ID\",\n+                                \"description\": \"Specifies a String that, if present as a value in the CSV, should be considered a null field instead of using the literal value.\",\n+                                \"displayName\": \"Null String\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-client-id\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"name\": \"Null String\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-client-secret\": {\n+                            \"Quote Character\": {\n+                                \"defaultValue\": \"\\\"\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Password of the Client/Application. The property is required when Service Principal authentication is used.\",\n-                                \"displayName\": \"Service Principal Client Secret\",\n+                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n+                                \"displayName\": \"Quote Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-client-secret\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Quote Character\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-tenant-id\": {\n+                            \"Record Separator\": {\n+                                \"defaultValue\": \"\\\\n\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Tenant ID of the Azure Active Directory hosting the Service Principal. The property is required when Service Principal authentication is used.\",\n-                                \"displayName\": \"Service Principal Tenant ID\",\n+                                \"description\": \"Specifies the characters to use in order to separate CSV Records\",\n+                                \"displayName\": \"Record Separator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-tenant-id\",\n+                                \"name\": \"Record Separator\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-key\": {\n-                                \"dependencies\": [\n+                            \"Skip Header Line\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"ACCOUNT_KEY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies.\",\n-                                \"displayName\": \"Account Key\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the first line of CSV should be considered a Header or should be considered a record. If the Schema Access Strategy indicates that the columns must be defined in the header, then this property will be ignored, since the header must always be present and won't be processed as a Record. Otherwise, if 'true', then the first line of CSV data will not be processed as a record and if 'false',then the first line will be interpreted as a record.\",\n+                                \"displayName\": \"Treat First Line as Header\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-account-key\",\n+                                \"name\": \"Skip Header Line\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name.\",\n-                                \"displayName\": \"Storage Account Name\",\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-account-name\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"name\": \"Time Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"defaultValue\": \"blob.core.windows.net\",\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n-                                \"displayName\": \"Endpoint Suffix\",\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-endpoint-suffix\",\n-                                \"required\": true,\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n+                            \"Trim Fields\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SAS_TOKEN\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key.\",\n-                                \"displayName\": \"SAS Token\",\n+                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n+                                \"displayName\": \"Trim Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"name\": \"Trim Fields\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService_v12\",\n-                        \"typeDescription\": \"Provides credentials for Azure Storage processors using Azure Storage client library v12.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"azurite-uri\": {\n-                                \"description\": \"URI to connect to Azure Storage Emulator (Azurite)\",\n-                                \"displayName\": \"Storage Emulator URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azurite-uri\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"credentials\",\n-                            \"emulator\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageEmulatorCredentialsControllerService\",\n-                        \"typeDescription\": \"Defines credentials for Azure Storage processors that connects to Azurite emulator.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"azure-cosmos-db-conflict-handling-strategy\": {\n+                            },\n+                            \"Trim double quote\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Conflicting records will not be inserted, and FlowFile will not be routed to failure\",\n-                                        \"displayName\": \"Ignore\",\n-                                        \"value\": \"IGNORE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Conflicting records will be upserted, and FlowFile will not be routed to failure\",\n-                                        \"displayName\": \"Upsert\",\n-                                        \"value\": \"UPSERT\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"IGNORE\",\n-                                \"description\": \"Choose whether to ignore or upsert when conflict error occurs during insertion\",\n-                                \"displayName\": \"Cosmos DB Conflict Handling Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"rfc-4180\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether or not to trim starting and ending double quotes. For example: with trim string '\\\"test\\\"' would be parsed to 'test', without trim would be parsed to '\\\"test\\\"'.If set to 'false' it means full compliance with RFC-4180. Default value is true, with trim.\",\n+                                \"displayName\": \"Trim double quote\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-conflict-handling-strategy\",\n-                                \"required\": false,\n+                                \"name\": \"Trim double quote\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-connection-service\": {\n-                                \"description\": \"If configured, the controller service used to obtain the connection string and access key\",\n-                                \"displayName\": \"Cosmos DB Connection Service\",\n+                            \"Value Separator\": {\n+                                \"defaultValue\": \",\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n+                                \"displayName\": \"Value Separator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-connection-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Value Separator\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-consistency-level\": {\n+                            \"csv-reader-csv-parser\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"STRONG\",\n-                                        \"value\": \"STRONG\"\n+                                        \"description\": \"The CSV parser implementation from the Apache Commons CSV library.\",\n+                                        \"displayName\": \"Apache Commons CSV\",\n+                                        \"value\": \"commons-csv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BOUNDED_STALENESS\",\n-                                        \"value\": \"BOUNDED_STALENESS\"\n-                                    },\n+                                        \"description\": \"The CSV parser implementation from the Jackson Dataformats library.\",\n+                                        \"displayName\": \"Jackson CSV\",\n+                                        \"value\": \"jackson-csv\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"commons-csv\",\n+                                \"description\": \"Specifies which parser to use to read CSV records. NOTE: Different parsers may support different subsets of functionality and may also exhibit different levels of performance.\",\n+                                \"displayName\": \"CSV Parser\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"csv-reader-csv-parser\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"csvutils-allow-duplicate-header-names\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SESSION\",\n-                                        \"value\": \"SESSION\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CONSISTENT_PREFIX\",\n-                                        \"value\": \"CONSISTENT_PREFIX\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EVENTUAL\",\n-                                        \"value\": \"EVENTUAL\"\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SESSION\",\n-                                \"description\": \"Choose from five consistency levels on the consistency spectrum. Refer to Cosmos DB documentation for their differences\",\n-                                \"displayName\": \"Cosmos DB Consistency Level\",\n+                                \"description\": \"Whether duplicate header names are allowed. Header names are case-sensitive, for example \\\"name\\\" and \\\"Name\\\" are treated as separate fields. Handling of duplicate header names is CSV Parser specific (where applicable):\\n* Apache Commons CSV - duplicate headers will result in column data \\\"shifting\\\" right with new fields created for \\\"unknown_field_index_X\\\" where \\\"X\\\" is the CSV column index number\\n* Jackson CSV - duplicate headers will be de-duplicated with the field value being that of the right-most duplicate CSV column\",\n+                                \"displayName\": \"Allow Duplicate Header Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-consistency-level\",\n+                                \"name\": \"csvutils-allow-duplicate-header-names\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-container-id\": {\n-                                \"description\": \"The unique identifier for the container\",\n-                                \"displayName\": \"Cosmos DB Container ID\",\n+                            \"csvutils-character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Encoding that is used to encode/decode the CSV file\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-container-id\",\n+                                \"name\": \"csvutils-character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-key\": {\n-                                \"description\": \"Cosmos DB Access Key from Azure Portal (Settings->Keys). Choose a read-write key to enable database or container creation at run time\",\n-                                \"displayName\": \"Cosmos DB Access Key\",\n+                            \"ignore-csv-header\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If the first line of a CSV is a header, and the configured schema does not match the fields named in the header line, this controls how the Reader will interpret the fields. If this property is true, then the field names mapped to each column are driven only by the configured schema and any fields not in the schema will be ignored. If this property is false, then the field names found in the CSV Header will be used as the names of the fields.\",\n+                                \"displayName\": \"Ignore CSV Header Column Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-key\",\n+                                \"name\": \"ignore-csv-header\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"azure-cosmos-db-name\": {\n-                                \"description\": \"The database name or id. This is used as the namespace for document collections or containers\",\n-                                \"displayName\": \"Cosmos DB Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-name\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-partition-key\": {\n-                                \"description\": \"The partition key used to distribute data among servers\",\n-                                \"displayName\": \"Cosmos DB Partition Key\",\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The first non-comment line of the CSV file is a header line that contains the names of the columns. The schema will be derived by using the column names in the header and assuming that all columns are of type String.\",\n+                                        \"displayName\": \"Use String Fields From Header\",\n+                                        \"value\": \"csv-header-derived\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n+                                        \"displayName\": \"Infer Schema\",\n+                                        \"value\": \"infer-schema\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"infer-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-partition-key\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-uri\": {\n-                                \"description\": \"Cosmos DB URI, typically in the form of https://{databaseaccount}.documents.azure.com:443/ Note this host URL is for Cosmos DB with Core SQL API from Azure Portal (Overview->URI)\",\n-                                \"displayName\": \"Cosmos DB URI\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-uri\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"insert-batch-size\": {\n-                                \"defaultValue\": \"20\",\n-                                \"description\": \"The number of records to group together for one single insert operation against Cosmos DB\",\n-                                \"displayName\": \"Insert Batch Size\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"insert-batch-size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are written to Cosmos DB are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles that cannot be written to Cosmos DB are routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cosmos\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"record\"\n+                            \"comma\",\n+                            \"csv\",\n+                            \"delimited\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"row\",\n+                            \"separated\",\n+                            \"values\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.cosmos.document.PutAzureCosmosDBRecord\",\n-                        \"typeDescription\": \"This processor is a record-aware processor for inserting data into Cosmos DB with Core SQL API. It uses a configured record reader and schema to read an incoming record set from the body of a Flowfile and then inserts those records into a configured Cosmos DB Container.\",\n+                        \"type\": \"org.apache.nifi.csv.CSVReader\",\n+                        \"typeDescription\": \"Parses CSV-formatted data, returning each row in the CSV file as a separate record. This reader allows for inferring a schema based on the first line of the CSV, if a 'header line' is present, or providing an explicit schema for interpreting the values. See Controller Service's Usage for further documentation.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Service Bus Endpoint\": {\n+                            \"CSV Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Servicebus endpoint for general use\",\n-                                        \"displayName\": \"Azure\",\n-                                        \"value\": \".servicebus.windows.net\"\n+                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n+                                        \"displayName\": \"Custom Format\",\n+                                        \"value\": \"custom\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for China\",\n-                                        \"displayName\": \"Azure China\",\n-                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n+                                        \"displayName\": \"RFC 4180\",\n+                                        \"value\": \"rfc-4180\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for Germany\",\n-                                        \"displayName\": \"Azure Germany\",\n-                                        \"value\": \".servicebus.cloudapi.de\"\n+                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"excel\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for US Government\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \".servicebus.windows.net\",\n-                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n-                                \"displayName\": \"Service Bus Endpoint\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Service Bus Endpoint\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Transport Type\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n+                                        \"displayName\": \"Tab-Delimited\",\n+                                        \"value\": \"tdf\"\n+                                    },\n                                     {\n-                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n+                                        \"description\": \"CSV data follows the format used by MySQL\",\n+                                        \"displayName\": \"MySQL Format\",\n+                                        \"value\": \"mysql\"\n                                     },\n                                     {\n-                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n+                                        \"displayName\": \"Informix Unload\",\n+                                        \"value\": \"informix-unload\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n+                                        \"displayName\": \"Informix Unload Escape Disabled\",\n+                                        \"value\": \"informix-unload-csv\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Amqp\",\n-                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n-                                \"displayName\": \"Transport Type\",\n+                                \"defaultValue\": \"custom\",\n+                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n+                                \"displayName\": \"CSV Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n+                                \"name\": \"CSV Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"checkpoint-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use Azure Blob Storage to store partition ownership and checkpoint information\",\n-                                        \"displayName\": \"Azure Blob Storage\",\n-                                        \"value\": \"AZURE_BLOB_STORAGE\"\n-                                    },\n+                            \"Comment Marker\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Use component state to store partition ownership and checkpoint information\",\n-                                        \"displayName\": \"Component State\",\n-                                        \"value\": \"COMPONENT_STATE\"\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AZURE_BLOB_STORAGE\",\n-                                \"description\": \"Specifies which strategy to use for storing and retrieving partition ownership and checkpoint information for each partition.\",\n-                                \"displayName\": \"Checkpoint Strategy\",\n+                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n+                                \"displayName\": \"Comment Marker\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"checkpoint-strategy\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Comment Marker\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-batch-size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The number of messages to process within a NiFi session. This parameter affects throughput and consistency. NiFi commits its session and Event Hubs checkpoints after processing this number of messages. If NiFi session is committed, but fails to create an Event Hubs checkpoint, then it is possible that the same messages will be received again. The higher number, the higher throughput, but possibly less consistent.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-batch-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Date Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-consumer-group\": {\n-                                \"defaultValue\": \"$Default\",\n-                                \"description\": \"The name of the consumer group to use.\",\n-                                \"displayName\": \"Consumer Group\",\n+                            \"Escape Character\": {\n+                                \"defaultValue\": \"\\\\\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n+                                \"displayName\": \"Escape Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-consumer-group\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Escape Character\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-consumer-hostname\": {\n-                                \"description\": \"DEPRECATED: This property is no longer used.\",\n-                                \"displayName\": \"Consumer Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-consumer-hostname\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"event-hub-initial-offset\": {\n+                            \"Include Header Line\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Read from the oldest message retained in the stream.\",\n-                                        \"displayName\": \"Start of stream\",\n-                                        \"value\": \"start-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Ignore old retained messages even if exist, start reading new ones from now.\",\n-                                        \"displayName\": \"End of stream\",\n-                                        \"value\": \"end-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"end-of-stream\",\n-                                \"description\": \"Specify where to start receiving messages if offset is not yet stored in the checkpoint store.\",\n-                                \"displayName\": \"Initial Offset\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not the CSV column names should be written out as the first line.\",\n+                                \"displayName\": \"Include Header Line\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"event-hub-initial-offset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"event-hub-message-receive-timeout\": {\n-                                \"defaultValue\": \"1 min\",\n-                                \"description\": \"The amount of time this consumer should wait to receive the Batch Size before returning.\",\n-                                \"displayName\": \"Message Receive Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-message-receive-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"event-hub-name\": {\n-                                \"description\": \"The name of the event hub to pull messages from.\",\n-                                \"displayName\": \"Event Hub Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"event-hub-namespace\": {\n-                                \"description\": \"The namespace that the Azure Event Hubs is assigned to. This is generally equal to <Event Hub Names>-ns.\",\n-                                \"displayName\": \"Event Hub Namespace\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-namespace\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"event-hub-prefetch-count\": {\n-                                \"defaultValue\": \"300\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Prefetch Count\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-prefetch-count\",\n+                                \"name\": \"Include Header Line\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-shared-access-policy-name\": {\n-                                \"description\": \"The name of the shared access policy. This policy must have Listen claims.\",\n-                                \"displayName\": \"Shared Access Policy Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-shared-access-policy-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"event-hub-shared-access-policy-primary-key\": {\n-                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n-                                \"displayName\": \"Shared Access Policy Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"event-hub-shared-access-policy-primary-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"proxy-configuration-service\": {\n+                            \"Include Trailing Delimiter\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"AmqpWebSockets\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Transport Type\",\n-                                        \"propertyName\": \"Transport Type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for reading received messages. The event hub name can be referred by Expression Language '${eventhub.name}' to access a schema.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile. The event hub name can be referred by Expression Language '${eventhub.name}' to access a schema. If not specified, each message will create a FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n+                                \"description\": \"If true, a trailing delimiter will be added to each CSV Record that is written. If false, the trailing delimiter will be omitted.\",\n+                                \"displayName\": \"Include Trailing Delimiter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Include Trailing Delimiter\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-key\": {\n+                            \"Null String\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"AZURE_BLOB_STORAGE\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n-                                        \"propertyName\": \"checkpoint-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"The Azure Storage account key to store event hub consumer group state.\",\n-                                \"displayName\": \"Storage Account Key\",\n+                                \"description\": \"Specifies a String that, if present as a value in the CSV, should be considered a null field instead of using the literal value.\",\n+                                \"displayName\": \"Null String\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-account-key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Null String\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-name\": {\n+                            \"Quote Character\": {\n+                                \"defaultValue\": \"\\\"\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"AZURE_BLOB_STORAGE\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n-                                        \"propertyName\": \"checkpoint-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Name of the Azure Storage account to store event hub consumer group state.\",\n-                                \"displayName\": \"Storage Account Name\",\n+                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n+                                \"displayName\": \"Quote Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-account-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Quote Character\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-container-name\": {\n+                            \"Quote Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"All values will be quoted using the configured quote character.\",\n+                                        \"displayName\": \"Quote All Values\",\n+                                        \"value\": \"ALL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n+                                        \"displayName\": \"Quote Minimal\",\n+                                        \"value\": \"MINIMAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will be quoted unless the value is a number.\",\n+                                        \"displayName\": \"Quote Non-Numeric Values\",\n+                                        \"value\": \"NON_NUMERIC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n+                                        \"displayName\": \"Do Not Quote Values\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"MINIMAL\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"AZURE_BLOB_STORAGE\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n-                                        \"propertyName\": \"checkpoint-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Name of the Azure Storage container to store the event hub consumer group state. If not specified, event hub name is used.\",\n-                                \"displayName\": \"Storage Container Name\",\n+                                \"description\": \"Specifies how fields should be quoted when they are written\",\n+                                \"displayName\": \"Quote Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-container-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Quote Mode\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n+                            \"Record Separator\": {\n+                                \"defaultValue\": \"\\\\n\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"AZURE_BLOB_STORAGE\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n-                                        \"propertyName\": \"checkpoint-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"The Azure Storage SAS token to store Event Hub consumer group state. Always starts with a ? character.\",\n-                                \"displayName\": \"Storage SAS Token\",\n+                                \"description\": \"Specifies the characters to use in order to separate CSV Records\",\n+                                \"displayName\": \"Record Separator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-sas-token\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Separator\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"use-managed-identity\": {\n+                            \"Schema Write Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n+                                        \"displayName\": \"Do Not Write Schema\",\n+                                        \"value\": \"no-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n+                                        \"displayName\": \"Set 'schema.name' Attribute\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n+                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n+                                        \"value\": \"full-schema-attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Schema Registry Reference\",\n+                                        \"value\": \"confluent-encoded\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n-                                \"displayName\": \"Use Azure Managed Identity\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-managed-identity\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Local state is used to store the client id. Cluster state is used to store partition ownership and checkpoint information when component state is configured as the checkpointing strategy.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\",\n-                                \"LOCAL\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles received from Event Hub.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a message from event hub cannot be parsed using the configured Record Reader or failed to be written by the configured Record Writer, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"eventhub\",\n-                            \"events\",\n-                            \"microsoft\",\n-                            \"streaming\",\n-                            \"streams\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.eventhub.ConsumeAzureEventHub\",\n-                        \"typeDescription\": \"Receives messages from Microsoft Azure Event Hubs with checkpointing to ensure consistent event processing. Checkpoint tracking avoids consuming a message multiple times and enables reliable resumption of processing in the event of intermittent network failures. Checkpoint tracking requires external storage and provides the preferred approach to consuming messages from Azure Event Hubs. In clustered environment, ConsumeAzureEventHub processor instances form a consumer group and the messages are distributed among the cluster nodes (each message is processed on one cluster node only).\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The time (in milliseconds since epoch, UTC) at which the message was enqueued in the event hub\",\n-                                \"name\": \"eventhub.enqueued.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The offset into the partition at which the message was stored\",\n-                                \"name\": \"eventhub.offset\"\n-                            },\n-                            {\n-                                \"description\": \"The sequence number associated with the message\",\n-                                \"name\": \"eventhub.sequence\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the event hub from which the message was pulled\",\n-                                \"name\": \"eventhub.name\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the partition from which the message was pulled\",\n-                                \"name\": \"eventhub.partition\"\n-                            },\n-                            {\n-                                \"description\": \"The application properties of this message. IE: 'application' would be 'eventhub.property.application'\",\n-                                \"name\": \"eventhub.property.*\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Event Hub Consumer Group\": {\n-                                \"defaultValue\": \"$Default\",\n-                                \"description\": \"The name of the consumer group to use when pulling events\",\n-                                \"displayName\": \"Consumer Group\",\n+                                \"defaultValue\": \"no-schema\",\n+                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n+                                \"displayName\": \"Schema Write Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Consumer Group\",\n+                                \"name\": \"Schema Write Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Event Hub Message Enqueue Time\": {\n-                                \"description\": \"A timestamp (ISO-8601 Instant) formatted as YYYY-MM-DDThhmmss.sssZ (2016-01-01T01:01:01.000Z) from which messages should have been enqueued in the Event Hub to start reading from\",\n-                                \"displayName\": \"Message Enqueue Time\",\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Message Enqueue Time\",\n+                                \"name\": \"Time Format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Event Hub Name\": {\n-                                \"description\": \"Name of Azure Event Hubs source\",\n-                                \"displayName\": \"Event Hub Name\",\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Name\",\n-                                \"required\": true,\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Event Hub Namespace\": {\n-                                \"description\": \"Namespace of Azure Event Hubs prefixed to Service Bus Endpoint domain\",\n-                                \"displayName\": \"Event Hub Namespace\",\n+                            \"Trim Fields\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n+                                \"displayName\": \"Trim Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Namespace\",\n+                                \"name\": \"Trim Fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Number of Event Hub Partitions\": {\n-                                \"description\": \"This property is deprecated and no longer used.\",\n-                                \"displayName\": \"Number of Event Hub Partitions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Number of Event Hub Partitions\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Partition Receiver Timeout (millseconds)\": {\n-                                \"description\": \"The amount of time in milliseconds a Partition Receiver should wait to receive the Fetch Size before returning. The default is 60000\",\n-                                \"displayName\": \"Partition Receiver Timeout\",\n+                            \"Value Separator\": {\n+                                \"defaultValue\": \",\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n+                                \"displayName\": \"Value Separator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Partition Receiver Timeout (millseconds)\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Value Separator\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Partition Recivier Fetch Size\": {\n-                                \"description\": \"The number of events that a receiver should fetch from an Event Hubs partition before returning. The default is 100\",\n-                                \"displayName\": \"Partition Receiver Fetch Size\",\n+                            \"csvutils-character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Encoding that is used to encode/decode the CSV file\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Partition Recivier Fetch Size\",\n-                                \"required\": false,\n+                                \"name\": \"csvutils-character-set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Service Bus Endpoint\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Servicebus endpoint for general use\",\n-                                        \"displayName\": \"Azure\",\n-                                        \"value\": \".servicebus.windows.net\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Servicebus endpoint for China\",\n-                                        \"displayName\": \"Azure China\",\n-                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n+                                        \"displayName\": \"Inherit Record Schema\",\n+                                        \"value\": \"inherit-record-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for Germany\",\n-                                        \"displayName\": \"Azure Germany\",\n-                                        \"value\": \".servicebus.cloudapi.de\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for US Government\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \".servicebus.windows.net\",\n-                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n-                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"defaultValue\": \"inherit-record-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Service Bus Endpoint\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared Access Policy Name\": {\n-                                \"description\": \"The name of the shared access policy. This policy must have Listen claims.\",\n-                                \"displayName\": \"Shared Access Policy Name\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy Name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared Access Policy Primary Key\": {\n-                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n-                                \"displayName\": \"Shared Access Policy Key\",\n+                            \"schema-cache\": {\n+                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n+                                \"displayName\": \"Schema Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy Primary Key\",\n+                                \"name\": \"schema-cache\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Transport Type\": {\n-                                \"allowableValues\": [\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-protocol-version\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\n+                                        \"dependentValues\": [\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n+                                        \"propertyName\": \"Schema Write Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Amqp\",\n-                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n-                                \"displayName\": \"Transport Type\",\n+                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n+                                \"displayName\": \"Schema Protocol Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-protocol-version\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n+                            \"schema-registry\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"AmqpWebSockets\"\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Transport Type\",\n-                                        \"propertyName\": \"Transport Type\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"use-managed-identity\": {\n-                                \"allowableValues\": [\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n-                                \"displayName\": \"Use Azure Managed Identity\",\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-managed-identity\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.eventhub.ConsumeAzureEventHub\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully received from the event hub will be transferred to this Relationship.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"eventhub\",\n-                            \"events\",\n-                            \"microsoft\",\n-                            \"streaming\",\n-                            \"streams\"\n+                            \"csv\",\n+                            \"delimited\",\n+                            \"record\",\n+                            \"recordset\",\n+                            \"result\",\n+                            \"row\",\n+                            \"separated\",\n+                            \"serializer\",\n+                            \"set\",\n+                            \"tab\",\n+                            \"tsv\",\n+                            \"writer\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.eventhub.GetAzureEventHub\",\n-                        \"typeDescription\": \"Receives messages from Microsoft Azure Event Hubs without reliable checkpoint tracking. In clustered environment, GetAzureEventHub processor instances work independently and all cluster nodes process all messages (unless running the processor in Primary Only mode). ConsumeAzureEventHub offers the recommended approach to receiving messages from Azure Event Hubs. This processor creates a thread pool for connections to Azure Event Hubs.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The time (in milliseconds since epoch, UTC) at which the message was enqueued in the event hub\",\n-                                \"name\": \"eventhub.enqueued.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The offset into the partition at which the message was stored\",\n-                                \"name\": \"eventhub.offset\"\n-                            },\n-                            {\n-                                \"description\": \"The Azure sequence number associated with the message\",\n-                                \"name\": \"eventhub.sequence\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the event hub from which the message was pulled\",\n-                                \"name\": \"eventhub.name\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the event hub partition from which the message was pulled\",\n-                                \"name\": \"eventhub.partition\"\n-                            },\n-                            {\n-                                \"description\": \"The application properties of this message. IE: 'application' would be 'eventhub.property.application'\",\n-                                \"name\": \"eventhub.property.*\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.csv.CSVRecordSetWriter\",\n+                        \"typeDescription\": \"Writes the contents of a RecordSet as CSV data. The first line written will be the column names (unless the 'Include Header Line' property is false). All subsequent lines will be the values corresponding to the record fields.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Patterns and Expressions can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Event Hub Name\": {\n-                                \"description\": \"Name of Azure Event Hubs destination\",\n-                                \"displayName\": \"Event Hub Name\",\n+                            \"Grok Expression\": {\n+                                \"description\": \"Specifies the format of a log line in Grok format. This allows the Record Reader to understand how to parse each log line. The property supports one or more Grok expressions. The Reader attempts to parse input lines according to the configured order of the expressions.If a line in the log file does not match any expressions, the line will be assumed to belong to the previous log message.If other Grok patterns are referenced by this expression, they need to be supplied in the Grok Pattern File property.\",\n+                                \"displayName\": \"Grok Expressions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Name\",\n+                                \"name\": \"Grok Expression\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Event Hub Namespace\": {\n-                                \"description\": \"Namespace of Azure Event Hubs prefixed to Service Bus Endpoint domain\",\n-                                \"displayName\": \"Event Hub Namespace\",\n+                            \"Grok Pattern File\": {\n+                                \"description\": \"Grok Patterns to use for parsing logs. If not specified, a built-in default Pattern file will be used. If specified, all patterns specified will override the default patterns. See the Controller Service's Additional Details for a list of pre-defined patterns.\",\n+                                \"displayName\": \"Grok Patterns\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Namespace\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Grok Pattern File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Service Bus Endpoint\": {\n+                            \"no-match-behavior\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Servicebus endpoint for general use\",\n-                                        \"displayName\": \"Azure\",\n-                                        \"value\": \".servicebus.windows.net\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Servicebus endpoint for China\",\n-                                        \"displayName\": \"Azure China\",\n-                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                        \"description\": \"The line of text that does not match the Grok Expression will be appended to the last field of the prior message.\",\n+                                        \"displayName\": \"Append to Previous Message\",\n+                                        \"value\": \"append-to-previous-message\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for Germany\",\n-                                        \"displayName\": \"Azure Germany\",\n-                                        \"value\": \".servicebus.cloudapi.de\"\n+                                        \"description\": \"The line of text that does not match the Grok Expression will be skipped.\",\n+                                        \"displayName\": \"Skip Line\",\n+                                        \"value\": \"skip-line\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for US Government\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                        \"description\": \"The line of text that does not match the Grok Expression will only be added to the _raw field.\",\n+                                        \"displayName\": \"Raw Line\",\n+                                        \"value\": \"raw-line\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \".servicebus.windows.net\",\n-                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n-                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"defaultValue\": \"append-to-previous-message\",\n+                                \"description\": \"If a line of text is encountered and it does not match the given Grok Expression, and it is not part of a stack trace, this property specifies how the text should be processed.\",\n+                                \"displayName\": \"No Match Behavior\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Service Bus Endpoint\",\n+                                \"name\": \"no-match-behavior\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared Access Policy Name\": {\n-                                \"description\": \"The name of the shared access policy. This policy must have Send claims.\",\n-                                \"displayName\": \"Shared Access Policy Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Shared Access Policy Primary Key\": {\n-                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n-                                \"displayName\": \"Shared Access Policy Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy Primary Key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Transport Type\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n+                                        \"description\": \"The schema will be derived using the field names present in all configured Grok Expressions. All schema fields will have a String type and will be marked as nullable. The schema will also include a `stackTrace` field, and a `_raw` field containing the input line string.\",\n+                                        \"displayName\": \"Use String Fields From Grok Expression\",\n+                                        \"value\": \"string-fields-from-grok-expression\"\n                                     },\n                                     {\n-                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Amqp\",\n-                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n-                                \"displayName\": \"Transport Type\",\n+                                \"defaultValue\": \"string-fields-from-grok-expression\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-batch-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Maximum number of FlowFiles processed for each Processor invocation\",\n-                                \"displayName\": \"Maximum Batch Size\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-batch-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioning-key-attribute-name\": {\n-                                \"description\": \"If specified, the value from argument named by this field will be used as a partitioning key to be used by event hub.\",\n-                                \"displayName\": \"Partitioning Key Attribute Name\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioning-key-attribute-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n+                            \"schema-registry\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"AmqpWebSockets\"\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Transport Type\",\n-                                        \"propertyName\": \"Transport Type\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"use-managed-identity\": {\n-                                \"allowableValues\": [\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n-                                \"displayName\": \"Use Azure Managed Identity\",\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-managed-identity\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully sent to the event hubs will be transferred to this Relationship.\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Any FlowFile that could not be sent to the event hub will be transferred to this Relationship.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The Processor buffers FlowFile contents in memory before sending\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"eventhub\",\n-                            \"events\",\n-                            \"microsoft\",\n-                            \"streaming\",\n-                            \"streams\"\n+                            \"grok\",\n+                            \"logfiles\",\n+                            \"logs\",\n+                            \"logstash\",\n+                            \"parse\",\n+                            \"pattern\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"regex\",\n+                            \"text\",\n+                            \"unstructured\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.eventhub.PutAzureEventHub\",\n-                        \"typeDescription\": \"Send FlowFile contents to Azure Event Hubs\",\n+                        \"type\": \"org.apache.nifi.grok.GrokReader\",\n+                        \"typeDescription\": \"Provides a mechanism for reading unstructured text data, such as log files, and structuring the data so that it can be processed. The service is configured using Grok patterns. The service reads from a stream of data and splits each message that it finds into a separate Record, each containing the fields that are configured. If a line in the input does not match the expected message pattern, the line of text is either considered to be part of the previous message or is skipped, depending on the configuration, with the exception of stack traces. A stack trace that is found at the end of a log message is considered to be part of the previous message but is added to the 'stackTrace' field of the Record. If a record has no stack trace, it will have a NULL value for the stackTrace field (assuming that the schema does in fact include a stackTrace field of type String). Assuming that the schema includes a '_raw' field of type String, the raw message will be included in the Record.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\"\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"User-defined properties identify how to extract specific fields from a JSON object in order to create a Record\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The field name for the record.\",\n+                                \"value\": \"A JSONPath Expression that will be evaluated against each JSON record. The result of the JSONPath will be the value of the field whose name is the same as the property name.\"\n+                            }\n                         ],\n-                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"blob\": {\n-                                \"defaultValue\": \"${azure.blobname}\",\n-                                \"description\": \"The filename of the blob\",\n-                                \"displayName\": \"Blob\",\n+                            \"Allow Comments\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to allow comments when parsing the JSON document\",\n+                                \"displayName\": \"Allow Comments\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"blob\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Allow Comments\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Date Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n+                                \"displayName\": \"Max String Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max String Length\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete-snapshots-option\": {\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Time Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Delete the blob only.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete the blob and its snapshots.\",\n-                                        \"displayName\": \"Include Snapshots\",\n-                                        \"value\": \"INCLUDE_SNAPSHOTS\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete only the blob's snapshots.\",\n-                                        \"displayName\": \"Delete Snapshots Only\",\n-                                        \"value\": \"DELETE_SNAPSHOTS_ONLY\"\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n+                                        \"displayName\": \"Infer Schema\",\n+                                        \"value\": \"infer-schema\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the snapshot deletion options to be used when deleting a blob.\",\n-                                \"displayName\": \"Delete Snapshots Option\",\n+                                \"defaultValue\": \"infer-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete-snapshots-option\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Storage Account Name\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.json.JsonTreeReader\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"json\",\n+                            \"jsonpath\",\n+                            \"parser\",\n+                            \"reader\",\n+                            \"record\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n-                        \"typeDescription\": \"Deletes the provided blob from Azure Storage\",\n+                        \"type\": \"org.apache.nifi.json.JsonPathReader\",\n+                        \"typeDescription\": \"Parses JSON records and evaluates user-defined JSON Path's against each JSON object. While the reader expects each record to be well-formed JSON, the content of a FlowFile may consist of many records, each as a well-formed JSON array or JSON object with optional whitespace between them, such as the common 'JSON-per-line' format. If an array is encountered, each element in that array will be treated as a separate record. User-defined properties define the fields that should be extracted from the JSON in order to form the fields of a Record. Any JSON field that is not extracted via a JSONPath will not be returned in the JSON Records.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"blob-name\": {\n-                                \"defaultValue\": \"${azure.blobname}\",\n-                                \"description\": \"The full name of the blob\",\n-                                \"displayName\": \"Blob Name\",\n+                            \"Allow Scientific Notation\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not scientific notation should be used when writing numbers\",\n+                                \"displayName\": \"Allow Scientific Notation\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Allow Scientific Notation\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"defaultValue\": \"${azure.container}\",\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Date Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Pretty Print JSON\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the JSON should be pretty printed\",\n+                                \"displayName\": \"Pretty Print JSON\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Pretty Print JSON\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete-snapshots-option\": {\n+                            \"Schema Write Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Delete the blob only.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n+                                        \"displayName\": \"Do Not Write Schema\",\n+                                        \"value\": \"no-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete the blob and its snapshots.\",\n-                                        \"displayName\": \"Include Snapshots\",\n-                                        \"value\": \"INCLUDE\"\n+                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n+                                        \"displayName\": \"Set 'schema.name' Attribute\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete only the blob's snapshots.\",\n-                                        \"displayName\": \"Delete Snapshots Only\",\n-                                        \"value\": \"ONLY\"\n+                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n+                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n+                                        \"value\": \"full-schema-attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Schema Registry Reference\",\n+                                        \"value\": \"confluent-encoded\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the snapshot deletion options to be used when deleting a blob.\",\n-                                \"displayName\": \"Delete Snapshots Option\",\n+                                \"defaultValue\": \"no-schema\",\n+                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n+                                \"displayName\": \"Schema Write Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete-snapshots-option\",\n+                                \"name\": \"Schema Write Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"Time Format\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Deletes the specified blob from Azure Blob Storage. The processor uses Azure Blob Storage client library v12.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"compression-format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"bzip2\",\n+                                        \"value\": \"bzip2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"xz-lzma2\",\n+                                        \"value\": \"xz-lzma2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy framed\",\n+                                        \"value\": \"snappy framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"zstd\",\n+                                        \"value\": \"zstd\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"The compression format to use. Valid values are: GZIP, BZIP2, ZSTD, XZ-LZMA2, LZMA, Snappy, and Snappy Framed\",\n+                                \"displayName\": \"Compression Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"directory-name\": {\n-                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n-                                \"displayName\": \"Directory Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n+                                \"name\": \"compression-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n+                            \"compression-level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"0\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"3\",\n+                                        \"value\": \"3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"4\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"5\",\n+                                        \"value\": \"5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"6\",\n+                                        \"value\": \"6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"7\",\n+                                        \"value\": \"7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"8\",\n+                                        \"value\": \"8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"9\",\n+                                        \"value\": \"9\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"1\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"file\"\n+                                            \"gzip\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Filesystem Object Type\",\n-                                        \"propertyName\": \"filesystem-object-type\"\n+                                        \"propertyDisplayName\": \"Compression Format\",\n+                                        \"propertyName\": \"compression-format\"\n                                     }\n                                 ],\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\n+                                \"description\": \"The compression level to use; this is valid only when using GZIP compression. A lower value results in faster processing but less compression; a value of 0 indicates no compression but simply archiving\",\n+                                \"displayName\": \"Compression Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"compression-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"filesystem-name\": {\n-                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n-                                \"displayName\": \"Filesystem Name\",\n+                            \"output-grouping\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Output records as a JSON array\",\n+                                        \"displayName\": \"Array\",\n+                                        \"value\": \"output-array\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Output records with one JSON object per line, delimited by a newline character\",\n+                                        \"displayName\": \"One Line Per Object\",\n+                                        \"value\": \"output-oneline\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"output-array\",\n+                                \"description\": \"Specifies how the writer should output the JSON records (as an array or one object per line, e.g.) Note that if 'One Line Per Object' is selected, then Pretty Print JSON must be false.\",\n+                                \"displayName\": \"Output Grouping\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"output-grouping\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"filesystem-object-type\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The object to be deleted is a file.\",\n-                                        \"displayName\": \"File\",\n-                                        \"value\": \"file\"\n+                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n+                                        \"displayName\": \"Inherit Record Schema\",\n+                                        \"value\": \"inherit-record-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"The object to be deleted is a directory.\",\n-                                        \"displayName\": \"Directory\",\n-                                        \"value\": \"directory\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"file\",\n-                                \"description\": \"They type of the file system object to be deleted. It can be either folder or file.\",\n-                                \"displayName\": \"Filesystem Object Type\",\n+                                \"defaultValue\": \"inherit-record-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"filesystem-object-type\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-cache\": {\n+                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n+                                \"displayName\": \"Schema Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"schema-cache\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Deletes the provided file from Azure Data Lake Storage\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\"\n-                        ],\n-                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"blob\": {\n-                                \"defaultValue\": \"${azure.blobname}\",\n-                                \"description\": \"The filename of the blob\",\n-                                \"displayName\": \"Blob\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"blob\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             },\n-                            \"cse-key-id\": {\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SYMMETRIC\"\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"cse-key-type\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key ID\",\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"cse-key-id\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cse-key-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The blobs sent to Azure are not encrypted.\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n+                            \"schema-protocol-version\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"The blobs sent to Azure are encrypted using a symmetric algorithm.\",\n-                                        \"displayName\": \"SYMMETRIC\",\n-                                        \"value\": \"SYMMETRIC\"\n+                                        \"dependentValues\": [\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n+                                        \"propertyName\": \"Schema Write Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key Type\",\n+                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n+                                \"displayName\": \"Schema Protocol Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cse-key-type\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-protocol-version\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cse-symmetric-key-hex\": {\n+                            \"schema-registry\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SYMMETRIC\"\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"cse-key-type\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"When using symmetric client-side encryption, this is the raw key, encoded in hexadecimal\",\n-                                \"displayName\": \"Symmetric Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cse-symmetric-key-hex\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"range-length\": {\n-                                \"description\": \"The number of bytes to download from the blob, starting from the Range Start. An empty value or a value that extends beyond the end of the blob will read to the end of the blob.\",\n-                                \"displayName\": \"Range Length\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"range-length\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"range-start\": {\n-                                \"description\": \"The byte position at which to start reading from the blob. An empty value or a value of zero will start reading at the beginning of the blob.\",\n-                                \"displayName\": \"Range Start\",\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"range-start\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Storage Account Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"suppress-nulls\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will be written out as a null value\",\n+                                        \"displayName\": \"Never Suppress\",\n+                                        \"value\": \"never-suppress\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will not be written out\",\n+                                        \"displayName\": \"Always Suppress\",\n+                                        \"value\": \"always-suppress\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When a field has a value of null, it will be written out. However, if a field is defined in the schema and not present in the record, the field will not be written out.\",\n+                                        \"displayName\": \"Suppress Missing Values\",\n+                                        \"value\": \"suppress-missing\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"never-suppress\",\n+                                \"description\": \"Specifies how the writer should handle a null field\",\n+                                \"displayName\": \"Suppress Null Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"storage-endpoint-suffix\": {\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-endpoint-suffix\",\n-                                \"required\": false,\n+                                \"name\": \"suppress-nulls\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"json\",\n+                            \"record\",\n+                            \"recordset\",\n+                            \"resultset\",\n+                            \"row\",\n+                            \"serialize\",\n+                            \"writer\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n-                        \"typeDescription\": \"Retrieves contents of an Azure Storage Blob, writing the contents to the content of the FlowFile\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The length of the blob fetched\",\n-                                \"name\": \"azure.length\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.json.JsonRecordSetWriter\",\n+                        \"typeDescription\": \"Writes the results of a RecordSet as either a JSON Array or one JSON object per line. If using Array output, then even if the RecordSet consists of a single row, it will be written as an array with a single element. If using One Line Per Object output, the JSON objects cannot be pretty-printed.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Client-Side Encryption Key ID\": {\n-                                \"dependencies\": [\n+                            \"Allow Comments\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"LOCAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key ID\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to allow comments when parsing the JSON document\",\n+                                \"displayName\": \"Allow Comments\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Client-Side Encryption Key ID\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Allow Comments\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Key Type\": {\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Date Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n+                                \"displayName\": \"Max String Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max String Length\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Time Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Client-Side Encryption disabled\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n+                                        \"displayName\": \"Infer Schema\",\n+                                        \"value\": \"infer-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"Client-Side Encryption enabled using local key\",\n-                                        \"displayName\": \"LOCAL\",\n-                                        \"value\": \"LOCAL\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key Type\",\n+                                \"defaultValue\": \"infer-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client-Side Encryption Key Type\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Local Key\": {\n+                            \"schema-application-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Applies the schema for the whole JSON.\",\n+                                        \"displayName\": \"Whole JSON\",\n+                                        \"value\": \"WHOLE_JSON\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Applies the schema for the selected part starting from the \\\"Starting Field Name\\\".\",\n+                                        \"displayName\": \"Selected Part\",\n+                                        \"value\": \"SELECTED_PART\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SELECTED_PART\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"LOCAL\"\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"schema-text-property\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"NESTED_FIELD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Starting Field Strategy\",\n+                                        \"propertyName\": \"starting-field-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"When using local client-side encryption, this is the raw key, encoded in hexadecimal\",\n-                                \"displayName\": \"Client-Side Encryption Local Key\",\n+                                \"description\": \"Specifies whether the schema is defined for the whole JSON or for the selected part starting from \\\"Starting Field Name\\\".\",\n+                                \"displayName\": \"Schema Application Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client-Side Encryption Local Key\",\n+                                \"name\": \"schema-application-strategy\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"blob-name\": {\n-                                \"defaultValue\": \"${azure.blobname}\",\n-                                \"description\": \"The full name of the blob\",\n-                                \"displayName\": \"Blob Name\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n-                                \"required\": true,\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"defaultValue\": \"${azure.container}\",\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n+                            \"schema-inference-cache\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"infer-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies a Schema Cache to use when inferring the schema. If not populated, the schema will be inferred each time. However, if a cache is specified, the cache will first be consulted and if the applicable schema can be found, it will be used instead of inferring the schema.\",\n+                                \"displayName\": \"Schema Inference Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-inference-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n-                                \"required\": true,\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"range-length\": {\n-                                \"description\": \"The number of bytes to download from the blob, starting from the Range Start. An empty value or a value that extends beyond the end of the blob will read to the end of the blob.\",\n-                                \"displayName\": \"Range Length\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"range-length\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"range-start\": {\n-                                \"description\": \"The byte position at which to start reading from the blob. An empty value or a value of zero will start reading at the beginning of the blob.\",\n-                                \"displayName\": \"Range Start\",\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"range-start\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"starting-field-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"NESTED_FIELD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Starting Field Strategy\",\n+                                        \"propertyName\": \"starting-field-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Skips forward to the given nested JSON field (array or object) to begin processing.\",\n+                                \"displayName\": \"Starting Field Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"starting-field-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"starting-field-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Begins processing from the root node.\",\n+                                        \"displayName\": \"Root Node\",\n+                                        \"value\": \"ROOT_NODE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Skips forward to the given nested JSON field (array or object) to begin processing.\",\n+                                        \"displayName\": \"Nested Field\",\n+                                        \"value\": \"NESTED_FIELD\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ROOT_NODE\",\n+                                \"description\": \"Start processing from the root node or from a specified nested node.\",\n+                                \"displayName\": \"Starting Field Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"starting-field-strategy\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.json.JsonPathReader\"\n                         ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"json\",\n+                            \"parser\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"tree\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Retrieves the specified blob from Azure Blob Storage and writes its content to the content of the FlowFile. The processor uses Azure Blob Storage client library v12.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the Azure Blob Storage container\",\n-                                \"name\": \"azure.container\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the blob on Azure Blob Storage\",\n-                                \"name\": \"azure.blobname\"\n-                            },\n-                            {\n-                                \"description\": \"Primary location of the blob\",\n-                                \"name\": \"azure.primaryUri\"\n-                            },\n-                            {\n-                                \"description\": \"ETag of the blob\",\n-                                \"name\": \"azure.etag\"\n-                            },\n-                            {\n-                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n-                                \"name\": \"azure.blobtype\"\n-                            },\n+                        \"type\": \"org.apache.nifi.json.JsonTreeReader\",\n+                        \"typeDescription\": \"Parses JSON into individual Record objects. While the reader expects each record to be well-formed JSON, the content of a FlowFile may consist of many records, each as a well-formed JSON array or JSON object with optional whitespace between them, such as the common 'JSON-per-line' format. If an array is encountered, each element in that array will be treated as a separate record. If the schema that is configured contains a field that is not present in the JSON, a null value will be used. If the JSON contains a field that is not present in the schema, that field will be skipped. See the Usage of the Controller Service for more information and examples.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"dynamicProperties\": [\n                             {\n-                                \"description\": \"MIME Type of the content\",\n-                                \"name\": \"mime.type\"\n-                            },\n+                                \"description\": \"\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Name of the RecordReader\",\n+                                \"value\": \"A RecordReaderFactory controller service\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Service to Use\": {\n+                                \"defaultValue\": \"${recordreader.name}\",\n+                                \"description\": \"Specifies the name of the user-defined property whose associated Controller Service should be used.\",\n+                                \"displayName\": \"Service to Use\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Service to Use\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Language code for the content\",\n-                                \"name\": \"lang\"\n-                            },\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.lookup.RecordSetWriterLookup\"\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"lookup\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"row\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.ReaderLookup\",\n+                        \"typeDescription\": \"Provides a RecordReaderFactory that can be used to dynamically select another RecordReaderFactory. This will allow multiple RecordReaderFactories to be defined and registered, and then selected dynamically at runtime by referencing a FlowFile attribute in the Service to Use property.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Timestamp of the blob\",\n-                                \"name\": \"azure.timestamp\"\n-                            },\n+                                \"description\": \"\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Name of the RecordSetWriter\",\n+                                \"value\": \"A RecordSetWriterFactory controller service\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Service to Use\": {\n+                                \"defaultValue\": \"${recordsetwriter.name}\",\n+                                \"description\": \"Specifies the name of the user-defined property whose associated Controller Service should be used.\",\n+                                \"displayName\": \"Service to Use\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Service to Use\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"1.27.0\"\n                             }\n-                        ]\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.lookup.ReaderLookup\"\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"lookup\",\n+                            \"record\",\n+                            \"recordset\",\n+                            \"result\",\n+                            \"row\",\n+                            \"serializer\",\n+                            \"set\",\n+                            \"writer\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.RecordSetWriterLookup\",\n+                        \"typeDescription\": \"Provides a RecordSetWriterFactory that can be used to dynamically select another RecordSetWriterFactory. This will allow multiple RecordSetWriterFactory's to be defined and registered, and then selected dynamically at runtime by tagging FlowFiles with the attributes and referencing those attributes in the Service to Use property.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"max-cache-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of Schemas to cache.\",\n+                                \"displayName\": \"Maximum Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max-cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n                         },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"record\",\n+                            \"schema\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.schema.inference.VolatileSchemaCache\",\n+                        \"typeDescription\": \"Provides a Schema Cache that evicts elements based on a Least-Recently-Used algorithm. This cache is not persisted, so any restart of NiFi will result in the cache being cleared. Additionally, the cache will be cleared any time that the Controller Service is stopped and restarted.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies which character set of the Syslog messages\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"directory-name\": {\n-                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n-                                \"displayName\": \"Directory Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\n+                            \"syslog-5424-reader-raw-message\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the record will have a _raw field containing the raw message\",\n+                                \"displayName\": \"Raw message\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"syslog-5424-reader-raw-message\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"filesystem-name\": {\n-                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n-                                \"displayName\": \"Filesystem Name\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"logfiles\",\n+                            \"logs\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"syslog\",\n+                            \"syslog 5424\",\n+                            \"text\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.syslog.Syslog5424Reader\",\n+                        \"typeDescription\": \"Provides a mechanism for reading RFC 5424 compliant Syslog data, such as log files, and structuring the data so that it can be processed.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies which character set of the Syslog messages\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"number-of-retries\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of automatic retries to perform if the download fails.\",\n-                                \"displayName\": \"Number of Retries\",\n+                            \"syslog-5424-reader-raw-message\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the record will have a _raw field containing the raw message\",\n+                                \"displayName\": \"Raw message\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"number-of-retries\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"syslog-5424-reader-raw-message\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"logfiles\",\n+                            \"logs\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"syslog\",\n+                            \"text\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.syslog.SyslogReader\",\n+                        \"typeDescription\": \"Attempts to parses the contents of a Syslog message in accordance to RFC5424 and RFC3164. In the case of RFC5424 formatted messages, structured data is not supported, and will be returned as part of the message.Note: Be mindfull that RFC3164 is informational and a wide range of different implementations are present in the wild.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character set to use when writing the data to the FlowFile\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"range-length\": {\n-                                \"description\": \"The number of bytes to download from the object, starting from the Range Start. An empty value or a value that extends beyond the end of the object will read to the end of the object.\",\n-                                \"displayName\": \"Range Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"range-length\",\n-                                \"required\": false,\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"range-start\": {\n-                                \"description\": \"The byte position at which to start reading from the object. An empty value or a value of zero will start reading at the beginning of the object.\",\n-                                \"displayName\": \"Range Start\",\n+                            \"Text\": {\n+                                \"description\": \"The text to use when writing the results. This property will evaluate the Expression Language using any of the fields available in a Record.\",\n+                                \"displayName\": \"Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"range-start\",\n-                                \"required\": false,\n+                                \"name\": \"Text\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"el\",\n+                            \"expression\",\n+                            \"freeform\",\n+                            \"language\",\n+                            \"record\",\n+                            \"recordset\",\n+                            \"resultset\",\n+                            \"serialize\",\n+                            \"text\",\n+                            \"writer\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Fetch the provided file from Azure Data Lake Storage\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n-                                \"name\": \"azure.datalake.storage.statusCode\"\n-                            },\n-                            {\n-                                \"description\": \"The Azure Data Lake Storage moniker of the failed operation\",\n-                                \"name\": \"azure.datalake.storage.errorCode\"\n-                            },\n+                        \"type\": \"org.apache.nifi.text.FreeFormTextRecordSetWriter\",\n+                        \"typeDescription\": \"Writes the contents of a RecordSet as free-form text. The configured text is able to make use of the Expression Language to reference each of the fields that are available in a Record, as well as the attributes in the FlowFile and variables. If there is a name collision, the field name/value is used before attributes or variables. Each record in the RecordSet will be separated by a single newline character.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The Azure Data Lake Storage error message from the failed operation\",\n-                                \"name\": \"azure.datalake.storage.errorMessage\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.27.0\"\n                             }\n-                        ]\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"event\",\n+                            \"log\",\n+                            \"parser\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"windows\",\n+                            \"xml\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.windowsevent.WindowsEventLogReader\",\n+                        \"typeDescription\": \"Reads Windows Event Log data as XML content having been generated by ConsumeWindowsEventLog, ParseEvtx, etc. (see Additional Details) and creates Record object(s). If the root tag of the input XML is 'Events', the child content is expected to be a series of 'Event' tags, each of which will constitute a single record. If the root tag is 'Event', the content is expected to be a single 'Event' and thus a single record. No other root tags are valid. Only events of type 'System' are currently supported.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\"\n-                        ],\n-                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n+                                \"name\": \"Date Format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n+                                \"name\": \"Time Format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n-                                \"required\": true,\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"attribute_prefix\": {\n+                                \"description\": \"If this property is set, the name of attributes will be prepended with a prefix when they are added to a record.\",\n+                                \"displayName\": \"Attribute Prefix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"attribute_prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n+                            \"content_field_name\": {\n+                                \"description\": \"If tags with content (e. g. <field>content</field>) are defined as nested records in the schema, the name of the tag will be used as name for the record and the value of this property will be used as name for the field. If tags with content shall be parsed together with attributes (e. g. <field attribute=\\\"123\\\">content</field>), they have to be defined as records. In such a case, the name of the tag will be used as the name for the record and  the value of this property will be used as the name for the field holding the original content. The name of the attribute will be used to create a new record field, the content of which will be the value of the attribute. For more information, see the 'Additional Details...' section of the XMLReader controller service's documentation.\",\n+                                \"displayName\": \"Field Name for Content\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n-                                \"required\": true,\n+                                \"name\": \"content_field_name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"parse_xml_attributes\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"infer-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"When 'Schema Access Strategy' is 'Infer Schema' and this property is 'true' then XML attributes are parsed and added to the record as new fields. When the schema is inferred but this property is 'false', XML attributes and their values are ignored.\",\n+                                \"displayName\": \"Parse XML Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n+                                \"name\": \"parse_xml_attributes\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"record_format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Each FlowFile will consist of a single record without any sort of \\\"wrapper\\\".\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Each FlowFile will consist of zero or more records. The outer-most XML element is expected to be a \\\"wrapper\\\" and will be ignored.\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Whether to treat a FlowFile as a single Record or an array of multiple Records is determined by the value of the 'xml.stream.is.array' attribute. If the value of the attribute is 'true' (case-insensitive), then the XML Reader will treat the FlowFile as a series of Records with the outer element being ignored. If the value of the attribute is 'false' (case-insensitive), then the FlowFile is treated as a single Record and no wrapper element is assumed. If the attribute is missing or its value is anything other than 'true' or 'false', then an Exception will be thrown and no records will be parsed.\",\n+                                        \"displayName\": \"Use attribute 'xml.stream.is.array'\",\n+                                        \"value\": \"${xml.stream.is.array}\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"This property defines whether the reader expects a FlowFile to consist of a single Record or a series of Records with a \\\"wrapper element\\\". Because XML does not provide for a way to read a series of XML documents from a stream directly, it is common to combine many XML documents by concatenating them and then wrapping the entire XML blob  with a \\\"wrapper element\\\". This property dictates whether the reader expects a FlowFile to consist of a single Record or a series of Records with a \\\"wrapper element\\\" that will be ignored.\",\n+                                \"displayName\": \"Expect Records as Array\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"record_format\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n+                                        \"displayName\": \"Infer Schema\",\n+                                        \"value\": \"infer-schema\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"infer-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prefix\": {\n-                                \"description\": \"Search prefix for listing\",\n-                                \"displayName\": \"Prefix\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"prefix\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"schema-inference-cache\": {\n+                                \"description\": \"Specifies a Schema Cache to use when inferring the schema. If not populated, the schema will be inferred each time. However, if a cache is specified, the cache will first be consulted and if the applicable schema can be found, it will be used instead of inferring the schema.\",\n+                                \"displayName\": \"Schema Inference Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"schema-inference-cache\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Storage Account Name\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of blobs, the timestamp of the newest blob is stored. This allows the Processor to list only blobs that have been added or modified after this date the next time that the Processor is run.  State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"parser\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"xml\"\n                         ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\",\n-                        \"typeDescription\": \"Lists blobs in an Azure Storage container. Listing details are attached to an empty FlowFile for use with FetchAzureBlobStorage.  This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the Azure container\",\n-                                \"name\": \"azure.container\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure blob\",\n-                                \"name\": \"azure.blobname\"\n-                            },\n-                            {\n-                                \"description\": \"Primary location for blob content\",\n-                                \"name\": \"azure.primaryUri\"\n-                            },\n-                            {\n-                                \"description\": \"Secondary location for blob content\",\n-                                \"name\": \"azure.secondaryUri\"\n-                            },\n-                            {\n-                                \"description\": \"Etag for the Azure blob\",\n-                                \"name\": \"azure.etag\"\n-                            },\n-                            {\n-                                \"description\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp in Azure for the blob\",\n-                                \"name\": \"azure.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"MimeType of the content\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Language code for the content\",\n-                                \"name\": \"lang\"\n-                            },\n-                            {\n-                                \"description\": \"This is the type of blob and can be either page or block type\",\n-                                \"name\": \"azure.blobtype\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.xml.XMLReader\",\n+                        \"typeDescription\": \"Reads XML content and creates Record objects. Records are expected in the second level of XML data, embedded in an enclosing root tag.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character set to use when writing the data to the FlowFile\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n-                                \"required\": false,\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n+                                \"name\": \"Date Format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"Schema Write Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n+                                        \"displayName\": \"Do Not Write Schema\",\n+                                        \"value\": \"no-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n+                                        \"displayName\": \"Set 'schema.name' Attribute\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n+                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n+                                        \"value\": \"full-schema-attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Schema Registry Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"no-schema\",\n+                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n+                                \"displayName\": \"Schema Write Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n+                                \"name\": \"Schema Write Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n-                                \"required\": true,\n+                                \"name\": \"Time Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"blob-name-prefix\": {\n-                                \"description\": \"Search prefix for listing\",\n-                                \"displayName\": \"Blob Name Prefix\",\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"blob-name-prefix\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timestamp Format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n+                            \"array_tag_name\": {\n+                                \"description\": \"Name of the tag used by property \\\"Wrap Elements of Arrays\\\" to write arrays\",\n+                                \"displayName\": \"Array Tag Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"container-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"array_tag_name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"array_wrapping\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"The value of the property \\\"Array Tag Name\\\" will be used as the tag name to wrap elements of an array. The field name of the array field will be used for the tag name of the elements.\",\n+                                        \"displayName\": \"Use Property as Wrapper\",\n+                                        \"value\": \"use-property-as-wrapper\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n+                                        \"description\": \"The value of the property \\\"Array Tag Name\\\" will be used for the tag name of the elements of an array. The field name of the array field will be used as the tag name to wrap elements.\",\n+                                        \"displayName\": \"Use Property for Elements\",\n+                                        \"value\": \"use-property-for-elements\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"description\": \"The elements of an array will not be wrapped\",\n+                                        \"displayName\": \"No Wrapping\",\n+                                        \"value\": \"no-wrapping\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"defaultValue\": \"no-wrapping\",\n+                                \"description\": \"Specifies how the writer wraps elements of fields of type array\",\n+                                \"displayName\": \"Wrap Elements of Arrays\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"array_wrapping\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"dependencies\": [\n+                            \"omit_xml_declaration\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not to include XML declaration\",\n+                                \"displayName\": \"Omit XML Declaration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"omit_xml_declaration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"dependencies\": [\n+                            \"pretty_print_xml\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the XML should be pretty printed\",\n+                                \"displayName\": \"Pretty Print XML\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"pretty_print_xml\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record_tag_name\": {\n+                                \"description\": \"Specifies the name of the XML record tag wrapping the record fields. If this is not set, the writer will use the record name in the schema.\",\n+                                \"displayName\": \"Name of Record Tag\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record_tag_name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"root_tag_name\": {\n+                                \"description\": \"Specifies the name of the XML root tag wrapping the record set. This property has to be defined if the writer is supposed to write multiple records in a single FlowFile.\",\n+                                \"displayName\": \"Name of Root Tag\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"root_tag_name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n+                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n+                                        \"displayName\": \"Inherit Record Schema\",\n+                                        \"value\": \"inherit-record-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"inherit-record-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-cache\": {\n+                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n+                                \"displayName\": \"Schema Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"schema-cache\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-protocol-version\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n+                                        \"propertyName\": \"Schema Write Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n+                                \"displayName\": \"Schema Protocol Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-protocol-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"suppress_nulls\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will be written out as a null value\",\n+                                        \"displayName\": \"Never Suppress\",\n+                                        \"value\": \"never-suppress\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will not be written out\",\n+                                        \"displayName\": \"Always Suppress\",\n+                                        \"value\": \"always-suppress\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When a field has a value of null, it will be written out. However, if a field is defined in the schema and not present in the record, the field will not be written out.\",\n+                                        \"displayName\": \"Suppress Missing Values\",\n+                                        \"value\": \"suppress-missing\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"never-suppress\",\n+                                \"description\": \"Specifies how the writer should handle a null field\",\n+                                \"displayName\": \"Suppress Null Values\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"suppress_nulls\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of blobs, the timestamp of the newest blob is stored if 'Tracking Timestamps' Listing Strategy is in use (by default). This allows the Processor to list only blobs that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"record\",\n+                            \"recordset\",\n+                            \"resultset\",\n+                            \"row\",\n+                            \"serialize\",\n+                            \"writer\",\n+                            \"xml\"\n                         ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Lists blobs in an Azure Blob Storage container. Listing details are attached to an empty FlowFile for use with FetchAzureBlobStorage. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. The processor uses Azure Blob Storage client library v12.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the Azure Blob Storage container\",\n-                                \"name\": \"azure.container\"\n+                        \"type\": \"org.apache.nifi.xml.XMLRecordSetWriter\",\n+                        \"typeDescription\": \"Writes a RecordSet to XML. The records are wrapped by a root tag.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Date Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The name of the blob on Azure Blob Storage\",\n-                                \"name\": \"azure.blobname\"\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Time Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Primary location of the blob\",\n-                                \"name\": \"azure.primaryUri\"\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"ETag of the blob\",\n-                                \"name\": \"azure.etag\"\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n+                                        \"displayName\": \"Infer Schema\",\n+                                        \"value\": \"infer-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"infer-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-access-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n-                                \"name\": \"azure.blobtype\"\n+                            \"schema-application-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Applies the schema for the whole JSON.\",\n+                                        \"displayName\": \"Whole JSON\",\n+                                        \"value\": \"WHOLE_JSON\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Applies the schema for the selected part starting from the \\\"Starting Field Name\\\".\",\n+                                        \"displayName\": \"Selected Part\",\n+                                        \"value\": \"SELECTED_PART\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SELECTED_PART\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"schema-text-property\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"NESTED_FIELD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Starting Field Strategy\",\n+                                        \"propertyName\": \"starting-field-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether the schema is defined for the whole JSON or for the selected part starting from \\\"Starting Field Name\\\".\",\n+                                \"displayName\": \"Schema Application Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-application-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"MIME Type of the content\",\n-                                \"name\": \"mime.type\"\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Language code for the content\",\n-                                \"name\": \"lang\"\n+                            \"schema-inference-cache\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"infer-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies a Schema Cache to use when inferring the schema. If not populated, the schema will be inferred each time. However, if a cache is specified, the cache will first be consulted and if the applicable schema can be found, it will be used instead of inferring the schema.\",\n+                                \"displayName\": \"Schema Inference Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-inference-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"Timestamp of the blob\",\n-                                \"name\": \"azure.timestamp\"\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"starting-field-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"NESTED_FIELD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Starting Field Strategy\",\n+                                        \"propertyName\": \"starting-field-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Skips forward to the given nested JSON field (array or object) to begin processing.\",\n+                                \"displayName\": \"Starting Field Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"starting-field-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n+                            \"starting-field-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Begins processing from the root node.\",\n+                                        \"displayName\": \"Root Node\",\n+                                        \"value\": \"ROOT_NODE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Skips forward to the given nested JSON field (array or object) to begin processing.\",\n+                                        \"displayName\": \"Nested Field\",\n+                                        \"value\": \"NESTED_FIELD\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ROOT_NODE\",\n+                                \"description\": \"Start processing from the root node or from a specified nested node.\",\n+                                \"displayName\": \"Starting Field Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"starting-field-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.27.0\"\n                             }\n-                        ]\n-                    },\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.json.JsonPathReader\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"parser\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"tree\",\n+                            \"yaml\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.yaml.YamlTreeReader\",\n+                        \"typeDescription\": \"Parses YAML into individual Record objects. While the reader expects each record to be well-formed YAML, the content of a FlowFile may consist of many records, each as a well-formed YAML array or YAML object. If an array is encountered, each element in that array will be treated as a separate record. If the schema that is configured contains a field that is not present in the YAML, a null value will be used. If the YAML contains a field that is not present in the schema, that field will be skipped. Please note this controller service does not support resolving the use of YAML aliases. Any alias present will be treated as a string. See the Usage of the Controller Service for more information and examples.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-cassandra-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-shopify-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-shopify-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -15621,550 +15382,808 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"CUSTOMERS\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The Customer resource stores information about a shop's customers, such as their contact details, their order history, and whether they've agreed to receive email marketing.\",\n+                                        \"displayName\": \"Customers\",\n+                                        \"value\": \"customers\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CUSTOMERS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Customer resource to query\",\n+                                \"displayName\": \"Customer Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n-                                \"required\": false,\n+                                \"name\": \"CUSTOMERS\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"DISCOUNTS\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The PriceRule resource can be used to get discounts using conditions\",\n+                                        \"displayName\": \"Price Rules\",\n+                                        \"value\": \"price_rules\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"DISCOUNTS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Discount resource to query\",\n+                                \"displayName\": \"Discount Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n-                                \"required\": false,\n+                                \"name\": \"DISCOUNTS\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"INVENTORY\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"A location represents a geographical location where your stores, pop-up stores, headquarters and warehouses exist.\",\n+                                        \"displayName\": \"Locations\",\n+                                        \"value\": \"locations\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"INVENTORY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Inventory resource to query\",\n+                                \"displayName\": \"Inventory Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n+                                \"name\": \"INVENTORY\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"ONLINE_STORE\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Shopify shops come with a built-in blogging engine, allowing a shop to have one or more blogs.\",\n+                                        \"displayName\": \"Blogs\",\n+                                        \"value\": \"blogs\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A comment is a reader's response to an article in a blog.\",\n+                                        \"displayName\": \"Comments\",\n+                                        \"value\": \"comments\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Shopify stores come with a tool for creating basic HTML web pages.\",\n+                                        \"displayName\": \"Pages\",\n+                                        \"value\": \"pages\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A redirect causes a visitor on a specific path on the shop's site to be automatically sent to a different location.\",\n+                                        \"displayName\": \"Redirects\",\n+                                        \"value\": \"redirects\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The ScriptTag resource represents remote JavaScript code that is loaded into the pages of a shop's storefront or the order status page of checkout.\",\n+                                        \"displayName\": \"Script Tags\",\n+                                        \"value\": \"script_tags\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A theme controls the look and feel of a Shopify online store.\",\n+                                        \"displayName\": \"Themes\",\n+                                        \"value\": \"themes\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"ONLINE_STORE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Online Store resource to query\",\n+                                \"displayName\": \"Online Store Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n+                                \"name\": \"ONLINE_STORE\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"ORDERS\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"A checkout is considered abandoned after the customer has added contact information, but before the customer has completed their purchase.\",\n+                                        \"displayName\": \"Abandoned Checkouts\",\n+                                        \"value\": \"checkouts\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Merchants can use draft orders to create orders on behalf of their customers.\",\n+                                        \"displayName\": \"Draft Orders\",\n+                                        \"value\": \"draft_orders\"\n+                                    },\n+                                    {\n+                                        \"description\": \"An order is a customer's request to purchase one or more products from a shop.\",\n+                                        \"displayName\": \"Orders\",\n+                                        \"value\": \"orders\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"ORDERS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Order resource to query\",\n+                                \"displayName\": \"Order Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n+                                \"name\": \"ORDERS\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"directory-name\": {\n-                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n-                                \"displayName\": \"Directory Name\",\n+                            \"PRODUCT\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Collects are meant for managing the relationship between products and custom collections.\",\n+                                        \"displayName\": \"Collects\",\n+                                        \"value\": \"collects\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A custom collection is a grouping of products that a merchant can create to make their store easier to browse. \",\n+                                        \"displayName\": \"Custom Collections\",\n+                                        \"value\": \"custom_collections\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get products in a merchant's store \",\n+                                        \"displayName\": \"Products\",\n+                                        \"value\": \"products\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A smart collection is a grouping of products defined by rules that are set by the merchant.\",\n+                                        \"displayName\": \"Smart Collections\",\n+                                        \"value\": \"smart_collections\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PRODUCT\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Product resource to query\",\n+                                \"displayName\": \"Product Category\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"PRODUCT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"SALES_CHANNELS\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"A CollectionListing resource represents a product collection that a merchant has made available to your sales channel.\",\n+                                        \"displayName\": \"Collection Listings\",\n+                                        \"value\": \"collection_listings\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"A ProductListing resource represents a Product which is available to your sales channel.\",\n+                                        \"displayName\": \"Product Listings\",\n+                                        \"value\": \"product_listings\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SALES_CHANNELS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Sales Channel resource to query\",\n+                                \"displayName\": \"Sales Channel Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"SALES_CHANNELS\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"STORE_PROPERTIES\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The Country resource represents the tax rates applied to orders from the different countries where a shop sells its products.\",\n+                                        \"displayName\": \"Countries\",\n+                                        \"value\": \"countries\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Merchants who use Shopify Payments can allow customers to pay in their local currency on the online store.\",\n+                                        \"displayName\": \"Currencies\",\n+                                        \"value\": \"currencies\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Policy resource can be used to access the policies that a merchant has configured for their shop, such as their refund and privacy policies.\",\n+                                        \"displayName\": \"Policies\",\n+                                        \"value\": \"policies\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ShippingZone resource can be used to view shipping zones and their countries, provinces, and shipping rates.\",\n+                                        \"displayName\": \"Shipping Zones\",\n+                                        \"value\": \"shipping_zones\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"STORE_PROPERTIES\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Store Property resource to query\",\n+                                \"displayName\": \"Store Property Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"STORE_PROPERTIES\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"access-token\": {\n+                                \"description\": \"Access Token to authenticate requests\",\n+                                \"displayName\": \"Access Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n-                                \"required\": false,\n+                                \"name\": \"access-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"api-version\": {\n+                                \"defaultValue\": \"2022-10\",\n+                                \"description\": \"The Shopify REST API version\",\n+                                \"displayName\": \"API Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"api-version\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-filter\": {\n-                                \"description\": \"Only files whose names match the given regular expression will be listed\",\n-                                \"displayName\": \"File Filter\",\n+                            \"incremental-delay\": {\n+                                \"defaultValue\": \"3 sec\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Incremental Loading\",\n+                                        \"propertyName\": \"is-incremental\"\n+                                    }\n+                                ],\n+                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35. Set this property to avoid missing objects when the clock of your local machines and Shopify servers' clock are not in sync.\",\n+                                \"displayName\": \"Incremental Delay\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"file-filter\",\n+                                \"name\": \"incremental-delay\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"filesystem-name\": {\n-                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n-                                \"displayName\": \"Filesystem Name\",\n+                            \"incremental-initial-start-time\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Incremental Loading\",\n+                                        \"propertyName\": \"is-incremental\"\n+                                    }\n+                                ],\n+                                \"description\": \"This property specifies the start time when running the first request. Represents an ISO 8601-encoded date and time string. For example, 3:50 pm on September 7, 2019 in the time zone of UTC (Coordinated Universal Time) is represented as \\\"2019-09-07T15:50:00Z\\\".\",\n+                                \"displayName\": \"Incremental Initial Start Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"incremental-initial-start-time\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"include-temporary-files\": {\n+                            \"is-incremental\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to include temporary files when listing the contents of configured directory paths.\",\n-                                \"displayName\": \"Include Temporary Files\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"The processor can incrementally load the queried objects so that each object is queried exactly once. For each query, the processor queries objects which were created or modified after the previous run time but before the current time.\",\n+                                \"displayName\": \"Incremental Loading\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-temporary-files\",\n+                                \"name\": \"is-incremental\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"object-category\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n+                                        \"description\": \"Query a Customer resource\",\n+                                        \"displayName\": \"Customers\",\n+                                        \"value\": \"CUSTOMERS\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"description\": \"Query a Discount resource\",\n+                                        \"displayName\": \"Discounts\",\n+                                        \"value\": \"DISCOUNTS\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"Query an Inventory resource\",\n+                                        \"displayName\": \"Inventory\",\n+                                        \"value\": \"INVENTORY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query an Online Store resource\",\n+                                        \"displayName\": \"Online Store\",\n+                                        \"value\": \"ONLINE_STORE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query an Order resource\",\n+                                        \"displayName\": \"Orders\",\n+                                        \"value\": \"ORDERS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query a Product resource\",\n+                                        \"displayName\": \"Products\",\n+                                        \"value\": \"PRODUCT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query a Sales Channel resource\",\n+                                        \"displayName\": \"Sales Channels\",\n+                                        \"value\": \"SALES_CHANNELS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query a Store Property resource\",\n+                                        \"displayName\": \"Store Properties\",\n+                                        \"value\": \"STORE_PROPERTIES\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"description\": \"Shopify object category\",\n+                                \"displayName\": \"Object Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"object-category\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"path-filter\": {\n-                                \"description\": \"When 'Recurse Subdirectories' is true, then only subdirectories whose paths match the given regular expression will be scanned\",\n-                                \"displayName\": \"Path Filter\",\n+                            \"result-limit\": {\n+                                \"description\": \"The maximum number of results to request for each invocation of the Processor\",\n+                                \"displayName\": \"Result Limit\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"path-filter\",\n+                                \"name\": \"result-limit\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"store-domain\": {\n+                                \"description\": \"The domain of the Shopify store, e.g. nifistore.myshopify.com\",\n+                                \"displayName\": \"Store Domain\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"store-domain\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n+                                \"name\": \"web-client-service-provider\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"recurse-subdirectories\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subdirectories of the directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recurse-subdirectories\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"description\": \"For a few resources the processor supports incremental loading. The list of the resources with the supported parameters can be found in the additional details.\",\n                             \"scopes\": [\n                                 \"CLUSTER\"\n                             ]\n                         },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"shopify\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Lists directory in an Azure Data Lake Storage Gen 2 filesystem\",\n+                        \"type\": \"org.apache.nifi.processors.shopify.GetShopify\",\n+                        \"typeDescription\": \"Retrieves objects from a custom Shopify store. The processor yield time must be set to the account's rate limit accordingly.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the Azure File System\",\n-                                \"name\": \"azure.filesystem\"\n-                            },\n-                            {\n-                                \"description\": \"The full path of the Azure File\",\n-                                \"name\": \"azure.filePath\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure Directory\",\n-                                \"name\": \"azure.directory\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure File\",\n-                                \"name\": \"azure.filename\"\n-                            },\n-                            {\n-                                \"description\": \"The length of the Azure File\",\n-                                \"name\": \"azure.length\"\n-                            },\n-                            {\n-                                \"description\": \"The last modification time of the Azure File\",\n-                                \"name\": \"azure.lastModified\"\n-                            },\n-                            {\n-                                \"description\": \"The ETag of the Azure File\",\n-                                \"name\": \"azure.etag\"\n+                                \"description\": \"Sets the MIME type to application/json\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kafka-2-0-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-kafka-2-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n+                                \"name\": \"ack.wait.time\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"acks\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted successfully' after successfully writing the content to a Kafka node, without waiting for a response. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted successfully' if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes.\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted unsuccessfully' unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration.\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"acks\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"directory-name\": {\n-                                \"description\": \"Name of the Azure Storage Directory where the files will be moved. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. Non-existing directories will be created. If the original directory structure should be kept, the full directory path needs to be provided after the destination directory. e.g.: destdir/${azure.directory}\",\n-                                \"displayName\": \"Destination Directory\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max.block.ms\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"filesystem-name\": {\n-                                \"description\": \"Name of the Azure Storage File System where the files will be moved.\",\n-                                \"displayName\": \"Destination Filesystem\",\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.request.size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"message-header-encoding\",\n                                 \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-sink-record-writer\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"source-directory-name\": {\n-                                \"defaultValue\": \"${azure.directory}\",\n-                                \"description\": \"Name of the Azure Storage Directory from where the move should happen. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value.\",\n-                                \"displayName\": \"Source Directory\",\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"source-directory-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"source-filesystem-name\": {\n-                                \"defaultValue\": \"${azure.filesystem}\",\n-                                \"description\": \"Name of the Azure Storage File System from where the move should happen.\",\n-                                \"displayName\": \"Source Filesystem\",\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"source-filesystem-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"topic\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"kafka\",\n+                            \"record\",\n+                            \"sink\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.MoveAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Moves content within an Azure Data Lake Storage Gen 2. After the move, files will be no longer available on source location.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the source Azure File System\",\n-                                \"name\": \"azure.source.filesystem\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the source Azure Directory\",\n-                                \"name\": \"azure.source.directory\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure File System\",\n-                                \"name\": \"azure.filesystem\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure Directory\",\n-                                \"name\": \"azure.directory\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure File\",\n-                                \"name\": \"azure.filename\"\n-                            },\n-                            {\n-                                \"description\": \"Primary location for file content\",\n-                                \"name\": \"azure.primaryUri\"\n-                            },\n-                            {\n-                                \"description\": \"The length of the Azure File\",\n-                                \"name\": \"azure.length\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_0\",\n+                        \"typeDescription\": \"Provides a service to write records to a Kafka 2.x topic.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-2-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -16174,586 +16193,571 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"deprecated\": true,\n                         \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n                         ],\n-                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"azure-create-container\": {\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"auto.offset.reset\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to check if the container exists and to automatically create it if it does not. Permission to list containers is required. If false, this check is not made, but the Put operation will fail if the container does not exist.\",\n-                                \"displayName\": \"Create Container\",\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n+                                \"displayName\": \"Offset Reset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-create-container\",\n+                                \"name\": \"auto.offset.reset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"blob\": {\n-                                \"description\": \"The filename of the blob\",\n-                                \"displayName\": \"Blob\",\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"blob\",\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n+                            \"group.id\": {\n+                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n+                                \"displayName\": \"Group ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"group.id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cse-key-id\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SYMMETRIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"cse-key-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key ID\",\n+                            \"header-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n+                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"cse-key-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"header-name-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cse-key-type\": {\n+                            \"honor-transactions\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The blobs sent to Azure are not encrypted.\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"The blobs sent to Azure are encrypted using a symmetric algorithm.\",\n-                                        \"displayName\": \"SYMMETRIC\",\n-                                        \"value\": \"SYMMETRIC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n+                                \"displayName\": \"Honor Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cse-key-type\",\n+                                \"name\": \"honor-transactions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cse-symmetric-key-hex\": {\n-                                \"dependencies\": [\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"key-attribute-encoding\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SYMMETRIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"cse-key-type\"\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n                                     }\n                                 ],\n-                                \"description\": \"When using symmetric client-side encryption, this is the raw key, encoded in hexadecimal\",\n-                                \"displayName\": \"Symmetric Key\",\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"If the <Separate By Key> property is set to true, FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cse-symmetric-key-hex\",\n+                                \"name\": \"key-attribute-encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n+                                \"displayName\": \"Max Uncommitted Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-uncommit-offset-wait\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"max.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n+                                \"displayName\": \"Max Poll Records\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"max.poll.records\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n                                 \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Storage Account Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n-                                \"required\": false,\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\",\n-                        \"typeDescription\": \"Puts content into an Azure Storage Blob\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the Azure container\",\n-                                \"name\": \"azure.container\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure blob\",\n-                                \"name\": \"azure.blobname\"\n-                            },\n-                            {\n-                                \"description\": \"Primary location for blob content\",\n-                                \"name\": \"azure.primaryUri\"\n-                            },\n-                            {\n-                                \"description\": \"Etag for the Azure blob\",\n-                                \"name\": \"azure.etag\"\n-                            },\n-                            {\n-                                \"description\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The timestamp in Azure for the blob\",\n-                                \"name\": \"azure.timestamp\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Client-Side Encryption Key ID\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"LOCAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key ID\",\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Client-Side Encryption Key ID\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Key Type\": {\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Client-Side Encryption disabled\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"Client-Side Encryption enabled using local key\",\n-                                        \"displayName\": \"LOCAL\",\n-                                        \"value\": \"LOCAL\"\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key Type\",\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client-Side Encryption Key Type\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Local Key\": {\n+                            \"sasl.password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"LOCAL\"\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"description\": \"When using local client-side encryption, this is the raw key, encoded in hexadecimal\",\n-                                \"displayName\": \"Client-Side Encryption Local Key\",\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client-Side Encryption Local Key\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"File Resource Service\": {\n+                            \"sasl.token.auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"FILE_RESOURCE_SERVICE\"\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n-                                        \"propertyName\": \"Resource Transfer Source\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n-                                \"displayName\": \"File Resource Service\",\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Resource Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"sasl.token.auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Resource Transfer Source\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The content of the incoming FlowFile provides the source for transfer\",\n-                                        \"displayName\": \"FlowFile Content\",\n-                                        \"value\": \"FLOWFILE_CONTENT\"\n-                                    },\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"The File Resource Service provides the source for transfer\",\n-                                        \"displayName\": \"File Resource Service\",\n-                                        \"value\": \"FILE_RESOURCE_SERVICE\"\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FLOWFILE_CONTENT\",\n-                                \"description\": \"The source of the content to be transferred\",\n-                                \"displayName\": \"Resource Transfer Source\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Resource Transfer Source\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"blob-name\": {\n-                                \"description\": \"The full name of the blob\",\n-                                \"displayName\": \"Blob Name\",\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"security.protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fail if the blob already exists\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"FAIL_RESOLUTION\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n-                                        \"description\": \"Ignore if the blob already exists; the 'azure.error' attribute will be set to the value 'BLOB_ALREADY_EXISTS'\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"IGNORE_RESOLUTION\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n                                     },\n                                     {\n-                                        \"description\": \"Replace blob contents if the blob already exist\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"REPLACE_RESOLUTION\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FAIL_RESOLUTION\",\n-                                \"description\": \"Specifies whether an existing blob will have its contents replaced upon conflict.\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"create-container\": {\n+                            \"separate-by-key\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to check if the container exists and to automatically create it if it does not. Permission to list containers is required. If false, this check is not made, but the Put operation will fail if the container does not exist.\",\n-                                \"displayName\": \"Create Container\",\n+                                \"description\": \"If true, two Records will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n+                                \"displayName\": \"Separate By Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"create-container\",\n-                                \"required\": true,\n+                                \"name\": \"separate-by-key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topic Name(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"topic_type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Name Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"topic_type\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\"\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_0\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"description\": \"FlowFiles received from Kafka.  Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"If a message from Kafka cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"2.0\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Record\",\n+                            \"Topic\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Puts content into a blob on Azure Blob Storage. The processor uses Azure Blob Storage client library v12.\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_0\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafkaRecord_2_0. Please note that, at this time, the Processor assumes that all records that are retrieved from a given partition have the same schema. If any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the Azure Blob Storage container\",\n-                                \"name\": \"azure.container\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the blob on Azure Blob Storage\",\n-                                \"name\": \"azure.blobname\"\n-                            },\n-                            {\n-                                \"description\": \"Primary location of the blob\",\n-                                \"name\": \"azure.primaryUri\"\n-                            },\n-                            {\n-                                \"description\": \"ETag of the blob\",\n-                                \"name\": \"azure.etag\"\n-                            },\n-                            {\n-                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n-                                \"name\": \"azure.blobtype\"\n+                                \"description\": \"The number of records received\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"MIME Type of the content\",\n+                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"Language code for the content\",\n-                                \"name\": \"lang\"\n-                            },\n-                            {\n-                                \"description\": \"Timestamp of the blob\",\n-                                \"name\": \"azure.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\n+                                \"description\": \"The partition of the topic the records are from\",\n+                                \"name\": \"kafka.partition\"\n                             },\n                             {\n-                                \"description\": \"Error code reported during blob operation\",\n-                                \"name\": \"azure.error.code\"\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n                             },\n                             {\n-                                \"description\": \"When Conflict Resolution Strategy is 'ignore', this property will be true/false depending on whether the blob was ignored.\",\n-                                \"name\": \"azure.ignored\"\n+                                \"description\": \"The topic records are from\",\n+                                \"name\": \"kafka.topic\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-kafka-2-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -16761,266 +16765,542 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"File Resource Service\": {\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"auto.offset.reset\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n+                                \"displayName\": \"Offset Reset\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"auto.offset.reset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"aws.profile.name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"FILE_RESOURCE_SERVICE\"\n+                                            \"AWS_MSK_IAM\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n-                                        \"propertyName\": \"Resource Transfer Source\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n-                                \"displayName\": \"File Resource Service\",\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"group.id\": {\n+                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n+                                \"displayName\": \"Group ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"group.id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"header-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n+                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Resource Service\",\n+                                \"name\": \"header-name-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"honor-transactions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n+                                \"displayName\": \"Honor Transactions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"honor-transactions\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Resource Transfer Source\": {\n+                            \"key-attribute-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The content of the incoming FlowFile provides the source for transfer\",\n-                                        \"displayName\": \"FlowFile Content\",\n-                                        \"value\": \"FLOWFILE_CONTENT\"\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n                                     },\n                                     {\n-                                        \"description\": \"The File Resource Service provides the source for transfer\",\n-                                        \"displayName\": \"File Resource Service\",\n-                                        \"value\": \"FILE_RESOURCE_SERVICE\"\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FLOWFILE_CONTENT\",\n-                                \"description\": \"The source of the content to be transferred\",\n-                                \"displayName\": \"Resource Transfer Source\",\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Resource Transfer Source\",\n+                                \"name\": \"key-attribute-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n+                                \"displayName\": \"Max Uncommitted Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n+                                \"name\": \"max-uncommit-offset-wait\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n+                                \"displayName\": \"Max Poll Records\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.poll.records\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-demarcator\": {\n+                                \"description\": \"Since KafkaConsumer receives messages in batches, you have an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n+                                \"displayName\": \"Message Demarcator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"base-temporary-path\": {\n-                                \"defaultValue\": \"\",\n+                            \"sasl.password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"WRITE_AND_RENAME\"\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Writing Strategy\",\n-                                        \"propertyName\": \"writing-strategy\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"description\": \"The Path where the temporary directory will be created. The Path name cannot contain a leading '/'. The root directory can be designated by the empty string value. Non-existing directories will be created.The Temporary File Directory name is _nifitempdirectory\",\n-                                \"displayName\": \"Base Temporary Path\",\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"base-temporary-path\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"sasl.token.auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"sasl.token.auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"directory-name\": {\n-                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n-                                \"displayName\": \"Directory Name\",\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"filesystem-name\": {\n-                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n-                                \"displayName\": \"Filesystem Name\",\n+                            \"separate-by-key\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, and the <Message Demarcator> property is set, two messages will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n+                                \"displayName\": \"Separate By Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"separate-by-key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"writing-strategy\": {\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topic Name(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"topic_type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The processor writes the Azure file into a temporary directory and then renames/moves it to the final destination. This prevents other processes from reading partially written files.\",\n-                                        \"displayName\": \"Write and Rename\",\n-                                        \"value\": \"WRITE_AND_RENAME\"\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n                                     },\n                                     {\n-                                        \"description\": \"The processor writes the Azure file directly to the destination. This might result in the reading of partially written files.\",\n-                                        \"displayName\": \"Simple Write\",\n-                                        \"value\": \"SIMPLE_WRITE\"\n+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"WRITE_AND_RENAME\",\n-                                \"description\": \"Defines the approach for writing the Azure file.\",\n-                                \"displayName\": \"Writing Strategy\",\n+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Name Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"writing-strategy\",\n+                                \"name\": \"topic_type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n+                                \"description\": \"FlowFiles received from Kafka. Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"2.0\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Topic\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile as a file on Azure Data Lake Storage Gen 2\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_0\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafka_2_0.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the Azure File System\",\n-                                \"name\": \"azure.filesystem\"\n+                                \"description\": \"The number of messages written if more than one\",\n+                                \"name\": \"kafka.count\"\n                             },\n                             {\n-                                \"description\": \"The name of the Azure Directory\",\n-                                \"name\": \"azure.directory\"\n+                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n+                                \"name\": \"kafka.key\"\n                             },\n                             {\n-                                \"description\": \"The name of the Azure File\",\n-                                \"name\": \"azure.filename\"\n+                                \"description\": \"The offset of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.offset\"\n                             },\n                             {\n-                                \"description\": \"Primary location for file content\",\n-                                \"name\": \"azure.primaryUri\"\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The length of the Azure File\",\n-                                \"name\": \"azure.length\"\n+                                \"description\": \"The partition of the topic the message or message bundle is from\",\n+                                \"name\": \"kafka.partition\"\n+                            },\n+                            {\n+                                \"description\": \"The topic the message or message bundle is from\",\n+                                \"name\": \"kafka.topic\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-2-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -17030,566 +17310,590 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"deprecated\": true,\n                         \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\"\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\"\n                         ],\n                         \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"auto-delete-messages\": {\n+                            \"Failure Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n+                                        \"displayName\": \"Route to Failure\",\n+                                        \"value\": \"Route to Failure\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n+                                        \"displayName\": \"Rollback\",\n+                                        \"value\": \"Rollback\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether the received message is to be automatically deleted from the queue.\",\n-                                \"displayName\": \"Auto Delete Messages\",\n+                                \"defaultValue\": \"Route to Failure\",\n+                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n+                                \"displayName\": \"Failure Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto-delete-messages\",\n+                                \"name\": \"Failure Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"batch-size\": {\n-                                \"defaultValue\": \"32\",\n-                                \"description\": \"The number of messages to be retrieved from the queue.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch-size\",\n+                                \"name\": \"ack.wait.time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"acks\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Storage Account Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"acks\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"attribute-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"storage-endpoint-suffix\": {\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"name\": \"attribute-name-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-queue-name\": {\n-                                \"description\": \"Name of the Azure Storage Queue\",\n-                                \"displayName\": \"Queue Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-queue-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"name\": \"aws.profile.name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"visibility-timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The duration during which the retrieved message should be invisible to other consumers.\",\n-                                \"displayName\": \"Visibility Timeout\",\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"visibility-timeout\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"dequeue\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage\",\n-                        \"typeDescription\": \"Retrieves the messages from an Azure Queue Storage. The retrieved messages will be deleted from the queue by default. If the requirement is to consume messages without deleting them, set 'Auto Delete Messages' to 'false'. Note: There might be chances of receiving duplicates in situations like when a message is received but was unable to be deleted from the queue due to some unexpected situations.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The absolute URI of the configured Azure Queue Storage\",\n-                                \"name\": \"azure.queue.uri\"\n-                            },\n-                            {\n-                                \"description\": \"The time when the message was inserted into the queue storage\",\n-                                \"name\": \"azure.queue.insertionTime\"\n-                            },\n-                            {\n-                                \"description\": \"The time when the message will expire from the queue storage\",\n-                                \"name\": \"azure.queue.expirationTime\"\n-                            },\n-                            {\n-                                \"description\": \"The ID of the retrieved message\",\n-                                \"name\": \"azure.queue.messageId\"\n                             },\n-                            {\n-                                \"description\": \"The pop receipt of the retrieved message\",\n-                                \"name\": \"azure.queue.popReceipt\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Auto Delete Messages\": {\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether the received message is to be automatically deleted from the queue.\",\n-                                \"displayName\": \"Auto Delete Messages\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Auto Delete Messages\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Credentials Service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Storage Credentials.\",\n-                                \"displayName\": \"Credentials Service\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Credentials Service\",\n-                                \"required\": true,\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Message Batch Size\": {\n-                                \"defaultValue\": \"32\",\n-                                \"description\": \"The number of messages to be retrieved from the queue.\",\n-                                \"displayName\": \"Message Batch Size\",\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max.block.ms\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Batch Size\",\n+                                \"name\": \"max.request.size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Queue Name\": {\n-                                \"description\": \"Name of the Azure Storage Queue\",\n-                                \"displayName\": \"Queue Name\",\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-key-field\": {\n+                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n+                                \"displayName\": \"Message Key Field\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Queue Name\",\n-                                \"required\": true,\n+                                \"name\": \"message-key-field\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"The timeout for read or write requests to Azure Queue Storage. Defaults to 1 second.\",\n-                                \"displayName\": \"Request Timeout\",\n+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to. How this value is interpreted is dictated by the <Partitioner class> property.\",\n+                                \"displayName\": \"Partition\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"partition\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Visibility Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The duration during which the retrieved message should be invisible to other consumers.\",\n-                                \"displayName\": \"Visibility Timeout\",\n+                            \"partitioner.class\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Messages will be assigned to random partitions.\",\n+                                        \"displayName\": \"DefaultPartitioner\",\n+                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as a RecordPath that will be evaluated against each Record to determine which partition the Record will go to. All Records that have the same value for the given RecordPath will go to the same Partition.\",\n+                                        \"displayName\": \"RecordPath Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RecordPathPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n+                                        \"displayName\": \"Expression Language Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n+                                \"displayName\": \"Partitioner class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Visibility Timeout\",\n-                                \"required\": true,\n+                                \"name\": \"partitioner.class\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"defaultValue\": \"queue.core.windows.net\",\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n-                                \"displayName\": \"Endpoint Suffix\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"dequeue\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\",\n-                        \"typeDescription\": \"Retrieves the messages from an Azure Queue Storage. The retrieved messages will be deleted from the queue by default. If the requirement is to consume messages without deleting them, set 'Auto Delete Messages' to 'false'. Note: There might be chances of receiving duplicates in situations like when a message is received but was unable to be deleted from the queue due to some unexpected situations.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The absolute URI of the configured Azure Queue Storage\",\n-                                \"name\": \"azure.queue.uri\"\n-                            },\n-                            {\n-                                \"description\": \"The time when the message was inserted into the queue storage\",\n-                                \"name\": \"azure.queue.insertionTime\"\n-                            },\n-                            {\n-                                \"description\": \"The time when the message will expire from the queue storage\",\n-                                \"name\": \"azure.queue.expirationTime\"\n-                            },\n-                            {\n-                                \"description\": \"The ID of the retrieved message\",\n-                                \"name\": \"azure.queue.messageId\"\n-                            },\n-                            {\n-                                \"description\": \"The pop receipt of the retrieved message\",\n-                                \"name\": \"azure.queue.popReceipt\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage_v12\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Storage Account Name\",\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"sasl.token.auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"sasl.token.auth\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-queue-name\": {\n-                                \"description\": \"Name of the Azure Storage Queue\",\n-                                \"displayName\": \"Queue Name\",\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-queue-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"time-to-live\": {\n-                                \"defaultValue\": \"7 days\",\n-                                \"description\": \"Maximum time to allow the message to be in the queue. If left empty, the default value of 7 days will be used.\",\n-                                \"displayName\": \"TTL\",\n+                            \"transactional-id-prefix\": {\n+                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n+                                \"displayName\": \"Transactional Id Prefix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"time-to-live\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"transactional-id-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"visibility-delay\": {\n-                                \"defaultValue\": \"0 secs\",\n-                                \"description\": \"The length of time during which the message will be invisible, starting when it is added to the queue. This value must be greater than or equal to 0 and less than the TTL value.\",\n-                                \"displayName\": \"Visibility Delay\",\n+                            \"use-transactions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n+                                \"displayName\": \"Use Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"visibility-delay\",\n-                                \"required\": false,\n+                                \"name\": \"use-transactions\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage\"\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_0\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"enqueue\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n+                            \"2.0\",\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Record\",\n+                            \"Send\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\",\n+                            \"logs\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage\",\n-                        \"typeDescription\": \"Writes the content of the incoming FlowFiles to the configured Azure Queue Storage.\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_0\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as individual records to Apache Kafka using the Kafka 2.0 Producer API. The contents of the FlowFile are expected to be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafkaRecord_2_0.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n+                                \"name\": \"msg.count\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-2-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -17597,815 +17901,1228 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Credentials Service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Storage Credentials.\",\n-                                \"displayName\": \"Credentials Service\",\n+                            \"Failure Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n+                                        \"displayName\": \"Route to Failure\",\n+                                        \"value\": \"Route to Failure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n+                                        \"displayName\": \"Rollback\",\n+                                        \"value\": \"Rollback\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Route to Failure\",\n+                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n+                                \"displayName\": \"Failure Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Credentials Service\",\n+                                \"name\": \"Failure Strategy\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Message Time To Live\": {\n-                                \"defaultValue\": \"7 days\",\n-                                \"description\": \"Maximum time to allow the message to be in the queue\",\n-                                \"displayName\": \"Message Time To Live\",\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Time To Live\",\n+                                \"name\": \"ack.wait.time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Queue Name\": {\n-                                \"description\": \"Name of the Azure Storage Queue\",\n-                                \"displayName\": \"Queue Name\",\n+                            \"acks\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Queue Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"The timeout for read or write requests to Azure Queue Storage. Defaults to 1 second.\",\n-                                \"displayName\": \"Request Timeout\",\n+                            \"attribute-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Timeout\",\n+                                \"name\": \"attribute-name-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Visibility Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The length of time during which the message will be invisible after it is read. If the processing unit fails to delete the message after it is read, then the message will reappear in the queue.\",\n-                                \"displayName\": \"Visibility Timeout\",\n+                            \"compression.type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Visibility Timeout\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"kafka-key\": {\n+                                \"description\": \"The Key to use for the Message. If not specified, the flow file attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n+                                \"displayName\": \"Kafka Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"kafka-key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"defaultValue\": \"queue.core.windows.net\",\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n-                                \"displayName\": \"Endpoint Suffix\",\n+                            \"key-attribute-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"name\": \"key-attribute-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"enqueue\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage_v12\",\n-                        \"typeDescription\": \"Writes the content of the incoming FlowFiles to the configured Azure Queue Storage.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"reportingTasks\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Application ID\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The Application ID to be included in the metrics sent to Azure Log Analytics WS\",\n-                                \"displayName\": \"Application ID\",\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Application ID\",\n+                                \"name\": \"max.block.ms\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many records to send in a single batch, at most.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"name\": \"max.request.size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Instance ID\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Azure Log Analytics WS\",\n-                                \"displayName\": \"Instance ID\",\n+                            \"message-demarcator\": {\n+                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n+                                \"displayName\": \"Message Demarcator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Instance ID\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Instance URL\": {\n-                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n-                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n-                                \"displayName\": \"Instance URL\",\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Instance URL\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Job Name\": {\n-                                \"defaultValue\": \"nifi_reporting_job\",\n-                                \"description\": \"The name of the exporting job\",\n-                                \"displayName\": \"Job Name\",\n+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to.\",\n+                                \"displayName\": \"Partition\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Job Name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"partition\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Analytics Custom Log Name\": {\n-                                \"defaultValue\": \"nifiprovenance\",\n-                                \"description\": \"Log Analytics Custom Log Name\",\n-                                \"displayName\": \"Log Analytics Custom Log Name\",\n+                            \"partitioner.class\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Messages will be assigned to random partitions.\",\n+                                        \"displayName\": \"DefaultPartitioner\",\n+                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n+                                        \"displayName\": \"Expression Language Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n+                                \"displayName\": \"Partitioner class\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics Custom Log Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"partitioner.class\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Analytics URL Endpoint Format\": {\n-                                \"defaultValue\": \"https://{0}.ods.opinsights.azure.com/api/logs?api-version=2016-04-01\",\n-                                \"description\": \"Log Analytics URL Endpoint Format\",\n-                                \"displayName\": \"Log Analytics URL Endpoint Format\",\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics URL Endpoint Format\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Log Analytics Workspace Id\": {\n-                                \"description\": \"Log Analytics Workspace Id\",\n-                                \"displayName\": \"Log Analytics Workspace Id\",\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics Workspace Id\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Log Analytics Workspace Key\": {\n-                                \"description\": \"Azure Log Analytic Worskspace Key\",\n-                                \"displayName\": \"Log Analytics Workspace Key\",\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics Workspace Key\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Platform\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The value to use for the platform field in each event.\",\n-                                \"displayName\": \"Platform\",\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Platform\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"include-null-values\": {\n+                            \"sasl.token.auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Indicate if null values should be included in records. Default will be false\",\n-                                \"displayName\": \"Include Null Values\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-null-values\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-event-filter\": {\n-                                \"description\": \"Comma-separated list of event types that will be used to filter the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Event Type to Include\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-event-filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-event-filter-exclude\": {\n-                                \"description\": \"Comma-separated list of event types that will be used to exclude the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If an event type is included in Event Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Event Type to Exclude\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-event-filter-exclude\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-id-filter\": {\n-                                \"description\": \"Comma-separated list of component UUID that will be used to filter the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Component ID to Include\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-id-filter\",\n+                                \"name\": \"sasl.token.auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-prov-task-id-filter-exclude\": {\n-                                \"description\": \"Comma-separated list of component UUID that will be used to exclude the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component UUID is included in Component ID to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Component ID to Exclude\",\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-id-filter-exclude\",\n+                                \"name\": \"sasl.username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-prov-task-name-filter\": {\n-                                \"description\": \"Regular expression to filter the provenance events based on the component name. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Component Name to Include\",\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-name-filter\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-prov-task-name-filter-exclude\": {\n-                                \"description\": \"Regular expression to exclude the provenance events based on the component name. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component name is included in Component Name to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Component Name to Exclude\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-name-filter-exclude\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"s2s-prov-task-type-filter\": {\n-                                \"description\": \"Regular expression to filter the provenance events based on the component type. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Component Type to Include\",\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-type-filter\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-prov-task-type-filter-exclude\": {\n-                                \"description\": \"Regular expression to exclude the provenance events based on the component type. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component type is included in Component Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Component Type to Exclude\",\n+                            \"transactional-id-prefix\": {\n+                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n+                                \"displayName\": \"Transactional Id Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-type-filter-exclude\",\n+                                \"name\": \"transactional-id-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"start-position\": {\n+                            \"use-transactions\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Start reading provenance Events from the beginning of the stream (the oldest event first)\",\n-                                        \"displayName\": \"Beginning of Stream\",\n-                                        \"value\": \"beginning-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Start reading provenance Events from the end of the stream, ignoring old events\",\n-                                        \"displayName\": \"End of Stream\",\n-                                        \"value\": \"end-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"beginning-of-stream\",\n-                                \"description\": \"If the Reporting Task has never been run, or if its state has been reset by a user, specifies where in the stream of Provenance Events the Reporting Task should start\",\n-                                \"displayName\": \"Start Position\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n+                                \"displayName\": \"Use Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"start-position\",\n+                                \"name\": \"use-transactions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"log analytics\",\n-                            \"provenace\",\n-                            \"reporting\"\n+                            \"2.0\",\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Send\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.azure.loganalytics.AzureLogAnalyticsProvenanceReportingTask\",\n-                        \"typeDescription\": \"Publishes Provenance events to to a Azure Log Analytics workspace.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_0\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as a message to Apache Kafka using the Kafka 2.0 Producer API.The messages to send may be individual FlowFiles or may be delimited, using a user-specified delimiter, such as a new-line. The complementary NiFi processor for fetching messages is ConsumeKafka_2_0.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success. If the <Message Demarcator> Property is not set, this will always be 1, but if the Property is set, it may be greater than 1.\",\n+                                \"name\": \"msg.count\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-zendesk-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-zendesk-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Application ID\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The Application ID to be included in the metrics sent to Azure Log Analytics WS\",\n-                                \"displayName\": \"Application ID\",\n+                            \"cache-expiration\": {\n+                                \"defaultValue\": \"1 hour\",\n+                                \"description\": \"Specifies how long a Zendesk ticket that is cached should remain in the cache.\",\n+                                \"displayName\": \"Cache Expiration\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Application ID\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-expiration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Instance ID\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Azure Log Analytics WS\",\n-                                \"displayName\": \"Instance ID\",\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Zendesk ticket should be cached.\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Instance ID\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Job Name\": {\n-                                \"defaultValue\": \"nifi_reporting_job\",\n-                                \"description\": \"The name of the exporting job\",\n-                                \"displayName\": \"Job Name\",\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations.\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Job Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"web-client-service-provider\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"zendesk-authentication-type-name\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Password of Zendesk login user.\",\n+                                        \"displayName\": \"Password\",\n+                                        \"value\": \"password\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n+                                        \"displayName\": \"Token\",\n+                                        \"value\": \"token\"\n+                                    }\n+                                ],\n+                                \"description\": \"Type of authentication to Zendesk API.\",\n+                                \"displayName\": \"Authentication Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"zendesk-authentication-type-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Analytics Custom Log Name\": {\n-                                \"defaultValue\": \"nifimetrics\",\n-                                \"description\": \"Log Analytics Custom Log Name\",\n-                                \"displayName\": \"Log Analytics Custom Log Name\",\n+                            \"zendesk-authentication-value-name\": {\n+                                \"description\": \"Password or authentication token for Zendesk login user.\",\n+                                \"displayName\": \"Authentication Credential\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics Custom Log Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-authentication-value-name\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"zendesk-comment-body\": {\n+                                \"description\": \"The content or the path to the comment body in the incoming record.\",\n+                                \"displayName\": \"Comment Body\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-comment-body\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Analytics URL Endpoint Format\": {\n-                                \"defaultValue\": \"https://{0}.ods.opinsights.azure.com/api/logs?api-version=2016-04-01\",\n-                                \"description\": \"Log Analytics URL Endpoint Format\",\n-                                \"displayName\": \"Log Analytics URL Endpoint Format\",\n+                            \"zendesk-priority\": {\n+                                \"description\": \"The content or the path to the priority in the incoming record.\",\n+                                \"displayName\": \"Priority\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics URL Endpoint Format\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-priority\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Analytics Workspace Id\": {\n-                                \"description\": \"Log Analytics Workspace Id\",\n-                                \"displayName\": \"Log Analytics Workspace Id\",\n+                            \"zendesk-subdomain\": {\n+                                \"description\": \"Name of the Zendesk subdomain.\",\n+                                \"displayName\": \"Subdomain Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics Workspace Id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-subdomain\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Log Analytics Workspace Key\": {\n-                                \"description\": \"Azure Log Analytic Worskspace Key\",\n-                                \"displayName\": \"Log Analytics Workspace Key\",\n+                            \"zendesk-subject\": {\n+                                \"description\": \"The content or the path to the subject in the incoming record.\",\n+                                \"displayName\": \"Subject\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics Workspace Key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-subject\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Process group ID(s)\": {\n-                                \"description\": \"If specified, the reporting task will send metrics the configured ProcessGroup(s) only. Multiple IDs should be separated by a comma. If none of the group-IDs could be found or no IDs are defined, the Root Process Group is used and global metrics are sent.\",\n-                                \"displayName\": \"Process group ID(s)\",\n+                            \"zendesk-type\": {\n+                                \"description\": \"The content or the path to the type in the incoming record.\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Process group ID(s)\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Send JVM Metrics\": {\n+                            \"zendesk-user\": {\n+                                \"description\": \"Login user to Zendesk subdomain.\",\n+                                \"displayName\": \"User Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-user\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"record\",\n+                            \"sink\",\n+                            \"zendesk\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.zendesk.ZendeskRecordSink\",\n+                        \"typeDescription\": \"Create Zendesk tickets using the Zendesk API.The service requires a Zendesk account with configured access.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-box-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-websocket-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-datadog-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-datadog-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"This reporting task is deprecated and will be removed in NiFi 2.x.\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"API key\": {\n+                                \"description\": \"Datadog API key. If specified value is 'agent', local Datadog agent will be used.\",\n+                                \"displayName\": \"API key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"API key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Datadog transport\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Metrics will be sent via locally installed Datadog agent. Datadog agent needs to be installed manually before using this option\",\n+                                        \"displayName\": \"Datadog Agent\",\n+                                        \"value\": \"Datadog Agent\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Metrics will be sent via HTTP transport with no need of Agent installed. Datadog API key needs to be set\",\n+                                        \"displayName\": \"Datadog HTTP\",\n+                                        \"value\": \"Datadog HTTP\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Send JVM Metrics in addition to the NiFi-metrics\",\n-                                \"displayName\": \"Send JVM Metrics\",\n+                                \"defaultValue\": \"Datadog HTTP\",\n+                                \"description\": \"Transport through which metrics will be sent to Datadog\",\n+                                \"displayName\": \"Datadog transport\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send JVM Metrics\",\n+                                \"name\": \"Datadog transport\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Environment\": {\n+                                \"defaultValue\": \"dev\",\n+                                \"description\": \"Environment, dataflow is running in. This property will be included as metrics tag.\",\n+                                \"displayName\": \"Environment\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Environment\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Metrics prefix\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"Prefix to be added before every metric\",\n+                                \"displayName\": \"Metrics prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Metrics prefix\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"log analytics\",\n+                            \"datadog\",\n                             \"metrics\",\n                             \"reporting\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.azure.loganalytics.AzureLogAnalyticsReportingTask\",\n-                        \"typeDescription\": \"Sends JVM-metrics as well as Apache NiFi-metrics to a Azure Log Analytics workspace.Apache NiFi-metrics can be either configured global or on process-group level.\",\n+                        \"type\": \"org.apache.nifi.reporting.datadog.DataDogReportingTask\",\n+                        \"typeDescription\": \"Publishes metrics from NiFi to datadog. For accurate and informative reporting, components should have unique names.\",\n                         \"version\": \"1.27.0\"\n                     }\n                 ]\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-social-media-nar\",\n+            \"artifact\": \"nifi-solr-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-social-media-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-solr-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"The SOLR processors are deprecated and will be removed in NiFi 2.x.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"backfill-minutes\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of minutes (up to 5 minutes) of streaming data to be requested after a disconnect. Only available for project with academic research access. See https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/integrate/recovery-and-redundancy-features\",\n-                                \"displayName\": \"Backfill Minutes\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Number of rows per Solr query\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"backfill-minutes\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"backoff-attempts\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The number of reconnection tries the processor will attempt in the event of a disconnection of the stream for any reason, before throwing an exception. To start a stream after this exception occur and the connection is fixed, please stop and restart the processor. If the valueof this property is 0, then backoff will never occur and the processor will always need to be restartedif the stream fails.\",\n-                                \"displayName\": \"Backoff Attempts\",\n+                            \"Collection\": {\n+                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n+                                \"displayName\": \"Collection\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"backoff-attempts\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Collection\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"backoff-time\": {\n-                                \"defaultValue\": \"1 mins\",\n-                                \"description\": \"The duration to backoff before requesting a new stream ifthe current one fails for any reason. Will increase by factor of 2 every time a restart fails\",\n-                                \"displayName\": \"Backoff Time\",\n+                            \"Date Field\": {\n+                                \"description\": \"The name of a date field in Solr used to filter results\",\n+                                \"displayName\": \"Date Field\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"backoff-time\",\n+                                \"name\": \"Date Field\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"base-path\": {\n-                                \"defaultValue\": \"https://api.twitter.com\",\n-                                \"description\": \"The base path that the processor will use for making HTTP requests. The default value should be sufficient for most use cases.\",\n-                                \"displayName\": \"Base Path\",\n+                            \"Initial Date Filter\": {\n+                                \"description\": \"Date value to filter results. Documents with an earlier date will not be fetched. The format has to correspond to the date pattern of Solr 'YYYY-MM-DDThh:mm:ssZ'\",\n+                                \"displayName\": \"Initial Date Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"base-path\",\n-                                \"required\": true,\n+                                \"name\": \"Initial Date Filter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"batch-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum size of the number of Tweets to be written to a single FlowFile. Will write fewer Tweets based on the number available in the queue at the time of processor invocation.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Password\": {\n+                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"bearer-token\": {\n-                                \"description\": \"The Bearer Token provided by Twitter.\",\n-                                \"displayName\": \"Bearer Token\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use in order to write Solr documents to FlowFiles. Must be set if \\\"Records\\\" is used as return type.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Record Writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Return Fields\": {\n+                                \"description\": \"Comma-separated list of field names to return\",\n+                                \"displayName\": \"Return Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bearer-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"name\": \"Return Fields\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"connect-timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"The maximum time in which client should establish a connection with the Twitter API before a time out. Setting the value to 0 disables connection timeouts.\",\n-                                \"displayName\": \"Connect Timeout\",\n+                            \"Return Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"XML\",\n+                                        \"value\": \"XML\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Records\",\n+                                        \"value\": \"Records\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"XML\",\n+                                \"description\": \"Write Solr documents to FlowFiles as XML or using a Record Writer\",\n+                                \"displayName\": \"Return Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"connect-timeout\",\n+                                \"name\": \"Return Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"expansions\": {\n-                                \"description\": \"A comma-separated list of expansions for objects in the returned tweet. See https://developer.twitter.com/en/docs/twitter-api/expansions for proper usage. Possible field values include: author_id, referenced_tweets.id, referenced_tweets.id.author_id, entities.mentions.username, attachments.poll_ids, attachments.media_keys ,in_reply_to_user_id, geo.place_id\",\n-                                \"displayName\": \"Expansions\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"expansions\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"maximum-backoff-time\": {\n-                                \"defaultValue\": \"5 mins\",\n-                                \"description\": \"The maximum duration to backoff to start attempting a new stream.It is recommended that this number be much higher than the 'Backoff Time' property\",\n-                                \"displayName\": \"Maximum Backoff Time\",\n+                            \"Solr Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maximum-backoff-time\",\n+                                \"name\": \"Solr Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"media-fields\": {\n-                                \"description\": \"A comma-separated list of media fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/media for proper usage. Possible field values include: alt_text, duration_ms, height, media_key, non_public_metrics, organic_metrics, preview_image_url, promoted_metrics, public_metrics, type, url, width\",\n-                                \"displayName\": \"Media Fields\",\n+                            \"Solr Location\": {\n+                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n+                                \"displayName\": \"Solr Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"media-fields\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Solr Location\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"place-fields\": {\n-                                \"description\": \"A comma-separated list of place fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/place for proper usage. Possible field values include: contained_within, country, country_code, full_name, geo, id, name, place_type\",\n-                                \"displayName\": \"Place Fields\",\n+                            \"Solr Maximum Connections\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n+                                \"displayName\": \"Solr Maximum Connections\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"place-fields\",\n-                                \"required\": false,\n+                                \"name\": \"Solr Maximum Connections\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"poll-fields\": {\n-                                \"description\": \"A comma-separated list of poll fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/poll for proper usage. Possible field values include: duration_minutes, end_datetime, id, options, voting_status\",\n-                                \"displayName\": \"Poll Fields\",\n+                            \"Solr Maximum Connections Per Host\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n+                                \"displayName\": \"Solr Maximum Connections Per Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"poll-fields\",\n-                                \"required\": false,\n+                                \"name\": \"Solr Maximum Connections Per Host\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"queue-size\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Maximum size of internal queue for streamed messages\",\n-                                \"displayName\": \"Queue Size\",\n+                            \"Solr Query\": {\n+                                \"description\": \"A query to execute against Solr\",\n+                                \"displayName\": \"Solr Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"queue-size\",\n-                                \"required\": true,\n+                                \"name\": \"Solr Query\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"read-timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"The maximum time of inactivity between receiving tweets from Twitter through the API before a timeout. Setting the value to 0 disables read timeouts.\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"Solr Socket Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Socket Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"read-timeout\",\n+                                \"name\": \"Solr Socket Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"stream-endpoint\": {\n+                            \"Solr Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Streams about one percent of all Tweets. https://developer.twitter.com/en/docs/twitter-api/tweets/volume-streams/api-reference/get-tweets-sample-stream\",\n-                                        \"displayName\": \"Sample Stream\",\n-                                        \"value\": \"Sample Endpoint\"\n+                                        \"description\": \"A SolrCloud instance.\",\n+                                        \"displayName\": \"Cloud\",\n+                                        \"value\": \"Cloud\"\n                                     },\n                                     {\n-                                        \"description\": \"The search stream produces Tweets that match filtering rules configured on Twitter services. At least one well-formed filtering rule must be configured. https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/get-tweets-search-stream\",\n-                                        \"displayName\": \"Search Stream\",\n-                                        \"value\": \"Search Endpoint\"\n+                                        \"description\": \"A stand-alone Solr instance.\",\n+                                        \"displayName\": \"Standard\",\n+                                        \"value\": \"Standard\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Sample Endpoint\",\n-                                \"description\": \"The source from which the processor will consume Tweets.\",\n-                                \"displayName\": \"Stream Endpoint\",\n+                                \"defaultValue\": \"Standard\",\n+                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n+                                \"displayName\": \"Solr Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"stream-endpoint\",\n+                                \"name\": \"Solr Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"tweet-fields\": {\n-                                \"description\": \"A comma-separated list of tweet fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/tweet for proper usage. Possible field values include: attachments, author_id, context_annotations, conversation_id, created_at, entities, geo, id, in_reply_to_user_id, lang, non_public_metrics, organic_metrics, possibly_sensitive, promoted_metrics, public_metrics, referenced_tweets, reply_settings, source, text, withheld\",\n-                                \"displayName\": \"Tweet Fields\",\n+                            \"Username\": {\n+                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ZooKeeper Client Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Client Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"tweet-fields\",\n+                                \"name\": \"ZooKeeper Client Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"user-fields\": {\n-                                \"description\": \"A comma-separated list of user fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/user for proper usage. Possible field values include: created_at, description, entities, id, location, name, pinned_tweet_id, profile_image_url, protected, public_metrics, url, username, verified, withheld\",\n-                                \"displayName\": \"User Fields\",\n+                            \"ZooKeeper Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"user-fields\",\n+                                \"name\": \"ZooKeeper Connection Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kerberos-principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Stores latest date of Date Field so that the same data will not be fetched multiple times.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles containing an array of one or more Tweets\",\n+                                \"description\": \"The results of querying Solr\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"json\",\n-                            \"social media\",\n-                            \"status\",\n-                            \"tweets\",\n-                            \"twitter\"\n+                            \"Apache\",\n+                            \"Get\",\n+                            \"Pull\",\n+                            \"Records\",\n+                            \"Solr\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.twitter.ConsumeTwitter\",\n-                        \"typeDescription\": \"Streams tweets from Twitter's streaming API v2. The stream provides a sample stream or a search stream based on previously uploaded rules. This processor also provides a pass through for certain fields of the tweet to be returned as part of the response. See https://developer.twitter.com/en/docs/twitter-api/data-dictionary/introduction for more information regarding the Tweet object model.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The MIME Type set to application/json\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of Tweets in the FlowFile\",\n-                                \"name\": \"tweets\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.solr.GetSolr\",\n+                        \"typeDescription\": \"Queries Solr and outputs the results as a FlowFile in the format of XML or using a Record Writer\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-social-media-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-solr-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -18414,2032 +19131,2312 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.twitter.ConsumeTwitter\"\n-                        ],\n-                        \"deprecationReason\": \"GetTwitter relies on the Twitter Hosebird client, which is not maintained. This processor will be removed in future releases.\",\n+                        \"deprecationReason\": \"The SOLR processors are deprecated and will be removed in NiFi 2.x.\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Allows users to specify the name/value of a query parameter to add to the Twitter query\",\n+                                \"description\": \"These parameters will be passed to Solr on the request\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name of a query parameter to add to the Twitter query\",\n-                                \"value\": \"The value of a query parameter to add to the Twitter query\"\n+                                \"name\": \"A Solr request parameter name\",\n+                                \"value\": \"A Solr request parameter value\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Access Token\": {\n-                                \"description\": \"The Access Token provided by Twitter\",\n-                                \"displayName\": \"Access Token\",\n+                            \"Collection\": {\n+                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n+                                \"displayName\": \"Collection\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Access Token\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Collection\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Commit Within\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The number of milliseconds before the given update is committed\",\n+                                \"displayName\": \"Commit Within\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Commit Within\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Content Stream Path\": {\n+                                \"defaultValue\": \"/update/json/docs\",\n+                                \"description\": \"The path in Solr to post the ContentStream\",\n+                                \"displayName\": \"Content Stream Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Content Stream Path\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Access Token Secret\": {\n-                                \"description\": \"The Access Token Secret provided by Twitter\",\n-                                \"displayName\": \"Access Token Secret\",\n+                            \"Content-Type\": {\n+                                \"defaultValue\": \"application/json\",\n+                                \"description\": \"Content-Type being sent to Solr\",\n+                                \"displayName\": \"Content-Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Access Token Secret\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Content-Type\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Consumer Key\": {\n-                                \"description\": \"The Consumer Key provided by Twitter\",\n-                                \"displayName\": \"Consumer Key\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Consumer Key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Consumer Secret\": {\n-                                \"description\": \"The Consumer Secret provided by Twitter\",\n-                                \"displayName\": \"Consumer Secret\",\n+                            \"Solr Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Consumer Secret\",\n+                                \"name\": \"Solr Connection Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"IDs to Follow\": {\n-                                \"description\": \"A comma-separated list of Twitter User ID's to follow. Ignored unless Endpoint is set to 'Filter Endpoint'.\",\n-                                \"displayName\": \"IDs to Follow\",\n+                            \"Solr Location\": {\n+                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n+                                \"displayName\": \"Solr Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"IDs to Follow\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Solr Location\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Languages\": {\n-                                \"description\": \"A comma-separated list of languages for which tweets should be fetched\",\n-                                \"displayName\": \"Languages\",\n+                            \"Solr Maximum Connections\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n+                                \"displayName\": \"Solr Maximum Connections\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Languages\",\n-                                \"required\": false,\n+                                \"name\": \"Solr Maximum Connections\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Locations to Filter On\": {\n-                                \"description\": \"A comma-separated list of coordinates specifying one or more bounding boxes to filter on.Each bounding box is specified by a pair of coordinates in the format: swLon,swLat,neLon,neLat. Multiple bounding boxes can be specified as such: swLon1,swLat1,neLon1,neLat1,swLon2,swLat2,neLon2,neLat2.Ignored unless Endpoint is set to 'Filter Endpoint'.\",\n-                                \"displayName\": \"Locations to Filter On\",\n+                            \"Solr Maximum Connections Per Host\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n+                                \"displayName\": \"Solr Maximum Connections Per Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Locations to Filter On\",\n-                                \"required\": false,\n+                                \"name\": \"Solr Maximum Connections Per Host\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Terms to Filter On\": {\n-                                \"description\": \"A comma-separated list of terms to filter on. Ignored unless Endpoint is set to 'Filter Endpoint'. The filter works such that if any term matches, the status update will be retrieved; multiple terms separated by a space function as an 'AND'. I.e., 'it was, hello' will retrieve status updates that have either 'hello' or both 'it' AND 'was'\",\n-                                \"displayName\": \"Terms to Filter On\",\n+                            \"Solr Socket Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Socket Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Terms to Filter On\",\n-                                \"required\": false,\n+                                \"name\": \"Solr Socket Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Twitter Endpoint\": {\n+                            \"Solr Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The endpoint that provides public data, aka a 'garden hose'\",\n-                                        \"displayName\": \"Sample Endpoint\",\n-                                        \"value\": \"Sample Endpoint\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The endpoint that provides access to all tweets\",\n-                                        \"displayName\": \"Firehose Endpoint\",\n-                                        \"value\": \"Firehose Endpoint\"\n+                                        \"description\": \"A SolrCloud instance.\",\n+                                        \"displayName\": \"Cloud\",\n+                                        \"value\": \"Cloud\"\n                                     },\n                                     {\n-                                        \"description\": \"Endpoint that allows the stream to be filtered by specific terms or User IDs\",\n-                                        \"displayName\": \"Filter Endpoint\",\n-                                        \"value\": \"Filter Endpoint\"\n+                                        \"description\": \"A stand-alone Solr instance.\",\n+                                        \"displayName\": \"Standard\",\n+                                        \"value\": \"Standard\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Sample Endpoint\",\n-                                \"description\": \"Specifies which endpoint data should be pulled from\",\n-                                \"displayName\": \"Twitter Endpoint\",\n+                                \"defaultValue\": \"Standard\",\n+                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n+                                \"displayName\": \"Solr Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Twitter Endpoint\",\n+                                \"name\": \"Solr Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-client-error-retries\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The maximum number of retries to attempt when client experience retryable connection errors. Client continues attempting to reconnect using an exponential back-off pattern until it successfully reconnects or until it reaches the retry limit.  It is recommended to raise this value when client is getting rate limited by Twitter API. Default value is 5.\",\n-                                \"displayName\": \"Max Client Error Retries\",\n+                            \"Username\": {\n+                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ZooKeeper Client Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Client Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-client-error-retries\",\n-                                \"required\": true,\n+                                \"name\": \"ZooKeeper Client Timeout\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All status updates will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"json\",\n-                            \"social media\",\n-                            \"status\",\n-                            \"tweets\",\n-                            \"twitter\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.twitter.GetTwitter\",\n-                        \"typeDescription\": \"Pulls status changes from Twitter's streaming API. In versions starting with 1.9.0, the Consumer Key and Access Token are marked as sensitive according to https://developer.twitter.com/en/docs/basics/authentication/guides/securing-keys-and-tokens\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets mime type to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-box-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"box-client-service\": {\n-                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n-                                \"displayName\": \"Box Client Service\",\n+                            },\n+                            \"ZooKeeper Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"box-client-service\",\n-                                \"required\": true,\n+                                \"name\": \"ZooKeeper Connection Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"box-file-id\": {\n-                                \"defaultValue\": \"${box.id}\",\n-                                \"description\": \"The ID of the File to fetch\",\n-                                \"displayName\": \"File ID\",\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"box-file-id\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kerberos-principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"box.id\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.box.ListBoxFile\",\n-                            \"org.apache.nifi.processors.box.PutBoxFile\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n+                                \"description\": \"The original FlowFile\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n+                                \"description\": \"FlowFiles that failed for any reason other than Solr being unreachable\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed because Solr is unreachable\",\n+                                \"name\": \"connection_failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"box\",\n-                            \"fetch\",\n-                            \"storage\"\n+                            \"Apache\",\n+                            \"Put\",\n+                            \"Send\",\n+                            \"Solr\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.box.FetchBoxFile\",\n-                        \"typeDescription\": \"Fetches files from a Box Folder. Designed to be used in tandem with ListBoxFile.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"box.id\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"box.size\"\n-                            },\n-                            {\n-                                \"description\": \"The last modified time of the file\",\n-                                \"name\": \"box.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The error code returned by Box\",\n-                                \"name\": \"error.code\"\n-                            },\n-                            {\n-                                \"description\": \"The error message returned by Box\",\n-                                \"name\": \"error.message\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.solr.PutSolrContentStream\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as a ContentStream to Solr\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-nar\",\n+                        \"artifact\": \"nifi-solr-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"The SOLR processors are deprecated and will be removed in NiFi 2.x.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These parameters will be passed to Solr on the request\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A Solr request parameter name\",\n+                                \"value\": \"A Solr request parameter value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"box-client-service\": {\n-                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n-                                \"displayName\": \"Box Client Service\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"500\",\n+                                \"description\": \"The number of solr documents to index per batch\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Collection\": {\n+                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n+                                \"displayName\": \"Collection\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Collection\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Commit Within\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The number of milliseconds before the given update is committed\",\n+                                \"displayName\": \"Commit Within\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Commit Within\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Fields To Index\": {\n+                                \"description\": \"Comma-separated list of field names to write\",\n+                                \"displayName\": \"Fields To Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Fields To Index\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"box-client-service\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"box-folder-id\": {\n-                                \"description\": \"The ID of the folder from which to pull list of files.\",\n-                                \"displayName\": \"Folder ID\",\n+                            \"Solr Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Solr Connection Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Location\": {\n+                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n+                                \"displayName\": \"Solr Location\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"box-folder-id\",\n+                                \"name\": \"Solr Location\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"Solr Maximum Connections\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n+                                \"displayName\": \"Solr Maximum Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Solr Maximum Connections\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Maximum Connections Per Host\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n+                                \"displayName\": \"Solr Maximum Connections Per Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Solr Maximum Connections Per Host\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Socket Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Socket Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Solr Socket Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"A SolrCloud instance.\",\n+                                        \"displayName\": \"Cloud\",\n+                                        \"value\": \"Cloud\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"description\": \"A stand-alone Solr instance.\",\n+                                        \"displayName\": \"Standard\",\n+                                        \"value\": \"Standard\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"defaultValue\": \"Standard\",\n+                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n+                                \"displayName\": \"Solr Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n+                                \"name\": \"Solr Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Update Path\": {\n+                                \"defaultValue\": \"/update\",\n+                                \"description\": \"The path in Solr to post the Flowfile Records\",\n+                                \"displayName\": \"Solr Update Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Solr Update Path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"ZooKeeper Client Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Client Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n+                                \"name\": \"ZooKeeper Client Timeout\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"ZooKeeper Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ZooKeeper Connection Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n-                                        \"displayName\": \"Time Window\",\n-                                        \"value\": \"time-window\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"min-age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age a file must be in order to be considered; any files younger than this will be ignored.\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n-                                \"required\": true,\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kerberos-principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"recursive-search\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When 'true', will include list of files from sub-folders. Otherwise, will return only files that are within the folder defined by the 'Folder ID' property.\",\n-                                \"displayName\": \"Search Recursively\",\n+                            \"put-solr-record-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recursive-search\",\n+                                \"name\": \"put-solr-record-record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.box.FetchBoxFile\",\n-                            \"org.apache.nifi.processors.box.PutBoxFile\"\n-                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"The original FlowFile\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed for any reason other than Solr being unreachable\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed because Solr is unreachable\",\n+                                \"name\": \"connection_failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"box\",\n-                            \"storage\"\n+                            \"Apache\",\n+                            \"Put\",\n+                            \"Record\",\n+                            \"Send\",\n+                            \"Solr\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.box.ListBoxFile\",\n-                        \"typeDescription\": \"Lists files in a Box folder. Each listed file may result in one FlowFile, the metadata being written as FlowFile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single FlowFile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"box.id\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"box.size\"\n-                            },\n-                            {\n-                                \"description\": \"The last modified time of the file\",\n-                                \"name\": \"box.timestamp\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.solr.PutSolrRecord\",\n+                        \"typeDescription\": \"Indexes the Records from a FlowFile into Solr\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-solr-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"The SOLR processors are deprecated and will be removed in NiFi 2.x.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These parameters will be passed to Solr on the request\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A Solr request parameter name\",\n+                                \"value\": \"A Solr request parameter value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"box-client-service\": {\n-                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n-                                \"displayName\": \"Box Client Service\",\n+                            \"Collection\": {\n+                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n+                                \"displayName\": \"Collection\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Collection\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use in order to write Solr documents to FlowFiles. Must be set if \\\"Records\\\" is used as return type.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Record Writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"box-client-service\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"box-folder-id\": {\n-                                \"description\": \"The ID of the folder where the file is uploaded. Please see Additional Details to obtain Folder ID.\",\n-                                \"displayName\": \"Folder ID\",\n+                            \"Solr Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"box-folder-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Solr Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"chunked-upload-threshold\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks. Chunked upload is allowed for files larger than 20 MB. It is recommended to use chunked upload for files exceeding 50 MB.\",\n-                                \"displayName\": \"Chunked Upload Threshold\",\n+                            \"Solr Location\": {\n+                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n+                                \"displayName\": \"Solr Location\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Solr Location\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Maximum Connections\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n+                                \"displayName\": \"Solr Maximum Connections\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-threshold\",\n-                                \"required\": false,\n+                                \"name\": \"Solr Maximum Connections\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"Solr Maximum Connections Per Host\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n+                                \"displayName\": \"Solr Maximum Connections Per Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Solr Maximum Connections Per Host\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Socket Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Socket Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Solr Socket Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Handle file conflict as failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Ignore conflict, do not change the original file.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"A SolrCloud instance.\",\n+                                        \"displayName\": \"Cloud\",\n+                                        \"value\": \"Cloud\"\n                                     },\n                                     {\n-                                        \"description\": \"Replace existing file in case of conflict.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"A stand-alone Solr instance.\",\n+                                        \"displayName\": \"Standard\",\n+                                        \"value\": \"Standard\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Box folder.\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"Standard\",\n+                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n+                                \"displayName\": \"Solr Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"name\": \"Solr Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"create-folder\": {\n+                            \"Username\": {\n+                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ZooKeeper Client Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Client Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ZooKeeper Client Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ZooKeeper Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ZooKeeper Connection Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"amount_documents_to_return\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Entire results\",\n+                                        \"value\": \"return_all_results\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Only top results\",\n+                                        \"value\": \"return_only_top_results\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                \"defaultValue\": \"return_only_top_results\",\n+                                \"description\": \"Total amount of Solr documents to be returned. If this property is set to \\\"Only top results\\\", only single requests will be sent to Solr and the results will be written into single FlowFiles. If it is set to \\\"Entire results\\\", all results matching to the query are retrieved via multiple Solr requests and returned in multiple FlowFiles. For both options, the number of Solr documents to be returned in a FlowFile depends on the configuration of the \\\"Rows\\\" property\",\n+                                \"displayName\": \"Total amount of returned results\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amount_documents_to_return\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kerberos-principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"return_type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Subfolder Name\",\n-                                        \"propertyName\": \"subfolder-name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"XML\",\n+                                        \"value\": \"XML\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Records\",\n+                                        \"value\": \"Records\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether to check if the subfolder exists and to automatically create it if it does not. Permission to list folders is required. \",\n-                                \"displayName\": \"Create Subfolder\",\n+                                \"defaultValue\": \"XML\",\n+                                \"description\": \"Output format of Solr results. Write Solr documents to FlowFiles as XML or using a Record Writer\",\n+                                \"displayName\": \"Return Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"create-folder\",\n+                                \"name\": \"return_type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The name of the file to upload to the specified Box folder.\",\n-                                \"displayName\": \"Filename\",\n+                            \"solr_param_field_list\": {\n+                                \"description\": \"Comma separated list of fields to be included into results, e. g. field1,field2\",\n+                                \"displayName\": \"Field List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"name\": \"solr_param_field_list\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"solr_param_query\": {\n+                                \"defaultValue\": \"*:*\",\n+                                \"description\": \"Solr Query, e. g. field:value\",\n+                                \"displayName\": \"Solr Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"solr_param_query\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"subfolder-name\": {\n-                                \"description\": \"The name (path) of the subfolder where files are uploaded. The subfolder name is relative to the folder specified by 'Folder ID'. Example: subFolder, subFolder1/subfolder2\",\n-                                \"displayName\": \"Subfolder Name\",\n+                            \"solr_param_request_handler\": {\n+                                \"defaultValue\": \"/select\",\n+                                \"description\": \"Define a request handler here, e. g. /query\",\n+                                \"displayName\": \"Request Handler\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"subfolder-name\",\n+                                \"name\": \"solr_param_request_handler\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"solr_param_rows\": {\n+                                \"description\": \"Number of results to be returned for a single request\",\n+                                \"displayName\": \"Rows\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"solr_param_rows\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"solr_param_sort\": {\n+                                \"description\": \"Comma separated sort clauses to define the sorting of results, e. g. field1 asc, field2 desc\",\n+                                \"displayName\": \"Sorting of result list\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"solr_param_sort\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"solr_param_start\": {\n+                                \"description\": \"Offset of result set\",\n+                                \"displayName\": \"Start of results\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"solr_param_start\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the Box object.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.box.FetchBoxFile\",\n-                            \"org.apache.nifi.processors.box.ListBoxFile\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to Box are transferred to this relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Stats about Solr index\",\n+                                \"name\": \"stats\"\n                             },\n                             {\n-                                \"description\": \"Files that could not be written to Box for some reason are transferred to this relationship.\",\n+                                \"description\": \"Results of Solr queries\",\n+                                \"name\": \"results\"\n+                            },\n+                            {\n+                                \"description\": \"Results of faceted search\",\n+                                \"name\": \"facets\"\n+                            },\n+                            {\n+                                \"description\": \"Failure relationship\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Original flowfile\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"box\",\n-                            \"put\",\n-                            \"storage\"\n+                            \"Apache\",\n+                            \"Get\",\n+                            \"Query\",\n+                            \"Records\",\n+                            \"Solr\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.box.PutBoxFile\",\n-                        \"typeDescription\": \"Puts content to a Box folder.\",\n+                        \"type\": \"org.apache.nifi.processors.solr.QuerySolr\",\n+                        \"typeDescription\": \"Queries Solr and outputs the results as a FlowFile in the format of XML or using a Record Writer\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"box.id\"\n+                                \"description\": \"Solr connect string\",\n+                                \"name\": \"solr.connect\"\n                             },\n                             {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"Solr collection\",\n+                                \"name\": \"solr.collection\"\n                             },\n                             {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n+                                \"description\": \"Query string sent to Solr\",\n+                                \"name\": \"solr.query\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"box.size\"\n+                                \"description\": \"Cursor mark can be used for scrolling Solr\",\n+                                \"name\": \"solr.cursor.mark\"\n                             },\n                             {\n-                                \"description\": \"The last modified time of the file\",\n-                                \"name\": \"box.timestamp\"\n+                                \"description\": \"Status code of Solr request. A status code of 0 indicates that the request was successfully processed\",\n+                                \"name\": \"solr.status.code\"\n                             },\n                             {\n-                                \"description\": \"The error code returned by Box\",\n-                                \"name\": \"error.code\"\n+                                \"description\": \"The elapsed time to process the query (in ms)\",\n+                                \"name\": \"solr.query.time\"\n                             },\n                             {\n-                                \"description\": \"The error message returned by Box\",\n-                                \"name\": \"error.message\"\n+                                \"description\": \"Solr start parameter (result offset) for the query\",\n+                                \"name\": \"solr.start\"\n+                            },\n+                            {\n+                                \"description\": \"Number of Solr documents to be returned for the query\",\n+                                \"name\": \"solr.rows\"\n+                            },\n+                            {\n+                                \"description\": \"Number of Solr documents that match the query\",\n+                                \"name\": \"solr.number.results\"\n+                            },\n+                            {\n+                                \"description\": \"The mime type of the data format\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The Java exception class raised when the processor fails\",\n+                                \"name\": \"querysolr.exeption.class\"\n+                            },\n+                            {\n+                                \"description\": \"The Java exception message raised when the processor fails\",\n+                                \"name\": \"querysolr.exeption.message\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-kerberos-user-service-nar\",\n+            \"artifact\": \"nifi-asana-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-metrics-reporting-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"artifact\": \"nifi-metrics-reporting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Allows user to define a Keytab and principal that can then be used by other components.\",\n-                                \"requiredPermission\": \"access keytab\"\n-                            }\n-                        ],\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal.\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The charset used by the graphite server\",\n+                                \"displayName\": \"Charset\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"charset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"host\": {\n+                                \"description\": \"The hostname of the carbon listener\",\n+                                \"displayName\": \"Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n+                                \"name\": \"host\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"metric name prefix\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"A prefix that will be used for all metric names sent by reporters provided by this service.\",\n+                                \"displayName\": \"Metric Name Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n+                                \"name\": \"metric name prefix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"port\": {\n+                                \"description\": \"The port on which carbon listens\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                \"version\": \"1.27.0\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"artifact\": \"nifi-metrics-reporter-service-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                \"type\": \"org.apache.nifi.metrics.reporting.reporter.service.MetricReporterService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Authentication\",\n-                            \"Credentials\",\n-                            \"Kerberos\",\n-                            \"Keytab\",\n-                            \"Principal\",\n-                            \"Security\"\n+                            \"graphite\",\n+                            \"metrics\",\n+                            \"reporting\"\n                         ],\n-                        \"type\": \"org.apache.nifi.kerberos.KerberosKeytabUserService\",\n-                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and keytab that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it (as opposed to specifying the principal and keytab directly in the processor) an administrator is able to choose which users are allowed to use which keytabs and principals. This provides a more robust security model for multi-tenant use cases.\",\n+                        \"type\": \"org.apache.nifi.metrics.reporting.reporter.service.GraphiteMetricReporterService\",\n+                        \"typeDescription\": \"A controller service that provides metric reporters for graphite. Used by MetricsReportingTask.\",\n                         \"version\": \"1.27.0\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"artifact\": \"nifi-metrics-reporting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"metric reporter service\": {\n+                                \"description\": \"The service that provides a reporter for the gathered metrics\",\n+                                \"displayName\": \"Metric Reporter Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n+                                \"name\": \"metric reporter service\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-metrics-reporter-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.metrics.reporting.reporter.service.MetricReporterService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"process group id\": {\n+                                \"description\": \"The id of the process group to report. If not specified, metrics of the root process groupare reported.\",\n+                                \"displayName\": \"Process Group ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": true,\n+                                \"name\": \"process group id\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Authentication\",\n-                            \"Credentials\",\n-                            \"Kerberos\",\n-                            \"Password\",\n-                            \"Principal\",\n-                            \"Security\"\n+                            \"metrics\",\n+                            \"reporting\"\n                         ],\n-                        \"type\": \"org.apache.nifi.kerberos.KerberosPasswordUserService\",\n-                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and password that other components are able to use in order to perform authentication using Kerberos.\",\n+                        \"type\": \"org.apache.nifi.metrics.reporting.task.MetricsReportingTask\",\n+                        \"typeDescription\": \"This reporting task reports a set of metrics regarding the JVM and the NiFi instanceto a reporter. The reporter is provided by a MetricReporterService. It can be optionally used for a specificprocess group if a property with the group id is provided.\",\n                         \"version\": \"1.27.0\"\n-                    },\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-scripting-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n                         \"explicitRestrictions\": [\n                             {\n-                                \"explanation\": \"Allows user to define a ticket cache and principal that can then be used by other components.\",\n-                                \"requiredPermission\": \"access ticket cache\"\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Script Engine\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Ticket Cache File\": {\n-                                \"description\": \"Kerberos ticket cache associated with the principal.\",\n-                                \"displayName\": \"Kerberos Ticket Cache File\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Ticket Cache File\",\n-                                \"required\": true,\n+                                \"name\": \"Script File\",\n+                                \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                \"version\": \"1.27.0\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n                         \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Authentication\",\n-                            \"Cache\",\n-                            \"Credentials\",\n-                            \"Kerberos\",\n-                            \"Principal\",\n-                            \"Security\",\n-                            \"Ticket\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lookup\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"record\",\n+                            \"ruby\",\n+                            \"script\"\n                         ],\n-                        \"type\": \"org.apache.nifi.kerberos.KerberosTicketCacheUserService\",\n-                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and ticket cache that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it an administrator is able to choose which users are allowed to use which ticket caches and principals. This provides a more robust security model for multi-tenant use cases.\",\n+                        \"type\": \"org.apache.nifi.lookup.script.ScriptedLookupService\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted LookupService instance in order to enrich records from an incoming flow file. Please note, that due to a bug in Jython that remains unresolved, it is not possible to use Jython to write a script for this service in Python.\",\n                         \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jolt-record-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-jolt-record-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"jolt-record-custom-class\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Transformation DSL\",\n-                                        \"propertyName\": \"jolt-record-transform\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fully Qualified Class Name for Custom Transformation\",\n-                                \"displayName\": \"Custom Transformation Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"jolt-record-custom-class\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"jolt-record-custom-modules\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Transformation DSL\",\n-                                        \"propertyName\": \"jolt-record-transform\"\n-                                    }\n-                                ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules containing custom transformations (that are not included on NiFi's classpath).\",\n-                                \"displayName\": \"Custom Module Directory\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"jolt-record-custom-modules\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"jolt-record-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jolt-record-record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"jolt-record-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jolt-record-record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"jolt-record-spec\": {\n-                                \"description\": \"Jolt Specification for transform of record data. The value for this property may be the text of a JOLT specification or the path to a file containing a JOLT specification. This value is ignored if the Jolt Sort Transformation is selected.\",\n-                                \"displayName\": \"Jolt Specification\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"jolt-record-spec\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"jolt-record-transform\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Change the cardinality of input elements to create the output.\",\n-                                        \"displayName\": \"Cardinality\",\n-                                        \"value\": \"jolt-transform-card\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Execute list of Jolt transformations.\",\n-                                        \"displayName\": \"Chain\",\n-                                        \"value\": \"jolt-transform-chain\"\n-                                    },\n-                                    {\n-                                        \"description\": \" Apply default values to the output.\",\n-                                        \"displayName\": \"Default\",\n-                                        \"value\": \"jolt-transform-default\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Writes when field name is missing or value is null\",\n-                                        \"displayName\": \"Modify - Default\",\n-                                        \"value\": \"jolt-transform-modify-default\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Writes when key is missing\",\n-                                        \"displayName\": \"Modify - Define\",\n-                                        \"value\": \"jolt-transform-modify-define\"\n-                                    },\n-                                    {\n-                                        \"description\": \" Always overwrite value\",\n-                                        \"displayName\": \"Modify - Overwrite\",\n-                                        \"value\": \"jolt-transform-modify-overwrite\"\n-                                    },\n-                                    {\n-                                        \"description\": \" Remove values from input data to create the output.\",\n-                                        \"displayName\": \"Remove\",\n-                                        \"value\": \"jolt-transform-remove\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Shift input data to create the output.\",\n-                                        \"displayName\": \"Shift\",\n-                                        \"value\": \"jolt-transform-shift\"\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n                                     },\n                                     {\n-                                        \"description\": \"Sort input field name values alphabetically. Any specification set is ignored.\",\n-                                        \"displayName\": \"Sort\",\n-                                        \"value\": \"jolt-transform-sort\"\n+                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     },\n                                     {\n-                                        \"description\": \"Custom Transformation. Requires Custom Transformation Class Name\",\n-                                        \"displayName\": \"Custom\",\n-                                        \"value\": \"jolt-transform-custom\"\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"jolt-transform-chain\",\n-                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n-                                \"displayName\": \"Jolt Transformation DSL\",\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jolt-record-transform\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"jolt-record-transform-cache-size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Compiling a Jolt Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n-                                \"displayName\": \"Transform Cache Size\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jolt-record-transform-cache-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile records cannot be parsed), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.27.0\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFile that was transformed. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cardinality\",\n-                            \"chainr\",\n-                            \"defaultr\",\n-                            \"jolt\",\n-                            \"record\",\n-                            \"removr\",\n-                            \"shiftr\",\n-                            \"sort\",\n-                            \"transform\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lookup\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"ruby\",\n+                            \"script\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.jolt.record.JoltTransformRecord\",\n-                        \"typeDescription\": \"Applies a JOLT specification to each record in the FlowFile payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of records in an outgoing FlowFile\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type that the configured Record Writer indicates is appropriate\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-provenance-repository-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hadoop-dbcp-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        \"type\": \"org.apache.nifi.lookup.script.SimpleScriptedLookupService\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted LookupService instance in order to enrich records from an incoming flow file. The script is expected to return an optional string value rather than an arbitrary object (record, e.g.). Also the scripted lookup service should implement StringLookupService, otherwise the getValueType() method must be implemented even though it will be ignored, as SimpleScriptedLookupService returns String as the value type on the script's behalf. Please note that due to a bug in Jython that remains unresolved, it is not possible to use Jython to write a script for this service in Python.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-dbcp-service-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"These properties will be set on the Hadoop configuration after loading any provided configuration files.\",\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Hadoop configuration property.\",\n-                                \"value\": \"The value of the given Hadoop configuration property.\"\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n                             }\n                         ],\n                         \"explicitRestrictions\": [\n                             {\n-                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Database Connection URL\": {\n-                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n-                                \"displayName\": \"Database Connection URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database Connection URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Database Driver Class Name\": {\n-                                \"description\": \"Database driver class name\",\n-                                \"displayName\": \"Database Driver Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database Driver Class Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Database User\": {\n-                                \"description\": \"Database user name\",\n-                                \"displayName\": \"Database User\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database User\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n+                                    \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Total Connections\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of active connections that can be allocated from this pool at the same time,  or negative for no limit.\",\n-                                \"displayName\": \"Max Total Connections\",\n+                            \"Script Engine\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python DEPRECATED\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Max Total Connections\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"500 millis\",\n-                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or -1 to wait indefinitely. \",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Max Wait Time\",\n-                                \"required\": true,\n+                                \"name\": \"Script File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"The password for the database user\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"record\",\n+                            \"recordFactory\",\n+                            \"ruby\",\n+                            \"script\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.script.ScriptedReader\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted RecordReaderFactory instance in order to read/parse/generate records from an incoming flow file.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Validation-query\": {\n-                                \"description\": \"Validation query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. Note!! Using validation might have some performance penalty.\",\n-                                \"displayName\": \"Validation query\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Validation-query\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"database-driver-locations\": {\n-                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies. For example '/var/tmp/phoenix-client.jar'. NOTE: It is required that the resources specified by this property provide the classes from hadoop-common, such as Configuration and UserGroupInformation.\",\n-                                \"displayName\": \"Database Driver Location(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"database-driver-locations\",\n-                                \"required\": true,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n                                         \"DIRECTORY\",\n-                                        \"URL\"\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"dbcp-max-conn-lifetime\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The maximum lifetime of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n-                                \"displayName\": \"Max Connection Lifetime\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-max-conn-lifetime\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbcp-max-idle-conns\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of connections that can remain idle in the pool without extra ones being released. Set to any negative value to allow unlimited idle connections.\",\n-                                \"displayName\": \"Max Idle Connections\",\n+                            \"Script Engine\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python DEPRECATED\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-max-idle-conns\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Engine\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbcp-min-evictable-idle-time\": {\n-                                \"defaultValue\": \"30 mins\",\n-                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction.\",\n-                                \"displayName\": \"Minimum Evictable Idle Time\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-min-evictable-idle-time\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n-                            },\n-                            \"dbcp-min-idle-conns\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The minimum number of connections that can remain idle in the pool without extra ones being created. Set to or zero to allow no idle connections.\",\n-                                \"displayName\": \"Minimum Idle Connections\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"record\",\n+                            \"ruby\",\n+                            \"script\",\n+                            \"writer\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.script.ScriptedRecordSetWriter\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted RecordSetWriterFactory instance in order to write records to an outgoing flow file.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-min-idle-conns\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"dbcp-soft-min-evictable-idle-time\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle connection evictor, with the extra condition that at least a minimum number of idle connections remain in the pool. When the not-soft version of this option is set to a positive value, it is examined first by the idle connection evictor: when idle connections are visited by the evictor, idle time is first compared against it (without considering the number of idle connections in the pool) and then against this soft option, including the minimum idle connections constraint.\",\n-                                \"displayName\": \"Soft Minimum Evictable Idle Time\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-soft-min-evictable-idle-time\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbcp-time-between-eviction-runs\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The time period to sleep between runs of the idle connection evictor thread. When non-positive, no idle connection evictor thread will be run.\",\n-                                \"displayName\": \"Time Between Eviction Runs\",\n+                            \"Script Engine\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python DEPRECATED\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-time-between-eviction-runs\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Engine\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hadoop-config-resources\": {\n-                                \"description\": \"A file, or comma separated list of files, which contain the Hadoop configuration (core-site.xml, etc.). Without this, Hadoop will search the classpath, or will revert to a default configuration. Note that to enable authentication with Kerberos, the appropriate properties must be set in the configuration files.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hadoop-config-resources\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n                         \"restricted\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"hadoop\",\n-                            \"jdbc\",\n-                            \"pooling\",\n-                            \"store\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"record\",\n+                            \"record sink\",\n+                            \"ruby\",\n+                            \"script\"\n                         ],\n-                        \"type\": \"org.apache.nifi.dbcp.HadoopDBCPConnectionPool\",\n-                        \"typeDescription\": \"Provides a Database Connection Pooling Service for Hadoop related JDBC services. This service requires that the Database Driver Location(s) contains some version of a hadoop-common JAR, or a shaded JAR that shades hadoop-common.\",\n+                        \"type\": \"org.apache.nifi.record.sink.script.ScriptedRecordSink\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted RecordSinkService instance in order to transmit records to the desired target. The script must set a variable 'recordSink' to an implementation of RecordSinkService.\",\n                         \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body. For SCROLL type queries, these parameters are only used in the initial (first page) query as the Elasticsearch Scroll API does not support the same query parameters for subsequent pages of data.\",\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-aggregations\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n                                     },\n                                     {\n-                                        \"description\": \"Aggregation Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Aggregation output.\",\n-                                \"displayName\": \"Aggregation Results Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-aggregations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-format-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n+                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     },\n                                     {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python DEPRECATED\",\n+                                        \"value\": \"python\"\n                                     },\n                                     {\n-                                        \"description\": \"Hit Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Hits output.\",\n-                                \"displayName\": \"Search Results Format\",\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-hits\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n-                                \"displayName\": \"Output No Hits\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-output-no-hits\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n-                            },\n-                            \"el-rest-pagination-keep-alive\": {\n-                                \"defaultValue\": \"10 mins\",\n-                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n-                                \"displayName\": \"Pagination Keep Alive\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.rules.engine.RulesEngineService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"ruby\",\n+                            \"rules\",\n+                            \"rules engine\",\n+                            \"script\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.rules.engine.script.ScriptedRulesEngine\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted RulesEngineService for custom firing of rules depending on the supplied facts. The script must set a variable 'rulesEngine' to an implementation of RulesEngineService.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-keep-alive\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-pagination-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n-                                        \"displayName\": \"SCROLL\",\n-                                        \"value\": \"pagination-scroll\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n-                                        \"displayName\": \"SEARCH_AFTER\",\n-                                        \"value\": \"pagination-search_after\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results.\",\n-                                        \"displayName\": \"POINT_IN_TIME\",\n-                                        \"value\": \"pagination-pit\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"pagination-scroll\",\n-                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n-                                \"displayName\": \"Pagination Type\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-type\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-aggregations\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n-                                \"displayName\": \"Aggregation Results Split\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-aggregations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-split-up-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python DEPRECATED\",\n+                                        \"value\": \"python\"\n                                     },\n                                     {\n-                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n-                                        \"displayName\": \"PER_QUERY\",\n-                                        \"value\": \"splitUp-query\"\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n-                                \"displayName\": \"Search Results Split\",\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-hits\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-additional-filters\": {\n-                                \"description\": \"One or more query filters in JSON syntax, not Lucene syntax. Ex: [{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}, {\\\"match\\\":{\\\"anotherfield\\\":\\\"anothervalue\\\"}}]. These filters wil be used as part of a Bool query's filter.\",\n-                                \"displayName\": \"Additional Filters\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-additional-filters\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-aggs\": {\n-                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n-                                \"displayName\": \"Aggregations\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-aggs\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-fields\": {\n-                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n-                                \"displayName\": \"Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-fields\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-script-fields\": {\n-                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n-                                \"displayName\": \"Script Fields\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-script-fields\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n-                            },\n-                            \"es-rest-query-sort\": {\n-                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n-                                \"displayName\": \"Sort\",\n-                                \"dynamic\": false,\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.rules.PropertyContextActionHandler\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"action\",\n+                            \"action handler\",\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"ruby\",\n+                            \"rules\",\n+                            \"rules engine\",\n+                            \"script\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.rules.handlers.script.ScriptedActionHandler\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted ActionHandler for custom firing of rules depending on the supplied facts. The script must set a variable 'actionHandler' to an implementation of ActionHandler.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-sort\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-range-field\": {\n-                                \"description\": \"Field to be tracked as part of an Elasticsearch Range query using a \\\"gt\\\" bound match. This field must exist within the Elasticsearch document for it to be retrieved.\",\n-                                \"displayName\": \"Range Query Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-range-field\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-range-format\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Initial Value\",\n-                                        \"propertyName\": \"es-rest-range-initial-value\"\n-                                    }\n-                                ],\n-                                \"description\": \"If the \\\"Range Query Field\\\" is a Date field, convert the \\\"Initial Value\\\" to a date with this format. If not specified, Elasticsearch will use the date format provided by the \\\"Range Query Field\\\"'s mapping. For valid syntax, see https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html\",\n-                                \"displayName\": \"Initial Value Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-range-format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-range-initial-value\": {\n-                                \"description\": \"The initial value to use for the query if the processor has not run previously. If the processor has run previously and stored a value in its state, this property will be ignored. If no value is provided, and the processor has not previously run, no Range query bounds will be used, i.e. all documents will be retrieved in the specified \\\"Sort Order\\\".\",\n-                                \"displayName\": \"Initial Value\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-range-initial-value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-range-time-zone\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Initial Value\",\n-                                        \"propertyName\": \"es-rest-range-initial-value\"\n-                                    }\n-                                ],\n-                                \"description\": \"If the \\\"Range Query Field\\\" is a Date field, convert the \\\"Initial Value\\\" to UTC with this time zone. Valid values are ISO 8601 UTC offsets, such as \\\"+01:00\\\" or \\\"-08:00\\\", and IANA time zone IDs, such as \\\"Europe/London\\\".\",\n-                                \"displayName\": \"Initial Value Date Time Zone\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-range-time-zone\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-size\": {\n-                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n-                                \"displayName\": \"Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-size\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-sort-order\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"asc\",\n-                                        \"value\": \"asc\"\n+                                        \"description\": \"Clojure 1.8.0 [Clojure UNKNOWN]\",\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"desc\",\n-                                        \"value\": \"desc\"\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"lua 5.2 [Luaj Luaj-jse 3.0.1]\",\n+                                        \"displayName\": \"lua DEPRECATED\",\n+                                        \"value\": \"lua\"\n+                                    },\n+                                    {\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python DEPRECATED\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"asc\",\n-                                \"description\": \"The order in which to sort the \\\"Range Query Field\\\". A \\\"sort\\\" clause for the \\\"Range Query Field\\\" field will be prepended to any provided \\\"Sort\\\" clauses. If a \\\"sort\\\" clause already exists for the \\\"Range Query Field\\\" field, it will not be updated.\",\n-                                \"displayName\": \"Sort Order\",\n+                                \"defaultValue\": \"Clojure\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-sort-order\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\",\n-                            \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\"\n+                            \"org.apache.nifi.processors.script.InvokeScriptedProcessor\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"stateful\": {\n-                            \"description\": \"The pagination state (scrollId, searchAfter, pitId, hitCount, pageCount, pageExpirationTimestamp, trackingRangeValue) is retained in between invocations of this processor until the Scroll/PiT has expired (when the current time is later than the last query execution plus the Pagination Keep Alive interval).\",\n+                            \"description\": \"Scripts can store and retrieve state using the State Management APIs. Consult the State Manager section of the Developer's Guide for more details.\",\n                             \"scopes\": [\n-                                \"CLUSTER\"\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n                             ]\n                         },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n+                                \"description\": \"FlowFiles that were successfully processed\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n+                                \"description\": \"FlowFiles that failed to be processed\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"json\",\n-                            \"page\",\n-                            \"query\",\n-                            \"scroll\",\n-                            \"search\"\n+                            \"clojure\",\n+                            \"execute\",\n+                            \"groovy\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"ruby\",\n+                            \"script\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.ConsumeElasticsearch\",\n-                        \"typeDescription\": \"A processor that repeatedly runs a paginated query against a field using a Range query to consume new Documents from an Elasticsearch index/query. The processor will retrieve multiple pages of results until either no more results are available or the Pagination Keep Alive expiration is reached, after which the Range query will automatically update the field constraint based on the last retrieved Document value.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"application/json\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of the page (request), starting from 1, in which the results were returned that are in the output flowfile\",\n-                                \"name\": \"page.number\"\n-                            },\n-                            {\n-                                \"description\": \"The number of hits that are in the output flowfile\",\n-                                \"name\": \"hit.count\"\n-                            },\n-                            {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n-                                \"name\": \"elasticsearch.query.error\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.script.ExecuteScript\",\n+                        \"typeDescription\": \"Experimental - Executes a script given the flow file and a process session.  The script is responsible for handling the incoming flow file (transfer to SUCCESS or remove, e.g.) as well as any flow files created by the script. If the handling is incomplete or incorrect, the session will be rolled back. Experimental: Impact of sustained usage not yet verified.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -20449,373 +21446,359 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"full\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query-clause\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query Clause\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query-clause\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-definition-style\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n                                     },\n                                     {\n-                                        \"description\": \"Build the Query from separate JSON objects.\",\n-                                        \"displayName\": \"BUILD_QUERY\",\n-                                        \"value\": \"build\"\n+                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python DEPRECATED\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"full\",\n-                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n-                                \"displayName\": \"Query Definition Style\",\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-query-definition-style\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent to this relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.script.ExecuteScript\"\n                         ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Scripts can store and retrieve state using the State Management APIs. Consult the State Manager section of the Developer's Guide for more details.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"delete\",\n-                            \"elastic\",\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"query\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"ruby\",\n+                            \"script\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.DeleteByQueryElasticsearch\",\n-                        \"typeDescription\": \"Delete from an Elasticsearch index using a query. The query can be loaded from a flowfile body or from the Query parameter.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The amount of time that it took to complete the delete operation in ms.\",\n-                                \"name\": \"elasticsearch.delete.took\"\n-                            },\n-                            {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error running the delete.\",\n-                                \"name\": \"elasticsearch.delete.error\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.script.InvokeScriptedProcessor\",\n+                        \"typeDescription\": \"Experimental - Invokes a script engine for a Processor defined in the given script. The script must define a valid class that implements the Processor interface, and it must set a variable 'processor' to an instance of the class. Processor methods such as onTrigger() will be delegated to the scripted Processor instance. Also any Relationships or PropertyDescriptors defined by the scripted processor will be added to the configuration dialog. The scripted processor can implement public void setLogger(ComponentLog logger) to get access to the parent logger, as well as public void onScheduled(ProcessContext context) and public void onStopped(ProcessContext context) methods to be invoked when the parent InvokeScriptedProcessor is scheduled or stopped, respectively.  NOTE: The script will be loaded when the processor is populated with property values, see the Restrictions section for more security implications.  Experimental: Impact of sustained usage not yet verified.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Record Reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"get-es-attribute-name\": {\n-                                \"defaultValue\": \"elasticsearch.doc\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"flowfile-attribute\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Destination\",\n-                                        \"propertyName\": \"get-es-destination\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of the FlowFile attribute to use for the retrieved document output.\",\n-                                \"displayName\": \"Attribute Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"get-es-attribute-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"get-es-destination\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Output the retrieved document as the FlowFile content.\",\n-                                        \"displayName\": \"FlowFile Content\",\n-                                        \"value\": \"flowfile-content\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n-                                        \"description\": \"Output the retrieved document as a FlowFile attribute specified by the Attribute Name.\",\n-                                        \"displayName\": \"FlowFile Attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ECMAScript\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lua\",\n+                                        \"value\": \"lua\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ruby\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the retrieved document is written to the FlowFile content or a FlowFile attribute.\",\n-                                \"displayName\": \"Destination\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"The Language to use for the script\",\n+                                \"displayName\": \"Script Language\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"get-es-destination\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"get-es-id\": {\n-                                \"description\": \"The _id of the document to retrieve.\",\n-                                \"displayName\": \"Document Id\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"get-es-id\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\"\n+                            \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedValidateRecord\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"Fetched documents are routed to this relationship.\",\n-                                \"name\": \"document\"\n+                                \"description\": \"Matching records of the original FlowFile will be routed to this relationship. If there are no matching records, no FlowFile will be routed here.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the specified document does not exist in the Elasticsearch cluster.\",\n-                                \"name\": \"not_found\"\n+                                \"description\": \"In case of any issue during processing the incoming FlowFile, the incoming FlowFile will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"After successful procession, the incoming FlowFile will be transferred to this relationship. This happens regardless the number of filtered or remaining records.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"index\",\n-                            \"json\",\n-                            \"put\",\n-                            \"record\"\n+                            \"filter\",\n+                            \"groovy\",\n+                            \"jython\",\n+                            \"python\",\n+                            \"record\",\n+                            \"script\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.GetElasticsearch\",\n-                        \"typeDescription\": \"Elasticsearch get processor that uses the official Elastic REST client libraries to fetch a single document from Elasticsearch by _id. Note that the full body of the document will be read into memory before being written to a FlowFile for transfer.\",\n+                        \"type\": \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n+                        \"typeDescription\": \"This processor provides the ability to filter records out from FlowFiles using the user-provided script. Every record will be evaluated by the script which must return with a boolean value. Records with \\\"true\\\" result will be routed to the \\\"matching\\\" relationship in a batch. Other records will be filtered out.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename attribute is set to the document identifier\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch index containing the document\",\n-                                \"name\": \"elasticsearch.index\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The Elasticsearch document type\",\n-                                \"name\": \"elasticsearch.type\"\n+                                \"description\": \"The number of records within the flow file.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error fetching the document.\",\n-                                \"name\": \"elasticsearch.get.error\"\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"EVENT_DRIVEN\": 0,\n@@ -20824,429 +21807,221 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Record Reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-format-aggregations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Aggregation Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Aggregation output.\",\n-                                \"displayName\": \"Aggregation Results Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-aggregations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"el-rest-format-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Hit Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Hits output.\",\n-                                \"displayName\": \"Search Results Format\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-hits\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n-                                \"displayName\": \"Output No Hits\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-output-no-hits\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"full\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query-clause\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query Clause\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query-clause\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query-definition-style\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n+                                        \"displayName\": \"ECMAScript\",\n+                                        \"value\": \"ECMAScript\"\n                                     },\n                                     {\n-                                        \"description\": \"Build the Query from separate JSON objects.\",\n-                                        \"displayName\": \"BUILD_QUERY\",\n-                                        \"value\": \"build\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"full\",\n-                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n-                                \"displayName\": \"Query Definition Style\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-query-definition-style\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-split-up-aggregations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n-                                \"displayName\": \"Aggregation Results Split\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-aggregations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-split-up-hits\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lua\",\n+                                        \"value\": \"lua\"\n+                                    },\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ruby\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit.\",\n-                                \"displayName\": \"Search Results Split\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"The Language to use for the script\",\n+                                \"displayName\": \"Script Language\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-hits\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-aggs\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n-                                \"displayName\": \"Aggregations\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-aggs\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-fields\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n-                                \"displayName\": \"Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-fields\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-script-fields\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n-                                \"displayName\": \"Script Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-script-fields\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-sort\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n-                                \"displayName\": \"Sort\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-sort\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-size\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n-                                \"displayName\": \"Size\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n+                            \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedValidateRecord\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n+                                \"description\": \"FlowFiles that are successfully partitioned will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"description\": \"If a FlowFile cannot be partitioned from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"All original flowfiles that don't cause an error to occur go to this relationship.\",\n+                                \"description\": \"Once all records in an incoming FlowFile have been partitioned, the original FlowFile is routed to this relationship.\",\n                                 \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"get\",\n-                            \"json\",\n-                            \"query\",\n-                            \"read\"\n+                            \"groovy\",\n+                            \"group\",\n+                            \"jython\",\n+                            \"organize\",\n+                            \"partition\",\n+                            \"python\",\n+                            \"record\",\n+                            \"script\",\n+                            \"segment\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\",\n-                        \"typeDescription\": \"A processor that allows the user to run a query (with aggregations) written with the Elasticsearch JSON DSL. It does not automatically paginate queries for the user. If an incoming relationship is added to this processor, it will use the flowfile's content for the query. Care should be taken on the size of the query because the entire response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n+                        \"type\": \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n+                        \"typeDescription\": \"Receives Record-oriented data (i.e., data that can be read by the configured Record Reader) and evaluates the user provided script against each record in the incoming flow file. Each record is then grouped with other records sharing the same partition and a FlowFile is created for each groups of records. Two records shares the same partition if the evaluation of the script results the same return value for both. Those will be considered as part of the same partition.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"application/json\",\n+                                \"description\": \"The partition of the outgoing flow file. If the script indicates that the partition has a null value, the attribute will be set to the literal string \\\"<null partition>\\\" (without quotes). Otherwise, the attribute is set to the String representation of whatever value is returned by the script.\",\n+                                \"name\": \"partition\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.name\"\n+                                \"description\": \"The number of records within the flow file.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.number\"\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n                             },\n                             {\n-                                \"description\": \"The number of hits that are in the output flowfile\",\n-                                \"name\": \"hit.count\"\n+                                \"description\": \"A one-up number that indicates the ordering of the partitioned FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n-                                \"name\": \"elasticsearch.query.error\"\n+                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"EVENT_DRIVEN\": 0,\n@@ -21255,11688 +22030,7187 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body. For SCROLL type queries, these parameters are only used in the initial (first page) query as the Elasticsearch Scroll API does not support the same query parameters for subsequent pages of data.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Record Reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-format-aggregations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Aggregation Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Aggregation output.\",\n-                                \"displayName\": \"Aggregation Results Format\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-aggregations\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"el-rest-format-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Hit Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Hits output.\",\n-                                \"displayName\": \"Search Results Format\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-hits\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n-                                \"displayName\": \"Output No Hits\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-output-no-hits\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-pagination-keep-alive\": {\n-                                \"defaultValue\": \"10 mins\",\n-                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n-                                \"displayName\": \"Pagination Keep Alive\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-keep-alive\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-pagination-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n-                                        \"displayName\": \"SCROLL\",\n-                                        \"value\": \"pagination-scroll\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n-                                        \"displayName\": \"SEARCH_AFTER\",\n-                                        \"value\": \"pagination-search_after\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results.\",\n-                                        \"displayName\": \"POINT_IN_TIME\",\n-                                        \"value\": \"pagination-pit\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"pagination-scroll\",\n-                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n-                                \"displayName\": \"Pagination Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"full\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query-clause\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query Clause\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query-clause\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query-definition-style\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n+                                        \"displayName\": \"ECMAScript\",\n+                                        \"value\": \"ECMAScript\"\n                                     },\n                                     {\n-                                        \"description\": \"Build the Query from separate JSON objects.\",\n-                                        \"displayName\": \"BUILD_QUERY\",\n-                                        \"value\": \"build\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"full\",\n-                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n-                                \"displayName\": \"Query Definition Style\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-query-definition-style\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-split-up-aggregations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n-                                \"displayName\": \"Aggregation Results Split\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-aggregations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-split-up-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lua\",\n+                                        \"value\": \"lua\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n                                     },\n                                     {\n-                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n-                                        \"displayName\": \"PER_QUERY\",\n-                                        \"value\": \"splitUp-query\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ruby\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n-                                \"displayName\": \"Search Results Split\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"The Language to use for the script\",\n+                                \"displayName\": \"Script Language\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-hits\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-aggs\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n-                                \"displayName\": \"Aggregations\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-aggs\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-fields\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n-                                \"displayName\": \"Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-fields\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-script-fields\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n-                                \"displayName\": \"Script Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-script-fields\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-sort\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n-                                \"displayName\": \"Sort\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-sort\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-size\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n-                                \"displayName\": \"Size\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.ConsumeElasticsearch\",\n-                            \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\",\n-                            \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\"\n+                            \"org.apache.nifi.processors.jolt.record.JoltTransformRecord\",\n+                            \"org.apache.nifi.processors.script.ExecuteScript\",\n+                            \"org.apache.nifi.processors.standard.LookupRecord\",\n+                            \"org.apache.nifi.processors.standard.QueryRecord\",\n+                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n+                                \"description\": \"Each FlowFile that were successfully transformed will be routed to this Relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"description\": \"Any FlowFile that cannot be transformed will be routed to this Relationship\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"All original flowfiles that don't cause an error to occur go to this relationship.\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"json\",\n-                            \"page\",\n-                            \"query\",\n-                            \"read\",\n-                            \"scroll\"\n+                            \"filter\",\n+                            \"groovy\",\n+                            \"jython\",\n+                            \"modify\",\n+                            \"python\",\n+                            \"record\",\n+                            \"script\",\n+                            \"transform\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\",\n-                        \"typeDescription\": \"A processor that allows the user to run a paginated query (with aggregations) written with the Elasticsearch JSON DSL. It will use the flowfile's content for the query unless the QUERY attribute is populated. Search After/Point in Time queries must include a valid \\\"sort\\\" field.\",\n+                        \"type\": \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n+                        \"typeDescription\": \"Provides the ability to evaluate a simple script against each record in an incoming FlowFile. The script may transform the record in some way, filter the record, or fork additional records. See Processor's Additional Details for more information.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"application/json\",\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.name\"\n-                            },\n-                            {\n-                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.number\"\n-                            },\n-                            {\n-                                \"description\": \"The number of the page (request), starting from 1, in which the results were returned that are in the output flowfile\",\n-                                \"name\": \"page.number\"\n-                            },\n-                            {\n-                                \"description\": \"The number of hits that are in the output flowfile\",\n-                                \"name\": \"hit.count\"\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n-                                \"name\": \"elasticsearch.query.error\"\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Prefix: BULK: - adds the specified property name/value as a Bulk request header in the Elasticsearch Bulk API body used for processing. If the value is null or blank, the Bulk header will be omitted for the document operation. These parameters will override any matching parameters in the _bulk request body.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of the Bulk request header\",\n-                                \"value\": \"The value of the Bulk request header\"\n-                            },\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the _bulk request body. If FlowFiles are batched, only the first FlowFile in the batch is used to evaluate property values.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Record Reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-json-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-charset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-json-dynamic_templates\": {\n-                                \"description\": \"The dynamic_templates for the document. Must be parsable as a JSON Object. Requires Elasticsearch 7+\",\n-                                \"displayName\": \"Dynamic Templates\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-dynamic_templates\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-json-error-documents\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this configuration property is true, the response from Elasticsearch will be examined for failed documents and the FlowFile(s) associated with the failed document(s) will be sent to the \\\"errors\\\" relationship with \\\"elasticsearch.bulk.error\\\" attributes.\",\n-                                \"displayName\": \"Output Error Documents\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-json-error-documents\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"put-es-json-id-attr\": {\n-                                \"description\": \"The name of the FlowFile attribute containing the identifier for the document. If the Index Operation is \\\"index\\\", this property may be left empty or evaluate to an empty value, in which case the document's identifier will be auto-generated by Elasticsearch. For all other Index Operations, the attribute must evaluate to a non-empty value.\",\n-                                \"displayName\": \"Identifier Attribute\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-json-id-attr\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-json-not_found-is-error\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Error Documents\",\n-                                        \"propertyName\": \"put-es-json-error-documents\"\n-                                    }\n-                                ],\n-                                \"description\": \"If true, \\\"not_found\\\" Elasticsearch Document associated FlowFiles will be routed to the \\\"success\\\" relationship, otherwise to the \\\"errors\\\" relationship. If Output Error Responses is \\\"true\\\" then \\\"not_found\\\" responses from Elasticsearch will be sent to the error_responses relationship\",\n-                                \"displayName\": \"Treat \\\"Not Found\\\" as Success\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-json-not_found-is-error\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-json-script\": {\n-                                \"description\": \"The script for the document update/upsert. Only applies to Update/Upsert operations. Must be parsable as JSON Object. If left blank, the FlowFile content will be used for document update/upsert\",\n-                                \"displayName\": \"Script\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-script\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-json-scripted-upsert\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"ECMAScript\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to add the scripted_upsert flag to the Upsert Operation. Forces Elasticsearch to execute the Script whether or not the document exists, defaults to false. If the Upsert Document provided (from FlowFile content) will be empty, but sure to set the Client Service controller service's Suppress Null/Empty Values to Never Suppress or no \\\"upsert\\\" doc will be, included in the request to Elasticsearch and the operation will not create a new document for the script to execute against, resulting in a \\\"not_found\\\" error\",\n-                                \"displayName\": \"Scripted Upsert\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-scripted-upsert\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-output-error-responses\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"lua\",\n+                                        \"value\": \"lua\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"ruby\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this is enabled, response messages from Elasticsearch marked as \\\"error\\\" will be output to the \\\"error_responses\\\" relationship.This does not impact the output of flowfiles to the \\\"success\\\" or \\\"errors\\\" relationships\",\n-                                \"displayName\": \"Output Error Responses\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"The Language to use for the script\",\n+                                \"displayName\": \"Script Language\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-output-error-responses\",\n-                                \"required\": false,\n+                                \"name\": \"Script Engine\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-batch-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The preferred number of FlowFiles to send over in a single batch.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"put-es-record-batch-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-index-op\": {\n-                                \"defaultValue\": \"index\",\n-                                \"description\": \"The type of the operation used to index (create, delete, index, update, upsert)\",\n-                                \"displayName\": \"Index Operation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-op\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-log-error-responses\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this is enabled, errors will be logged to the NiFi logs at the error log level. Otherwise, they will only be logged if debug logging is enabled on NiFi as a whole. The purpose of this option is to give the user the ability to debug failed operations without having to turn on debug logging.\",\n-                                \"displayName\": \"Log Error Responses\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-log-error-responses\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\"\n+                            \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n+                                \"description\": \"FlowFile containing the valid records from the incoming FlowFile will be routed to this relationship. If there are no valid records, no FlowFile will be routed to this Relationship.\",\n+                                \"name\": \"valid\"\n                             },\n                             {\n-                                \"description\": \"All flowfiles that succeed in being transferred into Elasticsearch go here. Documents received by the Elasticsearch _bulk API may still result in errors on the Elasticsearch side. The Elasticsearch response will need to be examined to determine whether any Document(s)/Record(s) resulted in errors.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFile containing the invalid records from the incoming FlowFile will be routed to this relationship. If there are no invalid records, no FlowFile will be routed to this Relationship.\",\n+                                \"name\": \"invalid\"\n                             },\n                             {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"description\": \"In case of any issue during processing the incoming flow file, the incoming FlowFile will be routed to this relationship.\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"If a \\\"Output Error Documents\\\" is set, any FlowFile(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n-                                \"name\": \"errors\"\n+                                \"description\": \"After successful procession, the incoming FlowFile will be transferred to this relationship. This happens regardless the FlowFiles might routed to \\\"valid\\\" and \\\"invalid\\\" relationships.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The Batch of FlowFiles will be stored in memory until the bulk operation is performed.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"index\",\n-                            \"json\",\n-                            \"put\"\n+                            \"groovy\",\n+                            \"jython\",\n+                            \"python\",\n+                            \"record\",\n+                            \"script\",\n+                            \"validate\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\",\n-                        \"typeDescription\": \"An Elasticsearch put processor that uses the official Elastic REST client libraries. Each FlowFile is treated as a document to be sent to the Elasticsearch _bulk API. Multiple FlowFiles can be batched together into each Request sent to Elasticsearch.\",\n+                        \"type\": \"org.apache.nifi.processors.script.ScriptedValidateRecord\",\n+                        \"typeDescription\": \"This processor provides the ability to validate records in FlowFiles using the user-provided script. The script is expected to have a record as incoming argument and return with a boolean value. Based on this result, the processor categorizes the records as \\\"valid\\\" or \\\"invalid\\\" and routes them to the respective relationship in batch. Additionally the original FlowFile will be routed to the \\\"original\\\" relationship or in case of unsuccessful processing, to the \\\"failed\\\" relationship.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The error message if there is an issue parsing the FlowFile, sending the parsed document to Elasticsearch or parsing the Elasticsearch response\",\n-                                \"name\": \"elasticsearch.put.error\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The _bulk response if there was an error during processing the document within Elasticsearch.\",\n-                                \"name\": \"elasticsearch.bulk.error\"\n+                                \"description\": \"The number of records within the flow file.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Prefix: BULK: - adds the specified property name/value as a Bulk request header in the Elasticsearch Bulk API body used for processing. If the Record Path expression results in a null or blank value, the Bulk header will be omitted for the document operation. These parameters will override any matching parameters in the _bulk request body.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of the Bulk request header\",\n-                                \"value\": \"A Record Path expression to retrieve the Bulk request header value\"\n-                            },\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A script engine property to update\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the _bulk request body\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-output-error-responses\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Groovy 3.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python DEPRECATED\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this is enabled, response messages from Elasticsearch marked as \\\"error\\\" will be output to the \\\"error_responses\\\" relationship.This does not impact the output of flowfiles to the \\\"success\\\" or \\\"errors\\\" relationships\",\n-                                \"displayName\": \"Output Error Responses\",\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-output-error-responses\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-at-timestamp\": {\n-                                \"description\": \"The value to use as the @timestamp field (required for Elasticsearch Data Streams)\",\n-                                \"displayName\": \"@timestamp Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-at-timestamp\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-at-timestamp-date-format\": {\n-                                \"description\": \"Specifies the format to use when writing Date fields. If not specified, the default format 'yyyy-MM-dd' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/25/2017).\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"put-es-record-at-timestamp-date-format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-at-timestamp-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the @timestamp for the document. If left blank the @timestamp will be determined using the main @timestamp property\",\n-                                \"displayName\": \"@timestamp Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-at-timestamp-path\",\n-                                \"required\": false,\n+                                \"name\": \"Script Engine\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-at-timestamp-time-format\": {\n-                                \"description\": \"Specifies the format to use when writing Time fields. If not specified, the default format 'HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"put-es-record-at-timestamp-time-format\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n-                            },\n-                            \"put-es-record-at-timestamp-timestamp-format\": {\n-                                \"description\": \"Specifies the format to use when writing Timestamp fields. If not specified, the default format 'yyyy-MM-dd HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/25/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n+                            }\n+                        },\n+                        \"restricted\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"execute\",\n+                            \"groovy\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"reporting\",\n+                            \"ruby\",\n+                            \"script\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.reporting.script.ScriptedReportingTask\",\n+                        \"typeDescription\": \"Provides reporting and status information to a script. ReportingContext, ComponentLog, and VirtualMachineMetrics objects are made available as variables (context, log, and vmMetrics, respectively) to the script for further processing. The context makes various information available such as events, provenance, bulletins, controller services, process groups, Java Virtual Machine metrics, etc.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-smb-client-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-email-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-email-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"The supporting ews-java-api library is no longer maintained\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"connection.timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"The amount of time to wait to connect to Email server\",\n+                                \"displayName\": \"Connection timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"put-es-record-at-timestamp-timestamp-format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-batch-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The number of records to send over in a single batch.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-batch-size\",\n+                                \"name\": \"connection.timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-bulk-error-groups\": {\n+                            \"delete.messages\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Result Record Writer\",\n-                                        \"propertyName\": \"put-es-record-error-writer\"\n-                                    }\n-                                ],\n-                                \"description\": \"If this configuration property is set, the response from Elasticsearch will be examined for _bulk errors. The failed records written to the \\\"errors\\\" relationship will be grouped by error type and the error related to the first record within the FlowFile added to the FlowFile as \\\"elasticsearch.bulk.error\\\". If \\\"Treat \\\"Not Found\\\" as Success\\\" is \\\"false\\\" then records associated with \\\"not_found\\\" Elasticsearch document responses will also be send to the \\\"errors\\\" relationship.\",\n-                                \"displayName\": \"Group Results by Bulk Error Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-bulk-error-groups\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-dynamic-templates-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the dynamic_templates for the document. Field must be Map-type compatible (e.g. a Map or Record) or a String parsable into a JSON Object. Requires Elasticsearch 7+\",\n-                                \"displayName\": \"Dynamic Templates Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-dynamic-templates-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-error-writer\": {\n-                                \"description\": \"If this configuration property is set, the response from Elasticsearch will be examined for failed records and the failed records will be written to a record set with this record writer service and sent to the \\\"errors\\\" relationship. Successful records will be written to a record set with this record writer service and sent to the \\\"successful_records\\\" relationship.\",\n-                                \"displayName\": \"Result Record Writer\",\n+                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n+                                \"displayName\": \"Delete Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-error-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"put-es-record-id-path\": {\n-                                \"description\": \"A record path expression to retrieve the ID field for use with Elasticsearch. If left blank the ID will be automatically generated by Elasticsearch.\",\n-                                \"displayName\": \"ID Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-id-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-index-op\": {\n-                                \"defaultValue\": \"index\",\n-                                \"description\": \"The type of the operation used to index (create, delete, index, update, upsert)\",\n-                                \"displayName\": \"Index Operation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-op\",\n+                                \"name\": \"delete.messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-index-op-path\": {\n-                                \"description\": \"A record path expression to retrieve the Index Operation field for use with Elasticsearch. If left blank the Index Operation will be determined using the main Index Operation property.\",\n-                                \"displayName\": \"Index Operation Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-op-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-index-record-path\": {\n-                                \"description\": \"A record path expression to retrieve the index field for use with Elasticsearch. If left blank the index will be determined using the main index property.\",\n-                                \"displayName\": \"Index Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-record-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-log-error-responses\": {\n+                            \"ews-autodiscover\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this is enabled, errors will be logged to the NiFi logs at the error log level. Otherwise, they will only be logged if debug logging is enabled on NiFi as a whole. The purpose of this option is to give the user the ability to debug failed operations without having to turn on debug logging.\",\n-                                \"displayName\": \"Log Error Responses\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to use the Exchange email address to Autodiscover the EWS endpoint URL.\",\n+                                \"displayName\": \"Auto Discover URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-log-error-responses\",\n+                                \"name\": \"ews-autodiscover\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ews-exclude-headers\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"Comma delimited list specifying which headers from the original message to exclude in the exported email message. Blank means don't exclude any headers.\",\n+                                \"displayName\": \"Original Headers to Exclude\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ews-exclude-headers\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-not_found-is-error\": {\n+                            \"ews-include-headers\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"Comma delimited list specifying which headers from the original message to include in the exported email message. Blank means copy all headers. Some headers can cause problems with message parsing, specifically the 'Content-Type' header.\",\n+                                \"displayName\": \"Original Headers to Include\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ews-include-headers\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ews-mark-as-read\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Result Record Writer\",\n-                                        \"propertyName\": \"put-es-record-error-writer\"\n-                                    }\n-                                ],\n-                                \"description\": \"If true, \\\"not_found\\\" Elasticsearch Document associated Records will be routed to the \\\"successful_records\\\" relationship, otherwise to the \\\"errors\\\" relationship. If Output Error Responses is \\\"true\\\" then \\\"not_found\\\" responses from Elasticsearch will be sent to the error_responses relationship.\",\n-                                \"displayName\": \"Treat \\\"Not Found\\\" as Success\",\n+                                \"description\": \"Specify if messages should be marked as read after retrieval.\",\n+                                \"displayName\": \"Mark Messages as Read\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-not_found-is-error\",\n-                                \"required\": false,\n+                                \"name\": \"ews-mark-as-read\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-reader\": {\n-                                \"description\": \"The record reader to use for reading incoming records from flowfiles.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"ews-url\": {\n+                                \"description\": \"URL of the EWS Endpoint. Required if Autodiscover is false.\",\n+                                \"displayName\": \"EWS URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-reader\",\n+                                \"name\": \"ews-url\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"fetch.size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n+                                \"displayName\": \"Fetch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"fetch.size\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"put-es-record-retain-at-timestamp-field\": {\n+                            \"folder\": {\n+                                \"defaultValue\": \"INBOX\",\n+                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n+                                \"displayName\": \"Folder\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"folder\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"mail-ews-version\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Exchange2007_SP1\",\n+                                        \"value\": \"Exchange2007_SP1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"@timestamp Record Path\",\n-                                        \"propertyName\": \"put-es-record-at-timestamp-path\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether to retain the existing field used as the @timestamp Record Path.\",\n-                                \"displayName\": \"Retain @timestamp (Record Path)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-retain-at-timestamp-field\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-retain-id-field\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Exchange2010\",\n+                                        \"value\": \"Exchange2010\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Exchange2010_SP1\",\n+                                        \"value\": \"Exchange2010_SP1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"ID Record Path\",\n-                                        \"propertyName\": \"put-es-record-id-path\"\n+                                        \"displayName\": \"Exchange2010_SP2\",\n+                                        \"value\": \"Exchange2010_SP2\"\n                                     }\n                                 ],\n-                                \"description\": \"Whether to retain the existing field used as the ID Record Path.\",\n-                                \"displayName\": \"Retain ID (Record Path)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-retain-id-field\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-script-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the script for the document update/upsert. Only applies to Update/Upsert operations. Field must be Map-type compatible (e.g. a Map or a Record) or a String parsable into a JSON Object\",\n-                                \"displayName\": \"Script Record Path\",\n+                                \"defaultValue\": \"Exchange2010_SP2\",\n+                                \"description\": \"What version of Exchange Server the server is running.\",\n+                                \"displayName\": \"Exchange Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-script-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mail-ews-version\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-scripted-upsert-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the scripted_upsert boolean flag. Whether to add the scripted_upsert flag to the Upsert Operation. Forces Elasticsearch to execute the Script whether or not the document exists, defaults to false. If the Upsert Document provided (from FlowFile content) will be empty, but sure to set the Client Service controller service's Suppress Null/Empty Values to Never Suppress or no \\\"upsert\\\" doc will be, included in the request to Elasticsearch and the operation will not create a new document for the script to execute against, resulting in a \\\"not_found\\\" error\",\n-                                \"displayName\": \"Scripted Upsert Record Path\",\n+                            \"password\": {\n+                                \"description\": \"Password used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-scripted-upsert-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"put-es-record-type-record-path\": {\n-                                \"description\": \"A record path expression to retrieve the type field for use with Elasticsearch. If left blank the type will be determined using the main type property.\",\n-                                \"displayName\": \"Type Record Path\",\n+                            \"user\": {\n+                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-type-record-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"user\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that succeed in being transferred into Elasticsearch go here. Documents received by the Elasticsearch _bulk API may still result in errors on the Elasticsearch side. The Elasticsearch response will need to be examined to determine whether any Document(s)/Record(s) resulted in errors.\",\n+                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a \\\"Result Record Writer\\\" is set, any Record(s) corresponding to Elasticsearch document(s) that did not result in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n-                                \"name\": \"successful_records\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"If a \\\"Result Record Writer\\\" is set, any Record(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n-                                \"name\": \"errors\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The Batch of Records will be stored in memory until the bulk operation is performed.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"index\",\n-                            \"json\",\n-                            \"put\",\n-                            \"record\"\n+                            \"Consume\",\n+                            \"EWS\",\n+                            \"Email\",\n+                            \"Exchange\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Message\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\",\n-                        \"typeDescription\": \"A record-aware Elasticsearch put processor that uses the official Elastic REST client libraries. Each Record within the FlowFile is converted into a document to be sent to the Elasticsearch _bulk APi. Multiple documents can be batched into each Request sent to Elasticsearch. Each document's Bulk operation can be configured using Record Path expressions.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The error message if there is an issue parsing the FlowFile records, sending the parsed documents to Elasticsearch or parsing the Elasticsearch response.\",\n-                                \"name\": \"elasticsearch.put.error\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records that generated errors in the Elasticsearch _bulk API.\",\n-                                \"name\": \"elasticsearch.put.error.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records that were successfully processed by the Elasticsearch _bulk API.\",\n-                                \"name\": \"elasticsearch.put.success.count\"\n-                            },\n-                            {\n-                                \"description\": \"The _bulk response if there was an error during processing the record within Elasticsearch.\",\n-                                \"name\": \"elasticsearch.bulk.error\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.email.ConsumeEWS\",\n+                        \"typeDescription\": \"Consumes messages from Microsoft Exchange using Exchange Web Services. The raw-bytes of each received email message are written as contents of the FlowFile\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body. For SCROLL type queries, these parameters are only used in the initial (first page) query as the Elasticsearch Scroll API does not support the same query parameters for subsequent pages of data.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Mark Messages as Read\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specify if messages should be marked as read after retrieval.\",\n+                                \"displayName\": \"Mark Messages as Read\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n+                                \"name\": \"Mark Messages as Read\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-aggregations\": {\n+                            \"Use SSL\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Aggregation Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Aggregation output.\",\n-                                \"displayName\": \"Aggregation Results Format\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies if IMAP connection must be obtained via SSL encrypted connection (i.e., IMAPS)\",\n+                                \"displayName\": \"Use SSL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-aggregations\",\n+                                \"name\": \"Use SSL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-hits\": {\n+                            \"authorization-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n+                                        \"description\": \"Use password\",\n+                                        \"displayName\": \"Use Password\",\n+                                        \"value\": \"password-based-authorization-mode\"\n                                     },\n                                     {\n-                                        \"description\": \"Hit Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"Use OAuth2 to acquire access token\",\n+                                        \"displayName\": \"Use OAuth2\",\n+                                        \"value\": \"oauth-based-authorization-mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Hits output.\",\n-                                \"displayName\": \"Search Results Format\",\n+                                \"defaultValue\": \"password-based-authorization-mode\",\n+                                \"description\": \"How to authorize sending email on the user's behalf.\",\n+                                \"displayName\": \"Authorization Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-hits\",\n+                                \"name\": \"authorization-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\n+                            \"connection.timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"The amount of time to wait to connect to Email server\",\n+                                \"displayName\": \"Connection timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"connection.timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"delete.messages\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n-                                \"displayName\": \"Output No Hits\",\n+                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n+                                \"displayName\": \"Delete Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-output-no-hits\",\n+                                \"name\": \"delete.messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-pagination-keep-alive\": {\n-                                \"defaultValue\": \"10 mins\",\n-                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n-                                \"displayName\": \"Pagination Keep Alive\",\n+                            \"fetch.size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n+                                \"displayName\": \"Fetch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-keep-alive\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"fetch.size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-pagination-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n-                                        \"displayName\": \"SCROLL\",\n-                                        \"value\": \"pagination-scroll\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n-                                        \"displayName\": \"SEARCH_AFTER\",\n-                                        \"value\": \"pagination-search_after\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results.\",\n-                                        \"displayName\": \"POINT_IN_TIME\",\n-                                        \"value\": \"pagination-pit\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"pagination-scroll\",\n-                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n-                                \"displayName\": \"Pagination Type\",\n+                            \"folder\": {\n+                                \"defaultValue\": \"INBOX\",\n+                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n+                                \"displayName\": \"Folder\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-type\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"folder\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query\": {\n+                            \"host\": {\n+                                \"description\": \"Network address of Email server (e.g., pop.gmail.com, imap.gmail.com . . .)\",\n+                                \"displayName\": \"Host Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"host\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"oauth2-access-token-provider\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"full\"\n+                                            \"oauth-based-authorization-mode\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n                                     }\n                                 ],\n-                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query\",\n+                                \"description\": \"OAuth2 service that can provide access tokens.\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"oauth2-access-token-provider\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"el-rest-query-clause\": {\n+                            \"password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"build\"\n+                                            \"password-based-authorization-mode\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n                                     }\n                                 ],\n-                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query Clause\",\n+                                \"description\": \"Password used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query-clause\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"port\": {\n+                                \"description\": \"Numeric value identifying Port of Email server (e.g., 993)\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-definition-style\": {\n+                            \"user\": {\n+                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"User Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"user\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Consume\",\n+                            \"Email\",\n+                            \"Get\",\n+                            \"Imap\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Message\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.email.ConsumeIMAP\",\n+                        \"typeDescription\": \"Consumes messages from Email Server using IMAP protocol. The raw-bytes of each received email message are written as contents of the FlowFile\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-email-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"authorization-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n+                                        \"description\": \"Use password\",\n+                                        \"displayName\": \"Use Password\",\n+                                        \"value\": \"password-based-authorization-mode\"\n                                     },\n                                     {\n-                                        \"description\": \"Build the Query from separate JSON objects.\",\n-                                        \"displayName\": \"BUILD_QUERY\",\n-                                        \"value\": \"build\"\n+                                        \"description\": \"Use OAuth2 to acquire access token\",\n+                                        \"displayName\": \"Use OAuth2\",\n+                                        \"value\": \"oauth-based-authorization-mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"full\",\n-                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n-                                \"displayName\": \"Query Definition Style\",\n+                                \"defaultValue\": \"password-based-authorization-mode\",\n+                                \"description\": \"How to authorize sending email on the user's behalf.\",\n+                                \"displayName\": \"Authorization Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-query-definition-style\",\n+                                \"name\": \"authorization-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-aggregations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n-                                \"displayName\": \"Aggregation Results Split\",\n+                            \"connection.timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"The amount of time to wait to connect to Email server\",\n+                                \"displayName\": \"Connection timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-aggregations\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"connection.timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-hits\": {\n+                            \"delete.messages\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n-                                        \"displayName\": \"PER_QUERY\",\n-                                        \"value\": \"splitUp-query\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n-                                \"displayName\": \"Search Results Split\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n+                                \"displayName\": \"Delete Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-hits\",\n+                                \"name\": \"delete.messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"fetch.size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n+                                \"displayName\": \"Fetch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"fetch.size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-aggs\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n-                                \"displayName\": \"Aggregations\",\n+                            \"folder\": {\n+                                \"defaultValue\": \"INBOX\",\n+                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n+                                \"displayName\": \"Folder\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-aggs\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"folder\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-fields\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n-                                \"displayName\": \"Fields\",\n+                            \"host\": {\n+                                \"description\": \"Network address of Email server (e.g., pop.gmail.com, imap.gmail.com . . .)\",\n+                                \"displayName\": \"Host Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-fields\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"host\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-script-fields\": {\n+                            \"oauth2-access-token-provider\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"build\"\n+                                            \"oauth-based-authorization-mode\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n                                     }\n                                 ],\n-                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n-                                \"displayName\": \"Script Fields\",\n+                                \"description\": \"OAuth2 service that can provide access tokens.\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-script-fields\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"oauth2-access-token-provider\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"es-rest-query-sort\": {\n+                            \"password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"build\"\n+                                            \"password-based-authorization-mode\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n                                     }\n                                 ],\n-                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n-                                \"displayName\": \"Sort\",\n+                                \"description\": \"Password used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-sort\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"port\": {\n+                                \"description\": \"Numeric value identifying Port of Email server (e.g., 993)\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-size\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n-                                \"displayName\": \"Size\",\n+                            \"user\": {\n+                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"es-rest-size\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"user\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.ConsumeElasticsearch\",\n-                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n-                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The pagination state (scrollId, searchAfter, pitId, hitCount, pageCount, pageExpirationTimestamp) is retained in between invocations of this processor until the Scroll/PiT has expired (when the current time is later than the last query execution plus the Pagination Keep Alive interval).\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n-                            },\n-                            {\n-                                \"description\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n+                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n+                        \"tags\": [\n+                            \"Consume\",\n+                            \"Email\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Message\",\n+                            \"POP3\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.email.ConsumePOP3\",\n+                        \"typeDescription\": \"Consumes messages from Email Server using POP3 protocol. The raw-bytes of each received email message are written as contents of the FlowFile\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-email-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n-                                \"resource\": \"MEMORY\"\n+                                \"description\": \"Flowfiles that could not be parsed\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original file\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n+                                \"name\": \"attachments\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"json\",\n-                            \"page\",\n-                            \"query\",\n-                            \"scroll\",\n-                            \"search\"\n+                            \"email\",\n+                            \"split\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\",\n-                        \"typeDescription\": \"A processor that allows the user to repeatedly run a paginated query (with aggregations) written with the Elasticsearch JSON DSL. Search After/Point in Time queries must include a valid \\\"sort\\\" field. The processor will retrieve multiple pages of results until either no more results are available or the Pagination Keep Alive expiration is reached, after which the query will restart with the first page of results being retrieved.\",\n+                        \"type\": \"org.apache.nifi.processors.email.ExtractEmailAttachments\",\n+                        \"typeDescription\": \"Extract attachments from a mime formatted email file, splitting them into individual flowfiles.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"application/json\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.name\"\n-                            },\n-                            {\n-                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.number\"\n+                                \"description\": \"The filename of the attachment\",\n+                                \"name\": \"filename \"\n                             },\n                             {\n-                                \"description\": \"The number of the page (request), starting from 1, in which the results were returned that are in the output flowfile\",\n-                                \"name\": \"page.number\"\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"email.attachment.parent.filename \"\n                             },\n                             {\n-                                \"description\": \"The number of hits that are in the output flowfile\",\n-                                \"name\": \"hit.count\"\n+                                \"description\": \"The UUID of the original FlowFile.\",\n+                                \"name\": \"email.attachment.parent.uuid\"\n                             },\n                             {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n-                                \"name\": \"elasticsearch.query.error\"\n+                                \"description\": \"The mime type of the attachment.\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"CAPTURED_HEADERS\": {\n+                                \"defaultValue\": \"x-mailer\",\n+                                \"description\": \"COLON separated list of additional headers to be extracted from the flowfile content.NOTE the header key is case insensitive and will be matched as lower-case. Values will respect email contents.\",\n+                                \"displayName\": \"Additional Header List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"full\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query-clause\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query Clause\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query-clause\",\n+                                \"name\": \"CAPTURED_HEADERS\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-definition-style\": {\n+                            \"STRICT_ADDRESS_PARSING\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n+                                        \"description\": \"Strict email address format will be enforced. FlowFiles will be transfered to the failure relationship if the email address is invalid.\",\n+                                        \"displayName\": \"Strict Address Parsing\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Build the Query from separate JSON objects.\",\n-                                        \"displayName\": \"BUILD_QUERY\",\n-                                        \"value\": \"build\"\n+                                        \"description\": \"Accept emails, even if the address is poorly formed and doesn't strictly comply with RFC Validation.\",\n+                                        \"displayName\": \"Non-Strict Address Parsing\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"full\",\n-                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n-                                \"displayName\": \"Query Definition Style\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If \\\"strict\\\", strict address format parsing rules are applied to mailbox and mailbox list fields, such as \\\"to\\\" and \\\"from\\\" headers, and FlowFiles with poorly formed addresses will be routed to the failure relationship, similar to messages that fail RFC compliant format validation. If \\\"non-strict\\\", the processor will extract the contents of mailbox list headers as comma-separated values without attempting to parse each value as well-formed Internet mailbox addresses. This is optional and defaults to Strict Address Parsing\",\n+                                \"displayName\": \"Email Address Parsing\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-query-definition-style\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-script\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"A \\\"script\\\" to execute during the operation, in JSON syntax. Ex: {\\\"source\\\": \\\"ctx._source.count++\\\", \\\"lang\\\": \\\"painless\\\"}\",\n-                                \"displayName\": \"Script\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-script\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n+                                \"name\": \"STRICT_ADDRESS_PARSING\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"description\": \"Extraction was successful\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"description\": \"Flowfiles that could not be parsed as a RFC-2822 compliant message\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"elastic\",\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"query\",\n-                            \"update\"\n+                            \"email\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.UpdateByQueryElasticsearch\",\n-                        \"typeDescription\": \"Update documents in an Elasticsearch index using a query. The query can be loaded from a flowfile body or from the Query parameter. The loaded Query can contain any JSON accepted by Elasticsearch's _update_by_query API, for example a \\\"query\\\" object to identify what documents are to be updated, plus a \\\"script\\\" to define the updates to perform.\",\n+                        \"type\": \"org.apache.nifi.processors.email.ExtractEmailHeaders\",\n+                        \"typeDescription\": \"Using the flowfile content as source of data, extract header from an RFC compliant  email file adding the relevant attributes to the flowfile. This processor does not perform extensive RFC validation but still requires a bare minimum compliance with RFC 2822\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The amount of time that it took to complete the update operation in ms.\",\n-                                \"name\": \"elasticsearch.update.took\"\n+                                \"description\": \"Each individual BCC recipient (if available)\",\n+                                \"name\": \"email.headers.bcc.*\"\n                             },\n                             {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error running the update.\",\n-                                \"name\": \"elasticsearch.update.error\"\n+                                \"description\": \"Each individual CC recipient (if available)\",\n+                                \"name\": \"email.headers.cc.*\"\n+                            },\n+                            {\n+                                \"description\": \"Each individual mailbox contained in the From  of the Email (array as per RFC-2822)\",\n+                                \"name\": \"email.headers.from.*\"\n+                            },\n+                            {\n+                                \"description\": \"The value of the Message-ID header (if available)\",\n+                                \"name\": \"email.headers.message-id\"\n+                            },\n+                            {\n+                                \"description\": \"The Received-Date of the message (if available)\",\n+                                \"name\": \"email.headers.received_date\"\n+                            },\n+                            {\n+                                \"description\": \"Date the message was sent\",\n+                                \"name\": \"email.headers.sent_date\"\n+                            },\n+                            {\n+                                \"description\": \"Subject of the message (if available)\",\n+                                \"name\": \"email.headers.subject\"\n+                            },\n+                            {\n+                                \"description\": \"Each individual TO recipient (if available)\",\n+                                \"name\": \"email.headers.to.*\"\n+                            },\n+                            {\n+                                \"description\": \"Number of attachments of the message\",\n+                                \"name\": \"email.attachment_count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kafka-2-0-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kafka-2-0-nar\",\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n+                                \"description\": \"Each individual flowfile that could not be parsed will be routed to the failure relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Each original flowfile (i.e. before extraction) will be routed to the original relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n+                                \"name\": \"attachments\"\n                             }\n                         ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"acks\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Records are considered 'transmitted successfully' after successfully writing the content to a Kafka node, without waiting for a response. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Records are considered 'transmitted successfully' if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes.\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Records are considered 'transmitted unsuccessfully' unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration.\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"email\",\n+                            \"split\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.email.ExtractTNEFAttachments\",\n+                        \"typeDescription\": \"Extract attachments from a mime formatted email file, splitting them into individual flowfiles.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The filename of the attachment\",\n+                                \"name\": \"filename \"\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"email.tnef.attachment.parent.filename \"\n                             },\n-                            \"compression.type\": {\n+                            {\n+                                \"description\": \"The UUID of the original FlowFile.\",\n+                                \"name\": \"email.tnef.attachment.parent.uuid\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-email-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"CLIENT_AUTH\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n-                                \"required\": true,\n+                                \"name\": \"CLIENT_AUTH\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"SMTP_HOSTNAME\": {\n+                                \"description\": \"The hostname to be embedded into the banner displayed when an SMTP client connects to the processor TCP port .\",\n+                                \"displayName\": \"SMTP hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"name\": \"SMTP_HOSTNAME\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"SMTP_MAXIMUM_CONNECTIONS\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of simultaneous SMTP connections.\",\n+                                \"displayName\": \"Maximum number of SMTP connection\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"name\": \"SMTP_MAXIMUM_CONNECTIONS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"SMTP_MAXIMUM_MSG_SIZE\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum number of bytes the server will accept.\",\n+                                \"displayName\": \"SMTP Maximum Message Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n+                                \"name\": \"SMTP_MAXIMUM_MSG_SIZE\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                            \"SMTP_PORT\": {\n+                                \"description\": \"The TCP port the ListenSMTP processor will bind to.NOTE that on Unix derivative operating  systems this port must be higher than 1024 unless NiFi is running as with root user permissions.\",\n+                                \"displayName\": \"Listening Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"name\": \"SMTP_PORT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                            \"SMTP_TIMEOUT\": {\n+                                \"defaultValue\": \"60 seconds\",\n+                                \"description\": \"The maximum time to wait for an action of SMTP client.\",\n+                                \"displayName\": \"SMTP connection timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"SMTP_TIMEOUT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                            \"SSL_CONTEXT_SERVICE\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"name\": \"SSL_CONTEXT_SERVICE\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"All new messages will be routed as FlowFiles to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"kafka\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"email\",\n+                            \"listen\",\n+                            \"smtp\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_0\",\n-                        \"typeDescription\": \"Provides a service to write records to a Kafka 2.x topic.\",\n-                        \"version\": \"1.27.0\"\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.email.ListenSMTP\",\n+                        \"typeDescription\": \"This processor implements a lightweight SMTP server to an arbitrary port, allowing nifi to listen for incoming email. Note this server does not perform any email validation. If direct exposure to the internet is sought, it may be a better idea to use the combination of NiFi and an industrial scale MTA (e.g. Postfix). Threading for this processor is managed by the underlying smtp server used so the processor need not support more than one thread.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The value used during HELO\",\n+                                \"name\": \"smtp.helo\"\n+                            },\n+                            {\n+                                \"description\": \"The serial numbers for each of the certificates used by an TLS peer\",\n+                                \"name\": \"smtp.certificates.*.serial\"\n+                            },\n+                            {\n+                                \"description\": \"The principal for each of the certificates used by an TLS peer\",\n+                                \"name\": \"smtp.certificates.*.principal\"\n+                            },\n+                            {\n+                                \"description\": \"The source IP and port of the SMTP connection\",\n+                                \"name\": \"smtp.src\"\n+                            },\n+                            {\n+                                \"description\": \"The value used during MAIL FROM (i.e. envelope)\",\n+                                \"name\": \"smtp.from\"\n+                            },\n+                            {\n+                                \"description\": \"The values used during RCPT TO (i.e. envelope)\",\n+                                \"name\": \"smtp.recipient.*\"\n+                            },\n+                            {\n+                                \"description\": \"Mime type of the message\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n                     }\n                 ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-splunk-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-0-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-splunk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Application\": {\n+                                \"description\": \"The Splunk Application to query.\",\n+                                \"displayName\": \"Application\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n+                                \"name\": \"Application\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"auto.offset.reset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Max wait time for connection to the Splunk server.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"Earliest Time\": {\n+                                \"description\": \"The value to use for the earliest time when querying. Only used with a Time Range Strategy of Provided. See Splunk's documentation on Search Time Modifiers for guidance in populating this field.\",\n+                                \"displayName\": \"Earliest Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Earliest Time\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"group.id\": {\n-                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n-                                \"displayName\": \"Group ID\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The ip address or hostname of the Splunk server.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"group.id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"header-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n-                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n+                            \"Latest Time\": {\n+                                \"description\": \"The value to use for the latest time when querying. Only used with a Time Range Strategy of Provided. See Splunk's documentation on Search Time Modifiers for guidance in populating this field.\",\n+                                \"displayName\": \"Latest Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n+                                \"name\": \"Latest Time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"honor-transactions\": {\n+                            \"Output Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"ATOM\",\n+                                        \"value\": \"ATOM\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"honor-transactions\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"key-attribute-encoding\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"CSV\",\n+                                        \"value\": \"CSV\"\n+                                    },\n                                     {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JSON\",\n+                                        \"value\": \"JSON\"\n                                     },\n                                     {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JSON_COLS\",\n+                                        \"value\": \"JSON_COLS\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JSON_ROWS\",\n+                                        \"value\": \"JSON_ROWS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"XML\",\n+                                        \"value\": \"XML\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"If the <Separate By Key> property is set to true, FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"defaultValue\": \"JSON\",\n+                                \"description\": \"The output mode for the results.\",\n+                                \"displayName\": \"Output Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n+                                \"name\": \"Output Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n+                            \"Owner\": {\n+                                \"description\": \"The owner to pass to Splunk.\",\n+                                \"displayName\": \"Owner\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-uncommit-offset-wait\",\n+                                \"name\": \"Owner\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n+                            \"Password\": {\n+                                \"description\": \"The password to authenticate to Splunk.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"8089\",\n+                                \"description\": \"The port of the Splunk server.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Query\": {\n+                                \"defaultValue\": \"search * | head 100\",\n+                                \"description\": \"The query to execute. Typically beginning with a <search> command followed by a search clause, such as <search source=\\\"tcp:7689\\\"> to search for messages received on TCP port 7689.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"Query\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Read Timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for response from the Splunk server.\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"name\": \"Read Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"sasl.token.auth\": {\n+                            \"Scheme\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"https\",\n+                                        \"value\": \"https\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n+                                        \"displayName\": \"http\",\n+                                        \"value\": \"http\"\n                                     }\n                                 ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n+                                \"defaultValue\": \"https\",\n+                                \"description\": \"The scheme for connecting to Splunk.\",\n+                                \"displayName\": \"Scheme\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n-                                \"required\": false,\n+                                \"name\": \"Scheme\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"Security Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n+                                        \"displayName\": \"TLSv1_2\",\n+                                        \"value\": \"TLSv1_2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n+                                        \"displayName\": \"TLSv1_1\",\n+                                        \"value\": \"TLSv1_1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"displayName\": \"TLSv1\",\n+                                        \"value\": \"TLSv1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"displayName\": \"SSLv3\",\n+                                        \"value\": \"SSLv3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"defaultValue\": \"TLSv1_2\",\n+                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n                                 \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n+                                \"name\": \"Security Protocol\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"separate-by-key\": {\n+                            \"Time Field Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Search based on the time of the event which may be different than when the event was indexed.\",\n+                                        \"displayName\": \"Event Time\",\n+                                        \"value\": \"Event Time\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Search based on the time the event was indexed in Splunk.\",\n+                                        \"displayName\": \"Index Time\",\n+                                        \"value\": \"Index Time\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, two Records will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n-                                \"displayName\": \"Separate By Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"separate-by-key\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                                \"defaultValue\": \"Event Time\",\n+                                \"description\": \"Indicates whether to search by the time attached to the event, or by the time the event was indexed in Splunk.\",\n+                                \"displayName\": \"Time Field Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topic Name(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n+                                \"name\": \"Time Field Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"topic_type\": {\n+                            \"Time Range Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n+                                        \"description\": \"The processor will manage the date ranges of the query starting from the beginning of time.\",\n+                                        \"displayName\": \"Managed from Beginning\",\n+                                        \"value\": \"Managed from Beginning\"\n                                     },\n                                     {\n-                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n+                                        \"description\": \"The processor will manage the date ranges of the query starting from the current time.\",\n+                                        \"displayName\": \"Managed from Current\",\n+                                        \"value\": \"Managed from Current\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The the time range provided through the Earliest Time and Latest Time properties will be used.\",\n+                                        \"displayName\": \"Provided\",\n+                                        \"value\": \"Provided\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Name Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"topic_type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_0\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles received from Kafka.  Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a message from Kafka cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"2.0\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Record\",\n-                            \"Topic\",\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_0\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafkaRecord_2_0. Please note that, at this time, the Processor assumes that all records that are retrieved from a given partition have the same schema. If any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of records received\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The partition of the topic the records are from\",\n-                                \"name\": \"kafka.partition\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The topic records are from\",\n-                                \"name\": \"kafka.topic\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-0-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n-                                \"displayName\": \"Communications Timeout\",\n+                                \"defaultValue\": \"Provided\",\n+                                \"description\": \"Indicates how to apply time ranges to each execution of the query. Selecting a managed option allows the processor to apply a time range from the last execution time to the current execution time. When using <Managed from Beginning>, an earliest time will not be applied on the first execution, and thus all records searched. When using <Managed from Current> the earliest time of the first execution will be the initial execution time. When using <Provided>, the time range will come from the Earliest Time and Latest Time properties, or no time range will be applied if these properties are left blank.\",\n+                                \"displayName\": \"Time Range Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Time Range Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"auto.offset.reset\": {\n+                            \"Time Zone\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Abidjan\",\n+                                        \"value\": \"Africa/Abidjan\"\n                                     },\n                                     {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Accra\",\n+                                        \"value\": \"Africa/Accra\"\n                                     },\n                                     {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"group.id\": {\n-                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n-                                \"displayName\": \"Group ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"group.id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"header-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n-                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"honor-transactions\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Addis_Ababa\",\n+                                        \"value\": \"Africa/Addis_Ababa\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Algiers\",\n+                                        \"value\": \"Africa/Algiers\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"honor-transactions\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"key-attribute-encoding\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Asmara\",\n+                                        \"value\": \"Africa/Asmara\"\n+                                    },\n                                     {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Asmera\",\n+                                        \"value\": \"Africa/Asmera\"\n                                     },\n                                     {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Bamako\",\n+                                        \"value\": \"Africa/Bamako\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-uncommit-offset-wait\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-demarcator\": {\n-                                \"description\": \"Since KafkaConsumer receives messages in batches, you have an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n-                                \"displayName\": \"Message Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"message-demarcator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Bangui\",\n+                                        \"value\": \"Africa/Bangui\"\n+                                    },\n                                     {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Banjul\",\n+                                        \"value\": \"Africa/Banjul\"\n                                     },\n                                     {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Bissau\",\n+                                        \"value\": \"Africa/Bissau\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Blantyre\",\n+                                        \"value\": \"Africa/Blantyre\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Brazzaville\",\n+                                        \"value\": \"Africa/Brazzaville\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"sasl.token.auth\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Bujumbura\",\n+                                        \"value\": \"Africa/Bujumbura\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Cairo\",\n+                                        \"value\": \"Africa/Cairo\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"Africa/Casablanca\",\n+                                        \"value\": \"Africa/Casablanca\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Ceuta\",\n+                                        \"value\": \"Africa/Ceuta\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Conakry\",\n+                                        \"value\": \"Africa/Conakry\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n+                                        \"displayName\": \"Africa/Dakar\",\n+                                        \"value\": \"Africa/Dakar\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n+                                        \"displayName\": \"Africa/Dar_es_Salaam\",\n+                                        \"value\": \"Africa/Dar_es_Salaam\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"displayName\": \"Africa/Djibouti\",\n+                                        \"value\": \"Africa/Djibouti\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"separate-by-key\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Douala\",\n+                                        \"value\": \"Africa/Douala\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/El_Aaiun\",\n+                                        \"value\": \"Africa/El_Aaiun\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, and the <Message Demarcator> property is set, two messages will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n-                                \"displayName\": \"Separate By Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"separate-by-key\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topic Name(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"topic_type\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Freetown\",\n+                                        \"value\": \"Africa/Freetown\"\n+                                    },\n                                     {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Gaborone\",\n+                                        \"value\": \"Africa/Gaborone\"\n                                     },\n                                     {\n-                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Name Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"topic_type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles received from Kafka. Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"2.0\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Topic\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_0\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafka_2_0.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of messages written if more than one\",\n-                                \"name\": \"kafka.count\"\n-                            },\n-                            {\n-                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n-                                \"name\": \"kafka.key\"\n-                            },\n-                            {\n-                                \"description\": \"The offset of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.offset\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The partition of the topic the message or message bundle is from\",\n-                                \"name\": \"kafka.partition\"\n-                            },\n-                            {\n-                                \"description\": \"The topic the message or message bundle is from\",\n-                                \"name\": \"kafka.topic\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-0-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Failure Strategy\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Harare\",\n+                                        \"value\": \"Africa/Harare\"\n+                                    },\n                                     {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n-                                        \"displayName\": \"Route to Failure\",\n-                                        \"value\": \"Route to Failure\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Johannesburg\",\n+                                        \"value\": \"Africa/Johannesburg\"\n                                     },\n                                     {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n-                                        \"displayName\": \"Rollback\",\n-                                        \"value\": \"Rollback\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Route to Failure\",\n-                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n-                                \"displayName\": \"Failure Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Failure Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"acks\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Juba\",\n+                                        \"value\": \"Africa/Juba\"\n+                                    },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Kampala\",\n+                                        \"value\": \"Africa/Kampala\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Khartoum\",\n+                                        \"value\": \"Africa/Khartoum\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"attribute-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Kigali\",\n+                                        \"value\": \"Africa/Kigali\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"compression.type\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Kinshasa\",\n+                                        \"value\": \"Africa/Kinshasa\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n+                                        \"displayName\": \"Africa/Lagos\",\n+                                        \"value\": \"Africa/Lagos\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"displayName\": \"Africa/Libreville\",\n+                                        \"value\": \"Africa/Libreville\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"displayName\": \"Africa/Lome\",\n+                                        \"value\": \"Africa/Lome\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-key-field\": {\n-                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n-                                \"displayName\": \"Message Key Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"message-key-field\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to. How this value is interpreted is dictated by the <Partitioner class> property.\",\n-                                \"displayName\": \"Partition\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"partitioner.class\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Luanda\",\n+                                        \"value\": \"Africa/Luanda\"\n+                                    },\n                                     {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Lubumbashi\",\n+                                        \"value\": \"Africa/Lubumbashi\"\n                                     },\n                                     {\n-                                        \"description\": \"Messages will be assigned to random partitions.\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Lusaka\",\n+                                        \"value\": \"Africa/Lusaka\"\n                                     },\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as a RecordPath that will be evaluated against each Record to determine which partition the Record will go to. All Records that have the same value for the given RecordPath will go to the same Partition.\",\n-                                        \"displayName\": \"RecordPath Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RecordPathPartitioner\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Malabo\",\n+                                        \"value\": \"Africa/Malabo\"\n                                     },\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n-                                \"displayName\": \"Partitioner class\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Maputo\",\n+                                        \"value\": \"Africa/Maputo\"\n+                                    },\n                                     {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Maseru\",\n+                                        \"value\": \"Africa/Maseru\"\n                                     },\n                                     {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Mbabane\",\n+                                        \"value\": \"Africa/Mbabane\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Mogadishu\",\n+                                        \"value\": \"Africa/Mogadishu\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Monrovia\",\n+                                        \"value\": \"Africa/Monrovia\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"sasl.token.auth\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Nairobi\",\n+                                        \"value\": \"Africa/Nairobi\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Ndjamena\",\n+                                        \"value\": \"Africa/Ndjamena\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"Africa/Niamey\",\n+                                        \"value\": \"Africa/Niamey\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Nouakchott\",\n+                                        \"value\": \"Africa/Nouakchott\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Ouagadougou\",\n+                                        \"value\": \"Africa/Ouagadougou\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n+                                        \"displayName\": \"Africa/Porto-Novo\",\n+                                        \"value\": \"Africa/Porto-Novo\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n+                                        \"displayName\": \"Africa/Sao_Tome\",\n+                                        \"value\": \"Africa/Sao_Tome\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"displayName\": \"Africa/Timbuktu\",\n+                                        \"value\": \"Africa/Timbuktu\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"transactional-id-prefix\": {\n-                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n-                                \"displayName\": \"Transactional Id Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"transactional-id-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"use-transactions\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Tripoli\",\n+                                        \"value\": \"Africa/Tripoli\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Tunis\",\n+                                        \"value\": \"Africa/Tunis\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n-                                \"displayName\": \"Use Transactions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-transactions\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_0\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"2.0\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Record\",\n-                            \"Send\",\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\",\n-                            \"logs\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_0\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as individual records to Apache Kafka using the Kafka 2.0 Producer API. The contents of the FlowFile are expected to be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafkaRecord_2_0.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n-                                \"name\": \"msg.count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-0-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Failure Strategy\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Windhoek\",\n+                                        \"value\": \"Africa/Windhoek\"\n+                                    },\n                                     {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n-                                        \"displayName\": \"Route to Failure\",\n-                                        \"value\": \"Route to Failure\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Adak\",\n+                                        \"value\": \"America/Adak\"\n                                     },\n                                     {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n-                                        \"displayName\": \"Rollback\",\n-                                        \"value\": \"Rollback\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Route to Failure\",\n-                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n-                                \"displayName\": \"Failure Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Failure Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"acks\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Anchorage\",\n+                                        \"value\": \"America/Anchorage\"\n+                                    },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Anguilla\",\n+                                        \"value\": \"America/Anguilla\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Antigua\",\n+                                        \"value\": \"America/Antigua\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"attribute-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Araguaina\",\n+                                        \"value\": \"America/Araguaina\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"compression.type\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Buenos_Aires\",\n+                                        \"value\": \"America/Argentina/Buenos_Aires\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n+                                        \"displayName\": \"America/Argentina/Catamarca\",\n+                                        \"value\": \"America/Argentina/Catamarca\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"displayName\": \"America/Argentina/ComodRivadavia\",\n+                                        \"value\": \"America/Argentina/ComodRivadavia\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"displayName\": \"America/Argentina/Cordoba\",\n+                                        \"value\": \"America/Argentina/Cordoba\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kafka-key\": {\n-                                \"description\": \"The Key to use for the Message. If not specified, the flow file attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n-                                \"displayName\": \"Kafka Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"kafka-key\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"key-attribute-encoding\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Argentina/Jujuy\",\n+                                        \"value\": \"America/Argentina/Jujuy\"\n+                                    },\n                                     {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/La_Rioja\",\n+                                        \"value\": \"America/Argentina/La_Rioja\"\n                                     },\n                                     {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Mendoza\",\n+                                        \"value\": \"America/Argentina/Mendoza\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-demarcator\": {\n-                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n-                                \"displayName\": \"Message Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"message-demarcator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to.\",\n-                                \"displayName\": \"Partition\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"partitioner.class\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Rio_Gallegos\",\n+                                        \"value\": \"America/Argentina/Rio_Gallegos\"\n+                                    },\n                                     {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Salta\",\n+                                        \"value\": \"America/Argentina/Salta\"\n                                     },\n                                     {\n-                                        \"description\": \"Messages will be assigned to random partitions.\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/San_Juan\",\n+                                        \"value\": \"America/Argentina/San_Juan\"\n                                     },\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n-                                \"displayName\": \"Partitioner class\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/San_Luis\",\n+                                        \"value\": \"America/Argentina/San_Luis\"\n+                                    },\n                                     {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Tucuman\",\n+                                        \"value\": \"America/Argentina/Tucuman\"\n                                     },\n                                     {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Ushuaia\",\n+                                        \"value\": \"America/Argentina/Ushuaia\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Aruba\",\n+                                        \"value\": \"America/Aruba\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Asuncion\",\n+                                        \"value\": \"America/Asuncion\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"sasl.token.auth\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Atikokan\",\n+                                        \"value\": \"America/Atikokan\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Atka\",\n+                                        \"value\": \"America/Atka\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"America/Bahia\",\n+                                        \"value\": \"America/Bahia\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Bahia_Banderas\",\n+                                        \"value\": \"America/Bahia_Banderas\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Barbados\",\n+                                        \"value\": \"America/Barbados\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n+                                        \"displayName\": \"America/Belem\",\n+                                        \"value\": \"America/Belem\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n+                                        \"displayName\": \"America/Belize\",\n+                                        \"value\": \"America/Belize\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"displayName\": \"America/Blanc-Sablon\",\n+                                        \"value\": \"America/Blanc-Sablon\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"transactional-id-prefix\": {\n-                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n-                                \"displayName\": \"Transactional Id Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"transactional-id-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"use-transactions\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Boa_Vista\",\n+                                        \"value\": \"America/Boa_Vista\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Bogota\",\n+                                        \"value\": \"America/Bogota\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n-                                \"displayName\": \"Use Transactions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-transactions\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"2.0\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Send\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_0\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as a message to Apache Kafka using the Kafka 2.0 Producer API.The messages to send may be individual FlowFiles or may be delimited, using a user-specified delimiter, such as a new-line. The complementary NiFi processor for fetching messages is ConsumeKafka_2_0.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success. If the <Message Demarcator> Property is not set, this will always be 1, but if the Property is set, it may be greater than 1.\",\n-                                \"name\": \"msg.count\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-elasticsearch-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.elasticsearch.GetElasticsearch\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A URL query parameter\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-connect-timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-connect-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-response-timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n-                                \"displayName\": \"Response Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-response-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-url\": {\n-                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n-                                \"displayName\": \"Elasticsearch URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"fetch-es-doc-id\": {\n-                                \"description\": \"The identifier of the document to be fetched\",\n-                                \"displayName\": \"Document Identifier\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"fetch-es-doc-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"fetch-es-fields\": {\n-                                \"description\": \"A comma-separated list of fields to retrieve from the document. If the Fields property is left blank, then the entire document's source will be retrieved.\",\n-                                \"displayName\": \"Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"fetch-es-fields\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"fetch-es-index\": {\n-                                \"description\": \"The name of the index to read from.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"fetch-es-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"fetch-es-type\": {\n-                                \"description\": \"The type of document/fetch (if unset, the first document matching the identifier across _all types will be retrieved). This should be unset, '_doc' or '_source' for Elasticsearch 7.0+.\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"fetch-es-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"proxy-password\": {\n-                                \"description\": \"Proxy Password\",\n-                                \"displayName\": \"Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"proxy-username\": {\n-                                \"description\": \"Proxy Username\",\n-                                \"displayName\": \"Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the document cannot be fetched but attempting the operation again may succeed. Note that if the processor has no incoming connections, flow files may still be sent to this relationship based on the processor properties and the results of the fetch operation.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that are read from Elasticsearch are routed to this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be read from Elasticsearch are routed to this relationship. Note that only incoming flow files will be routed to failure.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the specified document does not exist in the Elasticsearch cluster. Note that if the processor has no incoming connections, flow files may still be sent to this relationship based on the processor properties and the results of the fetch operation.\",\n-                                \"name\": \"not found\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"elasticsearch\",\n-                            \"fetch\",\n-                            \"get\",\n-                            \"http\",\n-                            \"read\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.FetchElasticsearchHttp\",\n-                        \"typeDescription\": \"Retrieves a document from Elasticsearch using the specified connection properties and the identifier of the document to retrieve. Note that the full body of the document will be read into memory before being written to a Flow File for transfer.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The filename attribute is set to the document identifier\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch index containing the document\",\n-                                \"name\": \"es.index\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch document type\",\n-                                \"name\": \"es.type\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A URL query parameter\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-connect-timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-connect-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-response-timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n-                                \"displayName\": \"Response Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-response-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-url\": {\n-                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n-                                \"displayName\": \"Elasticsearch URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"proxy-password\": {\n-                                \"description\": \"Proxy Password\",\n-                                \"displayName\": \"Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"proxy-username\": {\n-                                \"description\": \"Proxy Username\",\n-                                \"displayName\": \"Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-batch-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The preferred number of flow files to put to the database in a single transaction. Note that the contents of the flow files will be stored in memory until the bulk operation is performed. Also the results should be returned in the same order the flow files were received.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"put-es-batch-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-id-attr\": {\n-                                \"description\": \"The name of the FlowFile attribute containing the identifier for the document. If the Index Operation is \\\"index\\\", this property may be left empty or evaluate to an empty value, in which case the document's identifier will be auto-generated by Elasticsearch. For all other Index Operations, the attribute must evaluate to a non-empty value.\",\n-                                \"displayName\": \"Identifier Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-id-attr\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-index\": {\n-                                \"description\": \"The name of the index to insert into\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-index-op\": {\n-                                \"defaultValue\": \"index\",\n-                                \"description\": \"The type of the operation used to index (create, index, update, upsert, delete)\",\n-                                \"displayName\": \"Index Operation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-index-op\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-type\": {\n-                                \"description\": \"The type of this document (required by Elasticsearch versions < 7.0 for indexing and searching). This must be unset or '_doc' for Elasticsearch 7.0+.\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that are written to Elasticsearch are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be written to Elasticsearch are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"delete\",\n-                            \"elasticsearch\",\n-                            \"http\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"update\",\n-                            \"upsert\",\n-                            \"write\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchHttp\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to Elasticsearch, using the specified parameters such as the index to insert into and the type of the document.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A URL query parameter\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, the default format 'yyyy-MM-dd' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/25/2017).\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Date Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, the default format 'HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Time Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, the default format 'yyyy-MM-dd HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/25/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Timestamp Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-connect-timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-connect-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-response-timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n-                                \"displayName\": \"Response Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-response-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-url\": {\n-                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n-                                \"displayName\": \"Elasticsearch URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"proxy-password\": {\n-                                \"description\": \"Proxy Password\",\n-                                \"displayName\": \"Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"proxy-username\": {\n-                                \"description\": \"Proxy Username\",\n-                                \"displayName\": \"Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-at-timestamp\": {\n-                                \"description\": \"The value to use as the @timestamp field (required for Elasticsearch Data Streams)\",\n-                                \"displayName\": \"@timestamp Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-at-timestamp\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-at-timestamp-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the @timestamp for the document. If left blank the @timestamp will be determined using the main @timestamp property\",\n-                                \"displayName\": \"@timestamp Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-at-timestamp-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-id-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the identifier for the document. If the Index Operation is \\\"index\\\" or \\\"create\\\", this property may be left empty or evaluate to an empty value, in which case the document's identifier will be auto-generated by Elasticsearch. For all other Index Operations, the field's value must be non-empty.\",\n-                                \"displayName\": \"Identifier Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-id-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-index\": {\n-                                \"description\": \"The name of the index to insert into\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-index-op\": {\n-                                \"defaultValue\": \"index\",\n-                                \"description\": \"The type of the operation used to index (create, index, update, upsert, delete)\",\n-                                \"displayName\": \"Index Operation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-op\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-log-all-errors\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Boise\",\n+                                        \"value\": \"America/Boise\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Buenos_Aires\",\n+                                        \"value\": \"America/Buenos_Aires\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"After sending a batch of records, Elasticsearch will report if individual records failed to insert. As an example, this can happen if the record doesn't match the mapping for the index it is being inserted into. If this is set to true, the processor will log the failure reason for the every failed record. When set to false only the first error in the batch will be logged.\",\n-                                \"displayName\": \"Log all errors in batch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-log-all-errors\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"put-es-record-record-writer\": {\n-                                \"description\": \"After sending a batch of records, Elasticsearch will report if individual records failed to insert. As an example, this can happen if the record doesn't match the mappingfor the index it is being inserted into. This property specifies the Controller Service to use for writing out those individual records sent to 'failure'. If this is not set, then the whole FlowFile will be routed to failure (including any records which may have been inserted successfully). Note that this will only be used if Elasticsearch reports that individual records failed and that in the event that the entire FlowFile fails (e.g. in the event ES is down), the FF will be routed to failure without being interpreted by this record writer. If there is an error while attempting to route the failures, the entire FlowFile will be routed to Failure. Also if every record failed individually, the entire FlowFile will be routed to Failure without being parsed by the writer.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"put-es-record-type\": {\n-                                \"description\": \"The type of this document (required by Elasticsearch versions < 7.0 for indexing and searching). This must be unset or '_doc' for Elasticsearch 7.0+.\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"suppress-nulls\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Cambridge_Bay\",\n+                                        \"value\": \"America/Cambridge_Bay\"\n+                                    },\n                                     {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will be written out as a null value\",\n-                                        \"displayName\": \"Never Suppress\",\n-                                        \"value\": \"never-suppress\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Campo_Grande\",\n+                                        \"value\": \"America/Campo_Grande\"\n                                     },\n                                     {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will not be written out\",\n-                                        \"displayName\": \"Always Suppress\",\n-                                        \"value\": \"always-suppress\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cancun\",\n+                                        \"value\": \"America/Cancun\"\n                                     },\n                                     {\n-                                        \"description\": \"When a field has a value of null, it will be written out. However, if a field is defined in the schema and not present in the record, the field will not be written out.\",\n-                                        \"displayName\": \"Suppress Missing Values\",\n-                                        \"value\": \"suppress-missing\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"never-suppress\",\n-                                \"description\": \"Specifies how the writer should handle a null field\",\n-                                \"displayName\": \"Suppress Null Values\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"suppress-nulls\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that are written to Elasticsearch are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be written to Elasticsearch are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"delete\",\n-                            \"elasticsearch\",\n-                            \"http\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"record\",\n-                            \"update\",\n-                            \"upsert\",\n-                            \"write\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchHttpRecord\",\n-                        \"typeDescription\": \"Writes the records from a FlowFile into to Elasticsearch, using the specified parameters such as the index to insert into and the type of the document, as well as the operation type (index, upsert, delete, etc.). Note: The Bulk API is used to send the records. This means that the entire contents of the incoming flow file are read into memory, and each record is transformed into a JSON document which is added to a single HTTP request body. For very large flow files (files with a large number of records, e.g.), this could cause memory usage issues.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of records in an outgoing FlowFile. This is only populated on the 'success' relationship.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records found by Elasticsearch to have errors. This is only populated on the 'failure' relationship.\",\n-                                \"name\": \"failure.count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A URL query parameter\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-connect-timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-connect-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-response-timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n-                                \"displayName\": \"Response Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-response-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-url\": {\n-                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n-                                \"displayName\": \"Elasticsearch URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"proxy-password\": {\n-                                \"description\": \"Proxy Password\",\n-                                \"displayName\": \"Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"proxy-username\": {\n-                                \"description\": \"Proxy Username\",\n-                                \"displayName\": \"Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"query-es-fields\": {\n-                                \"description\": \"A comma-separated list of fields to retrieve from the document. If the Fields property is left blank, then the entire document's source will be retrieved.\",\n-                                \"displayName\": \"Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"query-es-fields\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"query-es-index\": {\n-                                \"description\": \"The name of the index to read from. If the property is unset or set to _all, the query will match across all indexes.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"query-es-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"query-es-limit\": {\n-                                \"description\": \"If set, limits the number of results that will be returned.\",\n-                                \"displayName\": \"Limit\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"query-es-limit\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"query-es-query\": {\n-                                \"description\": \"The Lucene-style query to run against ElasticSearch (e.g., genre:blues AND -artist:muddy)\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"query-es-query\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"query-es-size\": {\n-                                \"defaultValue\": \"20\",\n-                                \"description\": \"Determines how many documents to return per page during scrolling.\",\n-                                \"displayName\": \"Page Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"query-es-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"query-es-sort\": {\n-                                \"description\": \"A sort parameter (e.g., timestamp:asc). If the Sort property is left blank, then the results will be retrieved in document order.\",\n-                                \"displayName\": \"Sort\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"query-es-sort\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"query-es-target\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Caracas\",\n+                                        \"value\": \"America/Caracas\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Flow file content\",\n-                                        \"value\": \"Flow file content\"\n+                                        \"displayName\": \"America/Catamarca\",\n+                                        \"value\": \"America/Catamarca\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Flow file attributes\",\n-                                        \"value\": \"Flow file attributes\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Flow file content\",\n-                                \"description\": \"Indicates where the results should be placed.  In the case of 'Flow file content', the JSON response will be written as the content of the flow file.  In the case of 'Flow file attributes', the original flow file (if applicable) will be cloned for each result, and all return fields will be placed in a flow file attribute of the same name, but prefixed by 'es.result.'\",\n-                                \"displayName\": \"Target\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"query-es-target\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"query-es-type\": {\n-                                \"description\": \"The type of document (if unset, the query will be against all types in the _index). This should be unset or '_doc' for Elasticsearch 7.0+.\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"query-es-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"routing-query-info-strategy\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Cayenne\",\n+                                        \"value\": \"America/Cayenne\"\n+                                    },\n                                     {\n-                                        \"description\": \"Always route Query Info\",\n-                                        \"displayName\": \"Always\",\n-                                        \"value\": \"ALWAYS\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cayman\",\n+                                        \"value\": \"America/Cayman\"\n                                     },\n                                     {\n-                                        \"description\": \"Never route Query Info\",\n-                                        \"displayName\": \"Never\",\n-                                        \"value\": \"NEVER\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Chicago\",\n+                                        \"value\": \"America/Chicago\"\n                                     },\n                                     {\n-                                        \"description\": \"Route Query Info if the Query returns no hits\",\n-                                        \"displayName\": \"No Hits\",\n-                                        \"value\": \"NOHIT\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Chihuahua\",\n+                                        \"value\": \"America/Chihuahua\"\n                                     },\n                                     {\n-                                        \"description\": \"Always append Query Info as attributes, using the existing relationships (does not add the Query Info relationship).\",\n-                                        \"displayName\": \"Append as Attributes\",\n-                                        \"value\": \"APPEND_AS_ATTRIBUTES\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NEVER\",\n-                                \"description\": \"Specifies when to generate and route Query Info after a successful query\",\n-                                \"displayName\": \"Routing Strategy for Query Info\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"routing-query-info-strategy\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the document cannot be fetched but attempting the operation again may succeed. Note that if the processor has no incoming connections, flow files may still be sent to this relationship based on the processor properties and the results of the fetch operation.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that are read from Elasticsearch are routed to this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be read from Elasticsearch are routed to this relationship. Note that only incoming flow files will be routed to failure.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"elasticsearch\",\n-                            \"get\",\n-                            \"http\",\n-                            \"query\",\n-                            \"read\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.QueryElasticsearchHttp\",\n-                        \"typeDescription\": \"Queries Elasticsearch using the specified connection properties. Note that the full body of each page of documents will be read into memory before being written to Flow Files for transfer.  Also note that the Elasticsearch max_result_window index setting is the upper bound on the number of records that can be retrieved using this query.  To retrieve more records, use the ScrollElasticsearchHttp processor.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The filename attribute is set to the document identifier\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The number of hits for a query\",\n-                                \"name\": \"es.query.hitcount\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch document identifier\",\n-                                \"name\": \"es.id\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch index containing the document\",\n-                                \"name\": \"es.index\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch query that was built\",\n-                                \"name\": \"es.query.url\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch document type\",\n-                                \"name\": \"es.type\"\n-                            },\n-                            {\n-                                \"description\": \"If Target is 'Flow file attributes', the JSON attributes of each result will be placed into corresponding attributes with this prefix.\",\n-                                \"name\": \"es.result.*\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A URL query parameter\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-connect-timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-connect-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-response-timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n-                                \"displayName\": \"Response Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-response-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-url\": {\n-                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n-                                \"displayName\": \"Elasticsearch URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"proxy-password\": {\n-                                \"description\": \"Proxy Password\",\n-                                \"displayName\": \"Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"proxy-username\": {\n-                                \"description\": \"Proxy Username\",\n-                                \"displayName\": \"Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"scroll-es-fields\": {\n-                                \"description\": \"A comma-separated list of fields to retrieve from the document. If the Fields property is left blank, then the entire document's source will be retrieved.\",\n-                                \"displayName\": \"Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scroll-es-fields\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"scroll-es-index\": {\n-                                \"description\": \"The name of the index to read from. If the property is set to _all, the query will match across all indexes.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scroll-es-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"scroll-es-query\": {\n-                                \"description\": \"The Lucene-style query to run against ElasticSearch (e.g., genre:blues AND -artist:muddy)\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scroll-es-query\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"scroll-es-scroll\": {\n-                                \"defaultValue\": \"1m\",\n-                                \"description\": \"The scroll duration is how long each search context is kept in memory.\",\n-                                \"displayName\": \"Scroll Duration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scroll-es-scroll\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"scroll-es-size\": {\n-                                \"defaultValue\": \"20\",\n-                                \"description\": \"Determines how many documents to return per page during scrolling.\",\n-                                \"displayName\": \"Page Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scroll-es-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"scroll-es-sort\": {\n-                                \"description\": \"A sort parameter (e.g., timestamp:asc). If the Sort property is left blank, then the results will be retrieved in document order.\",\n-                                \"displayName\": \"Sort\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scroll-es-sort\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"scroll-es-type\": {\n-                                \"description\": \"The type of document (if unset, the query will be against all types in the _index). This should be unset or '_doc' for Elasticsearch 7.0+.\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scroll-es-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After each successful scroll page, the latest scroll_id is persisted in scrollId as input for the next scroll call.  Once the entire query is complete, finishedQuery state will be set to true, and the processor will not execute unless this is cleared.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are read from Elasticsearch are routed to this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be read from Elasticsearch are routed to this relationship. Note that only incoming flow files will be routed to failure.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"elasticsearch\",\n-                            \"get\",\n-                            \"http\",\n-                            \"query\",\n-                            \"read\",\n-                            \"scroll\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.ScrollElasticsearchHttp\",\n-                        \"typeDescription\": \"Scrolls through an Elasticsearch query using the specified connection properties. This processor is intended to be run on the primary node, and is designed for scrolling through huge result sets, as in the case of a reindex.  The state must be cleared before another query can be run.  Each page of results is returned, wrapped in a JSON object like so: { \\\"hits\\\" : [ <doc1>, <doc2>, <docn> ] }.  Note that the full body of each page of documents will be read into memory before being written to a Flow File for transfer.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The Elasticsearch index containing the document\",\n-                                \"name\": \"es.index\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch document type\",\n-                                \"name\": \"es.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-stateful-analysis-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-stateful-analysis-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Sub-window length\": {\n-                                \"description\": \"When set, values will be batched into sub-windows of the set length. This allows for much larger length total windows to be set but sacrifices some precision. If this is not set (or is 0) then each value is stored in state with the timestamp of when it was received. After the length of time stated in Time window elaspes the value will be removed. If this is set, values will be batched together every X amount of time (where X is the time period set for this property) and removed all at once.\",\n-                                \"displayName\": \"Sub-window length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Sub-window length\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time window\": {\n-                                \"description\": \"The time window on which to calculate the rolling window.\",\n-                                \"displayName\": \"Time window\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time window\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Value to track\": {\n-                                \"description\": \"The expression on which to evaluate each FlowFile. The result of the expression will be added to the rolling window value.\",\n-                                \"displayName\": \"Value to track\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Value to track\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Store the values backing the rolling window. This includes storing the individual values and their time-stamps or the batches of values and their counts.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"When state fails to save when processing a FlowFile, the FlowFile is routed here.\",\n-                                \"name\": \"set state fail\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles are successfully processed are routed here\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"When a FlowFile fails for a reason other than failing to set state it is routed here.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"data science\",\n-                            \"rolling\",\n-                            \"state\",\n-                            \"window\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.stateful.analysis.AttributeRollingWindow\",\n-                        \"typeDescription\": \"Track a Rolling Window based on evaluating an Expression Language expression on each FlowFile and add that value to the processor's state. Each FlowFile will be emitted with the count of FlowFiles and total aggregate value of values processed in the current time window.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The rolling window value (sum of all the values stored).\",\n-                                \"name\": \"rolling_window_value\"\n-                            },\n-                            {\n-                                \"description\": \"The count of the number of FlowFiles seen in the rolling window.\",\n-                                \"name\": \"rolling_window_count\"\n-                            },\n-                            {\n-                                \"description\": \"The mean of the FlowFiles seen in the rolling window.\",\n-                                \"name\": \"rolling_window_mean\"\n-                            },\n-                            {\n-                                \"description\": \"The variance of the FlowFiles seen in the rolling window.\",\n-                                \"name\": \"rolling_window_variance\"\n-                            },\n-                            {\n-                                \"description\": \"The standard deviation (positive square root of the variance) of the FlowFiles seen in the rolling window.\",\n-                                \"name\": \"rolling_window_stddev\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cybersecurity-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cybersecurity-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"ATTRIBUTE_NAME\": {\n-                                \"defaultValue\": \"fuzzyhash.value\",\n-                                \"description\": \"The name of the FlowFile Attribute that should hold the Fuzzy Hash Value\",\n-                                \"displayName\": \"Hash Attribute Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ATTRIBUTE_NAME\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"HASH_ALGORITHM\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Ciudad_Juarez\",\n+                                        \"value\": \"America/Ciudad_Juarez\"\n+                                    },\n                                     {\n-                                        \"description\": \"Uses ssdeep / SpamSum 'context triggered piecewise hash'.\",\n-                                        \"displayName\": \"ssdeep\",\n-                                        \"value\": \"ssdeep\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Coral_Harbour\",\n+                                        \"value\": \"America/Coral_Harbour\"\n                                     },\n                                     {\n-                                        \"description\": \"Uses TLSH (Trend 'Locality Sensitive Hash'). Note: FlowFile Content must be at least 512 characters long\",\n-                                        \"displayName\": \"tlsh\",\n-                                        \"value\": \"tlsh\"\n-                                    }\n-                                ],\n-                                \"description\": \"The hashing algorithm utilised\",\n-                                \"displayName\": \"Hashing Algorithm\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HASH_ALGORITHM\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"HASH_LIST_FILE\": {\n-                                \"description\": \"Path to the file containing hashes to be validated against\",\n-                                \"displayName\": \"Hash List Source File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HASH_LIST_FILE\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"MATCHING_MODE\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cordoba\",\n+                                        \"value\": \"America/Cordoba\"\n+                                    },\n                                     {\n-                                        \"description\": \"Send FlowFile to matched after the first match above threshold\",\n-                                        \"displayName\": \"single\",\n-                                        \"value\": \"single\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Costa_Rica\",\n+                                        \"value\": \"America/Costa_Rica\"\n                                     },\n                                     {\n-                                        \"description\": \"Iterate full list of hashes before deciding to send FlowFile to matched or unmatched\",\n-                                        \"displayName\": \"multi-match\",\n-                                        \"value\": \"multi-match\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"single\",\n-                                \"description\": \"Defines if the Processor should try to match as many entries as possible (multi-match) or if it should stop after the first match (single)\",\n-                                \"displayName\": \"Matching Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"MATCHING_MODE\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"MATCH_THRESHOLD\": {\n-                                \"description\": \"The similarity score must exceed or be equal to in order formatch to be considered true. Refer to Additional Information for differences between TLSH and SSDEEP scores and how they relate to this property.\",\n-                                \"displayName\": \"Match Threshold\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"MATCH_THRESHOLD\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.cybersecurity.FuzzyHashContent\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be matched, e.g. (lacks the attribute) will be sent to this Relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be matched to an existing hash will be sent to this Relationship.\",\n-                                \"name\": \"not-found\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully matched to an existing hash will be sent to this Relationship.\",\n-                                \"name\": \"found\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cyber-security\",\n-                            \"fuzzy-hashing\",\n-                            \"hashing\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cybersecurity.CompareFuzzyHash\",\n-                        \"typeDescription\": \"Compares an attribute containing a Fuzzy Hash against a file containing a list of fuzzy hashes, appending an attribute to the FlowFile in case of a successful match.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The match that resembles the attribute specified by the <Hash Attribute Name> property. Note that: 'XXX' gets replaced with the <Hash Attribute Name>\",\n-                                \"name\": \"XXXX.N.match\"\n-                            },\n-                            {\n-                                \"description\": \"The similarity score between this flowfileand its match of the same number N. Note that: 'XXX' gets replaced with the <Hash Attribute Name>\",\n-                                \"name\": \"XXXX.N.similarity\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cybersecurity-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"ATTRIBUTE_NAME\": {\n-                                \"defaultValue\": \"fuzzyhash.value\",\n-                                \"description\": \"The name of the FlowFile Attribute that should hold the Fuzzy Hash Value\",\n-                                \"displayName\": \"Hash Attribute Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ATTRIBUTE_NAME\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"HASH_ALGORITHM\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Creston\",\n+                                        \"value\": \"America/Creston\"\n+                                    },\n                                     {\n-                                        \"description\": \"Uses ssdeep / SpamSum 'context triggered piecewise hash'.\",\n-                                        \"displayName\": \"ssdeep\",\n-                                        \"value\": \"ssdeep\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cuiaba\",\n+                                        \"value\": \"America/Cuiaba\"\n                                     },\n                                     {\n-                                        \"description\": \"Uses TLSH (Trend 'Locality Sensitive Hash'). Note: FlowFile Content must be at least 512 characters long\",\n-                                        \"displayName\": \"tlsh\",\n-                                        \"value\": \"tlsh\"\n-                                    }\n-                                ],\n-                                \"description\": \"The hashing algorithm utilised\",\n-                                \"displayName\": \"Hashing Algorithm\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HASH_ALGORITHM\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.cybersecurity.CompareFuzzyHash\",\n-                            \"org.apache.nifi.processors.standard.HashContent\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully hashed will be sent to this Relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully hashed will be sent to this Relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cyber-security\",\n-                            \"fuzzy-hashing\",\n-                            \"hashing\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cybersecurity.FuzzyHashContent\",\n-                        \"typeDescription\": \"Calculates a fuzzy/locality-sensitive hash value for the Content of a FlowFile and puts that hash value on the FlowFile as an attribute whose name is determined by the <Hash Attribute Name> property.Note: this processor only offers non-cryptographic hash algorithms. And it should be not be seen as a replacement to the HashContent processor.Note: The underlying library loads the entirety of the streamed content into and performs result evaluations in memory. Accordingly, it is important to consider the anticipated profile of content being evaluated by this processor and the hardware supporting it especially when working against large files.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"This Processor adds an attribute whose value is the result of Hashing the existing FlowFile content. The name of this attribute is specified by the <Hash Attribute Name> property\",\n-                                \"name\": \"<Hash Attribute Name>\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hwx-schema-registry-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hwx-schema-registry-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"This controller service is deprecated and will be removed in NiFi 2.x.\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"basic-auth-password\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Curacao\",\n+                                        \"value\": \"America/Curacao\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"ssl-context-service\"\n-                                    }\n-                                ],\n-                                \"description\": \"The password to use for basic authentication when the Schema Registry is behind a proxy such as Apache Knox.\",\n-                                \"displayName\": \"Basic Authentication Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"basic-auth-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"basic-auth-username\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Danmarkshavn\",\n+                                        \"value\": \"America/Danmarkshavn\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"ssl-context-service\"\n-                                    }\n-                                ],\n-                                \"description\": \"The username to use for basic authentication when the Schema Registry is behind a proxy such as Apache Knox.\",\n-                                \"displayName\": \"Basic Authentication Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"basic-auth-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cache-expiration\": {\n-                                \"defaultValue\": \"1 hour\",\n-                                \"description\": \"Specifies how long a Schema that is cached should remain in the cache. Once this time period elapses, a cached version of a schema will no longer be used, and the service will have to communicate with the Hortonworks Schema Registry again in order to obtain the schema.\",\n-                                \"displayName\": \"Cache Expiration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-expiration\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached from the Hortonworks Schema Registry\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password for the kerberos principal when not using the kerberos credentials service\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The kerberos principal to authenticate with when not using the kerberos credentials service\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kerberos-principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"Specifies the SSL Context Service to use for communicating with Schema Registry.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"url\": {\n-                                \"description\": \"URL of the schema registry that this Controller Service should connect to, including version. For example, http://localhost:9090/api/v1\",\n-                                \"displayName\": \"Schema Registry URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"hortonworks\",\n-                            \"hwx\",\n-                            \"registry\",\n-                            \"schema\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.schemaregistry.hortonworks.HortonworksSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a Schema Registry Service that interacts with a Hortonworks Schema Registry, available at https://github.com/hortonworks/registry\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-record-serialization-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Dawson\",\n+                                        \"value\": \"America/Dawson\"\n+                                    },\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Dawson_Creek\",\n+                                        \"value\": \"America/Dawson_Creek\"\n                                     },\n                                     {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Denver\",\n+                                        \"value\": \"America/Denver\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Detroit\",\n+                                        \"value\": \"America/Detroit\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Dominica\",\n+                                        \"value\": \"America/Dominica\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Edmonton\",\n+                                        \"value\": \"America/Edmonton\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile has the Avro Schema embedded within the content, and this schema will be used.\",\n-                                        \"displayName\": \"Use Embedded Avro Schema\",\n-                                        \"value\": \"embedded-avro-schema\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"embedded-avro-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Eirunepe\",\n+                                        \"value\": \"America/Eirunepe\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/El_Salvador\",\n+                                        \"value\": \"America/El_Salvador\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Ensenada\",\n+                                        \"value\": \"America/Ensenada\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Fort_Nelson\",\n+                                        \"value\": \"America/Fort_Nelson\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Fort_Wayne\",\n+                                        \"value\": \"America/Fort_Wayne\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"comma\",\n-                            \"delimited\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"row\",\n-                            \"separated\",\n-                            \"values\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.avro.AvroReader\",\n-                        \"typeDescription\": \"Parses Avro data and returns each Avro record as an separate Record object. The Avro data may contain the schema itself, or the schema can be externalized and accessed by one of the methods offered by the 'Schema Access Strategy' property.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Schema Write Strategy\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Fortaleza\",\n+                                        \"value\": \"America/Fortaleza\"\n+                                    },\n                                     {\n-                                        \"description\": \"The FlowFile will have the Avro schema embedded into the content, as is typical with Avro\",\n-                                        \"displayName\": \"Embed Avro Schema\",\n-                                        \"value\": \"avro-embedded\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Glace_Bay\",\n+                                        \"value\": \"America/Glace_Bay\"\n                                     },\n                                     {\n-                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n-                                        \"displayName\": \"Do Not Write Schema\",\n-                                        \"value\": \"no-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Godthab\",\n+                                        \"value\": \"America/Godthab\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n-                                        \"displayName\": \"Set 'schema.name' Attribute\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Goose_Bay\",\n+                                        \"value\": \"America/Goose_Bay\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n-                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n-                                        \"value\": \"full-schema-attribute\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Grand_Turk\",\n+                                        \"value\": \"America/Grand_Turk\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Grenada\",\n+                                        \"value\": \"America/Grenada\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Guadeloupe\",\n+                                        \"value\": \"America/Guadeloupe\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Schema Registry Reference\",\n-                                        \"value\": \"confluent-encoded\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"avro-embedded\",\n-                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n-                                \"displayName\": \"Schema Write Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Write Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"compression-format\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Guatemala\",\n+                                        \"value\": \"America/Guatemala\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BZIP2\",\n-                                        \"value\": \"BZIP2\"\n+                                        \"displayName\": \"America/Guayaquil\",\n+                                        \"value\": \"America/Guayaquil\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DEFLATE\",\n-                                        \"value\": \"DEFLATE\"\n+                                        \"displayName\": \"America/Guyana\",\n+                                        \"value\": \"America/Guyana\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"America/Halifax\",\n+                                        \"value\": \"America/Halifax\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n+                                        \"displayName\": \"America/Havana\",\n+                                        \"value\": \"America/Havana\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Compression type to use when writing Avro files. Default is None.\",\n-                                \"displayName\": \"Compression Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"encoder-pool-size\": {\n-                                \"defaultValue\": \"32\",\n-                                \"description\": \"Avro Writers require the use of an Encoder. Creation of Encoders is expensive, but once created, they can be reused. This property controls the maximum number of Encoders that can be pooled and reused. Setting this value too small can result in degraded performance, but setting it higher can result in more heap being used. This property is ignored if the Avro Writer is configured with a Schema Write Strategy of 'Embed Avro Schema'.\",\n-                                \"displayName\": \"Encoder Pool Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"encoder-pool-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Hermosillo\",\n+                                        \"value\": \"America/Hermosillo\"\n+                                    },\n                                     {\n-                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n-                                        \"displayName\": \"Inherit Record Schema\",\n-                                        \"value\": \"inherit-record-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Indianapolis\",\n+                                        \"value\": \"America/Indiana/Indianapolis\"\n                                     },\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Knox\",\n+                                        \"value\": \"America/Indiana/Knox\"\n                                     },\n                                     {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"inherit-record-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Marengo\",\n+                                        \"value\": \"America/Indiana/Marengo\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-cache\": {\n-                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n-                                \"displayName\": \"Schema Cache\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Petersburg\",\n+                                        \"value\": \"America/Indiana/Petersburg\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-protocol-version\": {\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Tell_City\",\n+                                        \"value\": \"America/Indiana/Tell_City\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n-                                        \"propertyName\": \"Schema Write Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n-                                \"displayName\": \"Schema Protocol Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-protocol-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Vevay\",\n+                                        \"value\": \"America/Indiana/Vevay\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Vincennes\",\n+                                        \"value\": \"America/Indiana/Vincennes\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Winamac\",\n+                                        \"value\": \"America/Indiana/Winamac\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"result\",\n-                            \"row\",\n-                            \"serializer\",\n-                            \"set\",\n-                            \"writer\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.avro.AvroRecordSetWriter\",\n-                        \"typeDescription\": \"Writes the contents of a RecordSet in Binary Avro format.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"accept-empty-extensions\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indianapolis\",\n+                                        \"value\": \"America/Indianapolis\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Inuvik\",\n+                                        \"value\": \"America/Inuvik\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, empty extensions will be accepted and will be associated to a null value.\",\n-                                \"displayName\": \"Accept empty extensions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"accept-empty-extensions\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"datetime-representation\": {\n-                                \"defaultValue\": \"en-US\",\n-                                \"description\": \"The IETF BCP 47 representation of the Locale to be used when parsing date fields with long or short month names (e.g. may <en-US> vs. mai. <fr-FR>. The defaultvalue is generally safe. Only change if having issues parsing CEF messages\",\n-                                \"displayName\": \"DateTime Locale\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"datetime-representation\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"inference-strategy\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Iqaluit\",\n+                                        \"value\": \"America/Iqaluit\"\n+                                    },\n                                     {\n-                                        \"description\": \"Includes only CEF header fields into the inferred schema.\",\n-                                        \"displayName\": \"Headers only\",\n-                                        \"value\": \"headers-only\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Jamaica\",\n+                                        \"value\": \"America/Jamaica\"\n                                     },\n                                     {\n-                                        \"description\": \"Includes the CEF header and extension fields to the schema, but not the custom extensions.\",\n-                                        \"displayName\": \"Headers and extensions\",\n-                                        \"value\": \"headers-and-extensions\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Jujuy\",\n+                                        \"value\": \"America/Jujuy\"\n                                     },\n                                     {\n-                                        \"description\": \"Includes all fields into the inferred schema, involving custom extension fields as string values.\",\n-                                        \"displayName\": \"With custom extensions as strings\",\n-                                        \"value\": \"custom-extensions-as-string\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Juneau\",\n+                                        \"value\": \"America/Juneau\"\n                                     },\n                                     {\n-                                        \"description\": \"Includes all fields into the inferred schema, involving custom extension fields with inferred data types. The inference works based on the values in the FlowFile. In some scenarios this might result unsatisfiable behaviour. In these cases it is suggested to use \\\"With custom extensions as strings\\\" Inference Strategy or predefined schema.\",\n-                                        \"displayName\": \"With custom extensions inferred\",\n-                                        \"value\": \"custom-extensions-inferred\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"custom-extensions-inferred\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Kentucky/Louisville\",\n+                                        \"value\": \"America/Kentucky/Louisville\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"infer-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Defines the set of fields should be included in the schema and the way the fields are being interpreted.\",\n-                                \"displayName\": \"Inference Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"inference-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"invalid-message-field\": {\n-                                \"description\": \"Used when a line in the FlowFile cannot be parsed by the CEF parser. If set, instead of failing to process the FlowFile, a record is being added with one field. This record contains one field with the name specified by the property and the raw message as value.\",\n-                                \"displayName\": \"Invalid Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"invalid-message-field\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"raw-message-field\": {\n-                                \"description\": \"If set the raw message will be added to the record using the property value as field name. This is not the same as the \\\"rawEvent\\\" extension field!\",\n-                                \"displayName\": \"Raw Message Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"raw-message-field\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Kentucky/Monticello\",\n+                                        \"value\": \"America/Kentucky/Monticello\"\n+                                    },\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Knox_IN\",\n+                                        \"value\": \"America/Knox_IN\"\n                                     },\n                                     {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Kralendijk\",\n+                                        \"value\": \"America/Kralendijk\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/La_Paz\",\n+                                        \"value\": \"America/La_Paz\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Lima\",\n+                                        \"value\": \"America/Lima\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Los_Angeles\",\n+                                        \"value\": \"America/Los_Angeles\"\n                                     },\n                                     {\n-                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n-                                        \"displayName\": \"Infer Schema\",\n-                                        \"value\": \"infer-schema\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"infer-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Louisville\",\n+                                        \"value\": \"America/Louisville\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-inference-cache\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Lower_Princes\",\n+                                        \"value\": \"America/Lower_Princes\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"infer-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies a Schema Cache to use when inferring the schema. If not populated, the schema will be inferred each time. However, if a cache is specified, the cache will first be consulted and if the applicable schema can be found, it will be used instead of inferring the schema.\",\n-                                \"displayName\": \"Schema Inference Cache\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-inference-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Maceio\",\n+                                        \"value\": \"America/Maceio\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Managua\",\n+                                        \"value\": \"America/Managua\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Manaus\",\n+                                        \"value\": \"America/Manaus\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Marigot\",\n+                                        \"value\": \"America/Marigot\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cef\",\n-                            \"parser\",\n-                            \"reader\",\n-                            \"record\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.cef.CEFReader\",\n-                        \"typeDescription\": \"Parses CEF (Common Event Format) events, returning each row as a record. This reader allows for inferring a schema based on the first event in the FlowFile or providing an explicit schema for interpreting the values.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"CSV Format\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Martinique\",\n+                                        \"value\": \"America/Martinique\"\n+                                    },\n                                     {\n-                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n-                                        \"displayName\": \"Custom Format\",\n-                                        \"value\": \"custom\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Matamoros\",\n+                                        \"value\": \"America/Matamoros\"\n                                     },\n                                     {\n-                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n-                                        \"displayName\": \"RFC 4180\",\n-                                        \"value\": \"rfc-4180\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Mazatlan\",\n+                                        \"value\": \"America/Mazatlan\"\n                                     },\n                                     {\n-                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n-                                        \"displayName\": \"Microsoft Excel\",\n-                                        \"value\": \"excel\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Mendoza\",\n+                                        \"value\": \"America/Mendoza\"\n                                     },\n                                     {\n-                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n-                                        \"displayName\": \"Tab-Delimited\",\n-                                        \"value\": \"tdf\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Menominee\",\n+                                        \"value\": \"America/Menominee\"\n                                     },\n                                     {\n-                                        \"description\": \"CSV data follows the format used by MySQL\",\n-                                        \"displayName\": \"MySQL Format\",\n-                                        \"value\": \"mysql\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Merida\",\n+                                        \"value\": \"America/Merida\"\n                                     },\n                                     {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n-                                        \"displayName\": \"Informix Unload\",\n-                                        \"value\": \"informix-unload\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Metlakatla\",\n+                                        \"value\": \"America/Metlakatla\"\n                                     },\n                                     {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n-                                        \"displayName\": \"Informix Unload Escape Disabled\",\n-                                        \"value\": \"informix-unload-csv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"custom\",\n-                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n-                                \"displayName\": \"CSV Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CSV Format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Comment Marker\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Mexico_City\",\n+                                        \"value\": \"America/Mexico_City\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n-                                \"displayName\": \"Comment Marker\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Comment Marker\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Escape Character\": {\n-                                \"defaultValue\": \"\\\\\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Miquelon\",\n+                                        \"value\": \"America/Miquelon\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n-                                \"displayName\": \"Escape Character\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Null String\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Moncton\",\n+                                        \"value\": \"America/Moncton\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies a String that, if present as a value in the CSV, should be considered a null field instead of using the literal value.\",\n-                                \"displayName\": \"Null String\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null String\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Quote Character\": {\n-                                \"defaultValue\": \"\\\"\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Monterrey\",\n+                                        \"value\": \"America/Monterrey\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n-                                \"displayName\": \"Quote Character\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Record Separator\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Montevideo\",\n+                                        \"value\": \"America/Montevideo\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the characters to use in order to separate CSV Records\",\n-                                \"displayName\": \"Record Separator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Separator\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Skip Header Line\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Montreal\",\n+                                        \"value\": \"America/Montreal\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Montserrat\",\n+                                        \"value\": \"America/Montserrat\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the first line of CSV should be considered a Header or should be considered a record. If the Schema Access Strategy indicates that the columns must be defined in the header, then this property will be ignored, since the header must always be present and won't be processed as a Record. Otherwise, if 'true', then the first line of CSV data will not be processed as a record and if 'false',then the first line will be interpreted as a record.\",\n-                                \"displayName\": \"Treat First Line as Header\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Skip Header Line\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Trim Fields\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Nassau\",\n+                                        \"value\": \"America/Nassau\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/New_York\",\n+                                        \"value\": \"America/New_York\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"America/Nipigon\",\n+                                        \"value\": \"America/Nipigon\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim Fields\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Trim double quote\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Nome\",\n+                                        \"value\": \"America/Nome\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Noronha\",\n+                                        \"value\": \"America/Noronha\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"America/North_Dakota/Beulah\",\n+                                        \"value\": \"America/North_Dakota/Beulah\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"rfc-4180\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether or not to trim starting and ending double quotes. For example: with trim string '\\\"test\\\"' would be parsed to 'test', without trim would be parsed to '\\\"test\\\"'.If set to 'false' it means full compliance with RFC-4180. Default value is true, with trim.\",\n-                                \"displayName\": \"Trim double quote\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim double quote\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Value Separator\": {\n-                                \"defaultValue\": \",\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/North_Dakota/Center\",\n+                                        \"value\": \"America/North_Dakota/Center\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n-                                \"displayName\": \"Value Separator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"csv-reader-csv-parser\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/North_Dakota/New_Salem\",\n+                                        \"value\": \"America/North_Dakota/New_Salem\"\n+                                    },\n                                     {\n-                                        \"description\": \"The CSV parser implementation from the Apache Commons CSV library.\",\n-                                        \"displayName\": \"Apache Commons CSV\",\n-                                        \"value\": \"commons-csv\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Nuuk\",\n+                                        \"value\": \"America/Nuuk\"\n                                     },\n                                     {\n-                                        \"description\": \"The CSV parser implementation from the Jackson Dataformats library.\",\n-                                        \"displayName\": \"Jackson CSV\",\n-                                        \"value\": \"jackson-csv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"commons-csv\",\n-                                \"description\": \"Specifies which parser to use to read CSV records. NOTE: Different parsers may support different subsets of functionality and may also exhibit different levels of performance.\",\n-                                \"displayName\": \"CSV Parser\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"csv-reader-csv-parser\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"csvutils-allow-duplicate-header-names\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Ojinaga\",\n+                                        \"value\": \"America/Ojinaga\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Panama\",\n+                                        \"value\": \"America/Panama\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"America/Pangnirtung\",\n+                                        \"value\": \"America/Pangnirtung\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether duplicate header names are allowed. Header names are case-sensitive, for example \\\"name\\\" and \\\"Name\\\" are treated as separate fields. Handling of duplicate header names is CSV Parser specific (where applicable):\\n* Apache Commons CSV - duplicate headers will result in column data \\\"shifting\\\" right with new fields created for \\\"unknown_field_index_X\\\" where \\\"X\\\" is the CSV column index number\\n* Jackson CSV - duplicate headers will be de-duplicated with the field value being that of the right-most duplicate CSV column\",\n-                                \"displayName\": \"Allow Duplicate Header Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"csvutils-allow-duplicate-header-names\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"csvutils-character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to encode/decode the CSV file\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"csvutils-character-set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ignore-csv-header\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Paramaribo\",\n+                                        \"value\": \"America/Paramaribo\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Phoenix\",\n+                                        \"value\": \"America/Phoenix\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If the first line of a CSV is a header, and the configured schema does not match the fields named in the header line, this controls how the Reader will interpret the fields. If this property is true, then the field names mapped to each column are driven only by the configured schema and any fields not in the schema will be ignored. If this property is false, then the field names found in the CSV Header will be used as the names of the fields.\",\n-                                \"displayName\": \"Ignore CSV Header Column Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ignore-csv-header\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Port-au-Prince\",\n+                                        \"value\": \"America/Port-au-Prince\"\n+                                    },\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Port_of_Spain\",\n+                                        \"value\": \"America/Port_of_Spain\"\n                                     },\n                                     {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Porto_Acre\",\n+                                        \"value\": \"America/Porto_Acre\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Porto_Velho\",\n+                                        \"value\": \"America/Porto_Velho\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Puerto_Rico\",\n+                                        \"value\": \"America/Puerto_Rico\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Punta_Arenas\",\n+                                        \"value\": \"America/Punta_Arenas\"\n                                     },\n                                     {\n-                                        \"description\": \"The first non-comment line of the CSV file is a header line that contains the names of the columns. The schema will be derived by using the column names in the header and assuming that all columns are of type String.\",\n-                                        \"displayName\": \"Use String Fields From Header\",\n-                                        \"value\": \"csv-header-derived\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rainy_River\",\n+                                        \"value\": \"America/Rainy_River\"\n                                     },\n                                     {\n-                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n-                                        \"displayName\": \"Infer Schema\",\n-                                        \"value\": \"infer-schema\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"infer-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rankin_Inlet\",\n+                                        \"value\": \"America/Rankin_Inlet\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Recife\",\n+                                        \"value\": \"America/Recife\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Regina\",\n+                                        \"value\": \"America/Regina\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Resolute\",\n+                                        \"value\": \"America/Resolute\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rio_Branco\",\n+                                        \"value\": \"America/Rio_Branco\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"comma\",\n-                            \"csv\",\n-                            \"delimited\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"row\",\n-                            \"separated\",\n-                            \"values\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.csv.CSVReader\",\n-                        \"typeDescription\": \"Parses CSV-formatted data, returning each row in the CSV file as a separate record. This reader allows for inferring a schema based on the first line of the CSV, if a 'header line' is present, or providing an explicit schema for interpreting the values. See Controller Service's Usage for further documentation.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"CSV Format\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rosario\",\n+                                        \"value\": \"America/Rosario\"\n+                                    },\n                                     {\n-                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n-                                        \"displayName\": \"Custom Format\",\n-                                        \"value\": \"custom\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santa_Isabel\",\n+                                        \"value\": \"America/Santa_Isabel\"\n                                     },\n                                     {\n-                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n-                                        \"displayName\": \"RFC 4180\",\n-                                        \"value\": \"rfc-4180\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santarem\",\n+                                        \"value\": \"America/Santarem\"\n                                     },\n                                     {\n-                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n-                                        \"displayName\": \"Microsoft Excel\",\n-                                        \"value\": \"excel\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santiago\",\n+                                        \"value\": \"America/Santiago\"\n                                     },\n                                     {\n-                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n-                                        \"displayName\": \"Tab-Delimited\",\n-                                        \"value\": \"tdf\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santo_Domingo\",\n+                                        \"value\": \"America/Santo_Domingo\"\n                                     },\n                                     {\n-                                        \"description\": \"CSV data follows the format used by MySQL\",\n-                                        \"displayName\": \"MySQL Format\",\n-                                        \"value\": \"mysql\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Sao_Paulo\",\n+                                        \"value\": \"America/Sao_Paulo\"\n                                     },\n                                     {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n-                                        \"displayName\": \"Informix Unload\",\n-                                        \"value\": \"informix-unload\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Scoresbysund\",\n+                                        \"value\": \"America/Scoresbysund\"\n                                     },\n                                     {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n-                                        \"displayName\": \"Informix Unload Escape Disabled\",\n-                                        \"value\": \"informix-unload-csv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"custom\",\n-                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n-                                \"displayName\": \"CSV Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CSV Format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Comment Marker\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Shiprock\",\n+                                        \"value\": \"America/Shiprock\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n-                                \"displayName\": \"Comment Marker\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Comment Marker\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Escape Character\": {\n-                                \"defaultValue\": \"\\\\\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Sitka\",\n+                                        \"value\": \"America/Sitka\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n-                                \"displayName\": \"Escape Character\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Include Header Line\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Barthelemy\",\n+                                        \"value\": \"America/St_Barthelemy\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/St_Johns\",\n+                                        \"value\": \"America/St_Johns\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not the CSV column names should be written out as the first line.\",\n-                                \"displayName\": \"Include Header Line\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Header Line\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Include Trailing Delimiter\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/St_Kitts\",\n+                                        \"value\": \"America/St_Kitts\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/St_Lucia\",\n+                                        \"value\": \"America/St_Lucia\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"America/St_Thomas\",\n+                                        \"value\": \"America/St_Thomas\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"If true, a trailing delimiter will be added to each CSV Record that is written. If false, the trailing delimiter will be omitted.\",\n-                                \"displayName\": \"Include Trailing Delimiter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Trailing Delimiter\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Null String\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Vincent\",\n+                                        \"value\": \"America/St_Vincent\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies a String that, if present as a value in the CSV, should be considered a null field instead of using the literal value.\",\n-                                \"displayName\": \"Null String\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null String\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Quote Character\": {\n-                                \"defaultValue\": \"\\\"\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Swift_Current\",\n+                                        \"value\": \"America/Swift_Current\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n-                                \"displayName\": \"Quote Character\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Quote Mode\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Tegucigalpa\",\n+                                        \"value\": \"America/Tegucigalpa\"\n+                                    },\n                                     {\n-                                        \"description\": \"All values will be quoted using the configured quote character.\",\n-                                        \"displayName\": \"Quote All Values\",\n-                                        \"value\": \"ALL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Thule\",\n+                                        \"value\": \"America/Thule\"\n                                     },\n                                     {\n-                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n-                                        \"displayName\": \"Quote Minimal\",\n-                                        \"value\": \"MINIMAL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Thunder_Bay\",\n+                                        \"value\": \"America/Thunder_Bay\"\n                                     },\n                                     {\n-                                        \"description\": \"Values will be quoted unless the value is a number.\",\n-                                        \"displayName\": \"Quote Non-Numeric Values\",\n-                                        \"value\": \"NON_NUMERIC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Tijuana\",\n+                                        \"value\": \"America/Tijuana\"\n                                     },\n                                     {\n-                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n-                                        \"displayName\": \"Do Not Quote Values\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"MINIMAL\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Toronto\",\n+                                        \"value\": \"America/Toronto\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies how fields should be quoted when they are written\",\n-                                \"displayName\": \"Quote Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Quote Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Record Separator\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Tortola\",\n+                                        \"value\": \"America/Tortola\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the characters to use in order to separate CSV Records\",\n-                                \"displayName\": \"Record Separator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Separator\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Schema Write Strategy\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Vancouver\",\n+                                        \"value\": \"America/Vancouver\"\n+                                    },\n                                     {\n-                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n-                                        \"displayName\": \"Do Not Write Schema\",\n-                                        \"value\": \"no-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Virgin\",\n+                                        \"value\": \"America/Virgin\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n-                                        \"displayName\": \"Set 'schema.name' Attribute\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Whitehorse\",\n+                                        \"value\": \"America/Whitehorse\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n-                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n-                                        \"value\": \"full-schema-attribute\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Winnipeg\",\n+                                        \"value\": \"America/Winnipeg\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Yakutat\",\n+                                        \"value\": \"America/Yakutat\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Yellowknife\",\n+                                        \"value\": \"America/Yellowknife\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Schema Registry Reference\",\n-                                        \"value\": \"confluent-encoded\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"no-schema\",\n-                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n-                                \"displayName\": \"Schema Write Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Write Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Trim Fields\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Casey\",\n+                                        \"value\": \"Antarctica/Casey\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Antarctica/Davis\",\n+                                        \"value\": \"Antarctica/Davis\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"Antarctica/DumontDUrville\",\n+                                        \"value\": \"Antarctica/DumontDUrville\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim Fields\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Value Separator\": {\n-                                \"defaultValue\": \",\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Macquarie\",\n+                                        \"value\": \"Antarctica/Macquarie\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n-                                \"displayName\": \"Value Separator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"csvutils-character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to encode/decode the CSV file\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"csvutils-character-set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Mawson\",\n+                                        \"value\": \"Antarctica/Mawson\"\n+                                    },\n                                     {\n-                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n-                                        \"displayName\": \"Inherit Record Schema\",\n-                                        \"value\": \"inherit-record-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/McMurdo\",\n+                                        \"value\": \"Antarctica/McMurdo\"\n                                     },\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Palmer\",\n+                                        \"value\": \"Antarctica/Palmer\"\n                                     },\n                                     {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"inherit-record-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Rothera\",\n+                                        \"value\": \"Antarctica/Rothera\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-cache\": {\n-                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n-                                \"displayName\": \"Schema Cache\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/South_Pole\",\n+                                        \"value\": \"Antarctica/South_Pole\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-protocol-version\": {\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Syowa\",\n+                                        \"value\": \"Antarctica/Syowa\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n-                                        \"propertyName\": \"Schema Write Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n-                                \"displayName\": \"Schema Protocol Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-protocol-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Troll\",\n+                                        \"value\": \"Antarctica/Troll\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Vostok\",\n+                                        \"value\": \"Antarctica/Vostok\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Arctic/Longyearbyen\",\n+                                        \"value\": \"Arctic/Longyearbyen\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"csv\",\n-                            \"delimited\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"result\",\n-                            \"row\",\n-                            \"separated\",\n-                            \"serializer\",\n-                            \"set\",\n-                            \"tab\",\n-                            \"tsv\",\n-                            \"writer\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.csv.CSVRecordSetWriter\",\n-                        \"typeDescription\": \"Writes the contents of a RecordSet as CSV data. The first line written will be the column names (unless the 'Include Header Line' property is false). All subsequent lines will be the values corresponding to the record fields.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Patterns and Expressions can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Grok Expression\": {\n-                                \"description\": \"Specifies the format of a log line in Grok format. This allows the Record Reader to understand how to parse each log line. The property supports one or more Grok expressions. The Reader attempts to parse input lines according to the configured order of the expressions.If a line in the log file does not match any expressions, the line will be assumed to belong to the previous log message.If other Grok patterns are referenced by this expression, they need to be supplied in the Grok Pattern File property.\",\n-                                \"displayName\": \"Grok Expressions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grok Expression\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Grok Pattern File\": {\n-                                \"description\": \"Grok Patterns to use for parsing logs. If not specified, a built-in default Pattern file will be used. If specified, all patterns specified will override the default patterns. See the Controller Service's Additional Details for a list of pre-defined patterns.\",\n-                                \"displayName\": \"Grok Patterns\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Grok Pattern File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"no-match-behavior\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Aden\",\n+                                        \"value\": \"Asia/Aden\"\n+                                    },\n                                     {\n-                                        \"description\": \"The line of text that does not match the Grok Expression will be appended to the last field of the prior message.\",\n-                                        \"displayName\": \"Append to Previous Message\",\n-                                        \"value\": \"append-to-previous-message\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Almaty\",\n+                                        \"value\": \"Asia/Almaty\"\n                                     },\n                                     {\n-                                        \"description\": \"The line of text that does not match the Grok Expression will be skipped.\",\n-                                        \"displayName\": \"Skip Line\",\n-                                        \"value\": \"skip-line\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Amman\",\n+                                        \"value\": \"Asia/Amman\"\n                                     },\n                                     {\n-                                        \"description\": \"The line of text that does not match the Grok Expression will only be added to the _raw field.\",\n-                                        \"displayName\": \"Raw Line\",\n-                                        \"value\": \"raw-line\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"append-to-previous-message\",\n-                                \"description\": \"If a line of text is encountered and it does not match the given Grok Expression, and it is not part of a stack trace, this property specifies how the text should be processed.\",\n-                                \"displayName\": \"No Match Behavior\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"no-match-behavior\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Anadyr\",\n+                                        \"value\": \"Asia/Anadyr\"\n+                                    },\n                                     {\n-                                        \"description\": \"The schema will be derived using the field names present in all configured Grok Expressions. All schema fields will have a String type and will be marked as nullable. The schema will also include a `stackTrace` field, and a `_raw` field containing the input line string.\",\n-                                        \"displayName\": \"Use String Fields From Grok Expression\",\n-                                        \"value\": \"string-fields-from-grok-expression\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Aqtau\",\n+                                        \"value\": \"Asia/Aqtau\"\n                                     },\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Aqtobe\",\n+                                        \"value\": \"Asia/Aqtobe\"\n                                     },\n                                     {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ashgabat\",\n+                                        \"value\": \"Asia/Ashgabat\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ashkhabad\",\n+                                        \"value\": \"Asia/Ashkhabad\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Atyrau\",\n+                                        \"value\": \"Asia/Atyrau\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"string-fields-from-grok-expression\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Baghdad\",\n+                                        \"value\": \"Asia/Baghdad\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Bahrain\",\n+                                        \"value\": \"Asia/Bahrain\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Baku\",\n+                                        \"value\": \"Asia/Baku\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Bangkok\",\n+                                        \"value\": \"Asia/Bangkok\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Barnaul\",\n+                                        \"value\": \"Asia/Barnaul\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"grok\",\n-                            \"logfiles\",\n-                            \"logs\",\n-                            \"logstash\",\n-                            \"parse\",\n-                            \"pattern\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"regex\",\n-                            \"text\",\n-                            \"unstructured\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.grok.GrokReader\",\n-                        \"typeDescription\": \"Provides a mechanism for reading unstructured text data, such as log files, and structuring the data so that it can be processed. The service is configured using Grok patterns. The service reads from a stream of data and splits each message that it finds into a separate Record, each containing the fields that are configured. If a line in the input does not match the expected message pattern, the line of text is either considered to be part of the previous message or is skipped, depending on the configuration, with the exception of stack traces. A stack trace that is found at the end of a log message is considered to be part of the previous message but is added to the 'stackTrace' field of the Record. If a record has no stack trace, it will have a NULL value for the stackTrace field (assuming that the schema does in fact include a stackTrace field of type String). Assuming that the schema includes a '_raw' field of type String, the raw message will be included in the Record.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"User-defined properties identify how to extract specific fields from a JSON object in order to create a Record\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The field name for the record.\",\n-                                \"value\": \"A JSONPath Expression that will be evaluated against each JSON record. The result of the JSONPath will be the value of the field whose name is the same as the property name.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Allow Comments\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Beirut\",\n+                                        \"value\": \"Asia/Beirut\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Asia/Bishkek\",\n+                                        \"value\": \"Asia/Bishkek\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to allow comments when parsing the JSON document\",\n-                                \"displayName\": \"Allow Comments\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow Comments\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n-                                \"displayName\": \"Max String Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max String Length\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Asia/Brunei\",\n+                                        \"value\": \"Asia/Brunei\"\n+                                    },\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Calcutta\",\n+                                        \"value\": \"Asia/Calcutta\"\n                                     },\n                                     {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Chita\",\n+                                        \"value\": \"Asia/Chita\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Choibalsan\",\n+                                        \"value\": \"Asia/Choibalsan\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Chongqing\",\n+                                        \"value\": \"Asia/Chongqing\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Chungking\",\n+                                        \"value\": \"Asia/Chungking\"\n                                     },\n                                     {\n-                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n-                                        \"displayName\": \"Infer Schema\",\n-                                        \"value\": \"infer-schema\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"infer-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Colombo\",\n+                                        \"value\": \"Asia/Colombo\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dacca\",\n+                                        \"value\": \"Asia/Dacca\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Damascus\",\n+                                        \"value\": \"Asia/Damascus\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dhaka\",\n+                                        \"value\": \"Asia/Dhaka\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dili\",\n+                                        \"value\": \"Asia/Dili\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.json.JsonTreeReader\"\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"json\",\n-                            \"jsonpath\",\n-                            \"parser\",\n-                            \"reader\",\n-                            \"record\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.json.JsonPathReader\",\n-                        \"typeDescription\": \"Parses JSON records and evaluates user-defined JSON Path's against each JSON object. While the reader expects each record to be well-formed JSON, the content of a FlowFile may consist of many records, each as a well-formed JSON array or JSON object with optional whitespace between them, such as the common 'JSON-per-line' format. If an array is encountered, each element in that array will be treated as a separate record. User-defined properties define the fields that should be extracted from the JSON in order to form the fields of a Record. Any JSON field that is not extracted via a JSONPath will not be returned in the JSON Records.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Allow Scientific Notation\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dubai\",\n+                                        \"value\": \"Asia/Dubai\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Asia/Dushanbe\",\n+                                        \"value\": \"Asia/Dushanbe\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not scientific notation should be used when writing numbers\",\n-                                \"displayName\": \"Allow Scientific Notation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow Scientific Notation\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Pretty Print JSON\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Asia/Famagusta\",\n+                                        \"value\": \"Asia/Famagusta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Gaza\",\n+                                        \"value\": \"Asia/Gaza\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Harbin\",\n+                                        \"value\": \"Asia/Harbin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Hebron\",\n+                                        \"value\": \"Asia/Hebron\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ho_Chi_Minh\",\n+                                        \"value\": \"Asia/Ho_Chi_Minh\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Hong_Kong\",\n+                                        \"value\": \"Asia/Hong_Kong\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Hovd\",\n+                                        \"value\": \"Asia/Hovd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Irkutsk\",\n+                                        \"value\": \"Asia/Irkutsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Istanbul\",\n+                                        \"value\": \"Asia/Istanbul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Jakarta\",\n+                                        \"value\": \"Asia/Jakarta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Jayapura\",\n+                                        \"value\": \"Asia/Jayapura\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Jerusalem\",\n+                                        \"value\": \"Asia/Jerusalem\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kabul\",\n+                                        \"value\": \"Asia/Kabul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kamchatka\",\n+                                        \"value\": \"Asia/Kamchatka\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Karachi\",\n+                                        \"value\": \"Asia/Karachi\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kashgar\",\n+                                        \"value\": \"Asia/Kashgar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kathmandu\",\n+                                        \"value\": \"Asia/Kathmandu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Katmandu\",\n+                                        \"value\": \"Asia/Katmandu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Khandyga\",\n+                                        \"value\": \"Asia/Khandyga\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kolkata\",\n+                                        \"value\": \"Asia/Kolkata\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Krasnoyarsk\",\n+                                        \"value\": \"Asia/Krasnoyarsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kuala_Lumpur\",\n+                                        \"value\": \"Asia/Kuala_Lumpur\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kuching\",\n+                                        \"value\": \"Asia/Kuching\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kuwait\",\n+                                        \"value\": \"Asia/Kuwait\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Macao\",\n+                                        \"value\": \"Asia/Macao\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Macau\",\n+                                        \"value\": \"Asia/Macau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Magadan\",\n+                                        \"value\": \"Asia/Magadan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Makassar\",\n+                                        \"value\": \"Asia/Makassar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Manila\",\n+                                        \"value\": \"Asia/Manila\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Muscat\",\n+                                        \"value\": \"Asia/Muscat\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Nicosia\",\n+                                        \"value\": \"Asia/Nicosia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Novokuznetsk\",\n+                                        \"value\": \"Asia/Novokuznetsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Novosibirsk\",\n+                                        \"value\": \"Asia/Novosibirsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Omsk\",\n+                                        \"value\": \"Asia/Omsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Oral\",\n+                                        \"value\": \"Asia/Oral\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Phnom_Penh\",\n+                                        \"value\": \"Asia/Phnom_Penh\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Pontianak\",\n+                                        \"value\": \"Asia/Pontianak\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Pyongyang\",\n+                                        \"value\": \"Asia/Pyongyang\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Qatar\",\n+                                        \"value\": \"Asia/Qatar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Qostanay\",\n+                                        \"value\": \"Asia/Qostanay\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Qyzylorda\",\n+                                        \"value\": \"Asia/Qyzylorda\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Rangoon\",\n+                                        \"value\": \"Asia/Rangoon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Riyadh\",\n+                                        \"value\": \"Asia/Riyadh\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Saigon\",\n+                                        \"value\": \"Asia/Saigon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Sakhalin\",\n+                                        \"value\": \"Asia/Sakhalin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Samarkand\",\n+                                        \"value\": \"Asia/Samarkand\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Seoul\",\n+                                        \"value\": \"Asia/Seoul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Shanghai\",\n+                                        \"value\": \"Asia/Shanghai\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Singapore\",\n+                                        \"value\": \"Asia/Singapore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Srednekolymsk\",\n+                                        \"value\": \"Asia/Srednekolymsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Taipei\",\n+                                        \"value\": \"Asia/Taipei\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tashkent\",\n+                                        \"value\": \"Asia/Tashkent\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tbilisi\",\n+                                        \"value\": \"Asia/Tbilisi\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tehran\",\n+                                        \"value\": \"Asia/Tehran\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tel_Aviv\",\n+                                        \"value\": \"Asia/Tel_Aviv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Thimbu\",\n+                                        \"value\": \"Asia/Thimbu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Thimphu\",\n+                                        \"value\": \"Asia/Thimphu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tokyo\",\n+                                        \"value\": \"Asia/Tokyo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tomsk\",\n+                                        \"value\": \"Asia/Tomsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ujung_Pandang\",\n+                                        \"value\": \"Asia/Ujung_Pandang\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ulaanbaatar\",\n+                                        \"value\": \"Asia/Ulaanbaatar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ulan_Bator\",\n+                                        \"value\": \"Asia/Ulan_Bator\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Urumqi\",\n+                                        \"value\": \"Asia/Urumqi\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ust-Nera\",\n+                                        \"value\": \"Asia/Ust-Nera\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Vientiane\",\n+                                        \"value\": \"Asia/Vientiane\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Vladivostok\",\n+                                        \"value\": \"Asia/Vladivostok\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yakutsk\",\n+                                        \"value\": \"Asia/Yakutsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yangon\",\n+                                        \"value\": \"Asia/Yangon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yekaterinburg\",\n+                                        \"value\": \"Asia/Yekaterinburg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yerevan\",\n+                                        \"value\": \"Asia/Yerevan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Azores\",\n+                                        \"value\": \"Atlantic/Azores\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Bermuda\",\n+                                        \"value\": \"Atlantic/Bermuda\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Canary\",\n+                                        \"value\": \"Atlantic/Canary\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Cape_Verde\",\n+                                        \"value\": \"Atlantic/Cape_Verde\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Faeroe\",\n+                                        \"value\": \"Atlantic/Faeroe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Faroe\",\n+                                        \"value\": \"Atlantic/Faroe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Jan_Mayen\",\n+                                        \"value\": \"Atlantic/Jan_Mayen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Madeira\",\n+                                        \"value\": \"Atlantic/Madeira\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Reykjavik\",\n+                                        \"value\": \"Atlantic/Reykjavik\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/South_Georgia\",\n+                                        \"value\": \"Atlantic/South_Georgia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/St_Helena\",\n+                                        \"value\": \"Atlantic/St_Helena\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Stanley\",\n+                                        \"value\": \"Atlantic/Stanley\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/ACT\",\n+                                        \"value\": \"Australia/ACT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Adelaide\",\n+                                        \"value\": \"Australia/Adelaide\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Brisbane\",\n+                                        \"value\": \"Australia/Brisbane\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Broken_Hill\",\n+                                        \"value\": \"Australia/Broken_Hill\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Canberra\",\n+                                        \"value\": \"Australia/Canberra\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Currie\",\n+                                        \"value\": \"Australia/Currie\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Darwin\",\n+                                        \"value\": \"Australia/Darwin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Eucla\",\n+                                        \"value\": \"Australia/Eucla\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Hobart\",\n+                                        \"value\": \"Australia/Hobart\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/LHI\",\n+                                        \"value\": \"Australia/LHI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Lindeman\",\n+                                        \"value\": \"Australia/Lindeman\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Lord_Howe\",\n+                                        \"value\": \"Australia/Lord_Howe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Melbourne\",\n+                                        \"value\": \"Australia/Melbourne\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/NSW\",\n+                                        \"value\": \"Australia/NSW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/North\",\n+                                        \"value\": \"Australia/North\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Perth\",\n+                                        \"value\": \"Australia/Perth\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Queensland\",\n+                                        \"value\": \"Australia/Queensland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/South\",\n+                                        \"value\": \"Australia/South\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Sydney\",\n+                                        \"value\": \"Australia/Sydney\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Tasmania\",\n+                                        \"value\": \"Australia/Tasmania\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Victoria\",\n+                                        \"value\": \"Australia/Victoria\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/West\",\n+                                        \"value\": \"Australia/West\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Yancowinna\",\n+                                        \"value\": \"Australia/Yancowinna\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/Acre\",\n+                                        \"value\": \"Brazil/Acre\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/DeNoronha\",\n+                                        \"value\": \"Brazil/DeNoronha\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/East\",\n+                                        \"value\": \"Brazil/East\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/West\",\n+                                        \"value\": \"Brazil/West\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CET\",\n+                                        \"value\": \"CET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CST6CDT\",\n+                                        \"value\": \"CST6CDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Atlantic\",\n+                                        \"value\": \"Canada/Atlantic\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Central\",\n+                                        \"value\": \"Canada/Central\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Eastern\",\n+                                        \"value\": \"Canada/Eastern\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Mountain\",\n+                                        \"value\": \"Canada/Mountain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Newfoundland\",\n+                                        \"value\": \"Canada/Newfoundland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Pacific\",\n+                                        \"value\": \"Canada/Pacific\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Saskatchewan\",\n+                                        \"value\": \"Canada/Saskatchewan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Yukon\",\n+                                        \"value\": \"Canada/Yukon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Chile/Continental\",\n+                                        \"value\": \"Chile/Continental\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Chile/EasterIsland\",\n+                                        \"value\": \"Chile/EasterIsland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Cuba\",\n+                                        \"value\": \"Cuba\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EET\",\n+                                        \"value\": \"EET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EST5EDT\",\n+                                        \"value\": \"EST5EDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Egypt\",\n+                                        \"value\": \"Egypt\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Eire\",\n+                                        \"value\": \"Eire\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT\",\n+                                        \"value\": \"Etc/GMT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+0\",\n+                                        \"value\": \"Etc/GMT+0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+1\",\n+                                        \"value\": \"Etc/GMT+1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+10\",\n+                                        \"value\": \"Etc/GMT+10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+11\",\n+                                        \"value\": \"Etc/GMT+11\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+12\",\n+                                        \"value\": \"Etc/GMT+12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+2\",\n+                                        \"value\": \"Etc/GMT+2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+3\",\n+                                        \"value\": \"Etc/GMT+3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+4\",\n+                                        \"value\": \"Etc/GMT+4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+5\",\n+                                        \"value\": \"Etc/GMT+5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+6\",\n+                                        \"value\": \"Etc/GMT+6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+7\",\n+                                        \"value\": \"Etc/GMT+7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+8\",\n+                                        \"value\": \"Etc/GMT+8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+9\",\n+                                        \"value\": \"Etc/GMT+9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-0\",\n+                                        \"value\": \"Etc/GMT-0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-1\",\n+                                        \"value\": \"Etc/GMT-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-10\",\n+                                        \"value\": \"Etc/GMT-10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-11\",\n+                                        \"value\": \"Etc/GMT-11\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-12\",\n+                                        \"value\": \"Etc/GMT-12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-13\",\n+                                        \"value\": \"Etc/GMT-13\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-14\",\n+                                        \"value\": \"Etc/GMT-14\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-2\",\n+                                        \"value\": \"Etc/GMT-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-3\",\n+                                        \"value\": \"Etc/GMT-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-4\",\n+                                        \"value\": \"Etc/GMT-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-5\",\n+                                        \"value\": \"Etc/GMT-5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-6\",\n+                                        \"value\": \"Etc/GMT-6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-7\",\n+                                        \"value\": \"Etc/GMT-7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-8\",\n+                                        \"value\": \"Etc/GMT-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-9\",\n+                                        \"value\": \"Etc/GMT-9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT0\",\n+                                        \"value\": \"Etc/GMT0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/Greenwich\",\n+                                        \"value\": \"Etc/Greenwich\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/UCT\",\n+                                        \"value\": \"Etc/UCT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/UTC\",\n+                                        \"value\": \"Etc/UTC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/Universal\",\n+                                        \"value\": \"Etc/Universal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/Zulu\",\n+                                        \"value\": \"Etc/Zulu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Amsterdam\",\n+                                        \"value\": \"Europe/Amsterdam\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Andorra\",\n+                                        \"value\": \"Europe/Andorra\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Astrakhan\",\n+                                        \"value\": \"Europe/Astrakhan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Athens\",\n+                                        \"value\": \"Europe/Athens\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Belfast\",\n+                                        \"value\": \"Europe/Belfast\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Belgrade\",\n+                                        \"value\": \"Europe/Belgrade\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Berlin\",\n+                                        \"value\": \"Europe/Berlin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Bratislava\",\n+                                        \"value\": \"Europe/Bratislava\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Brussels\",\n+                                        \"value\": \"Europe/Brussels\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Bucharest\",\n+                                        \"value\": \"Europe/Bucharest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Budapest\",\n+                                        \"value\": \"Europe/Budapest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Busingen\",\n+                                        \"value\": \"Europe/Busingen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Chisinau\",\n+                                        \"value\": \"Europe/Chisinau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Copenhagen\",\n+                                        \"value\": \"Europe/Copenhagen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Dublin\",\n+                                        \"value\": \"Europe/Dublin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Gibraltar\",\n+                                        \"value\": \"Europe/Gibraltar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Guernsey\",\n+                                        \"value\": \"Europe/Guernsey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Helsinki\",\n+                                        \"value\": \"Europe/Helsinki\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Isle_of_Man\",\n+                                        \"value\": \"Europe/Isle_of_Man\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Istanbul\",\n+                                        \"value\": \"Europe/Istanbul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Jersey\",\n+                                        \"value\": \"Europe/Jersey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kaliningrad\",\n+                                        \"value\": \"Europe/Kaliningrad\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kiev\",\n+                                        \"value\": \"Europe/Kiev\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kirov\",\n+                                        \"value\": \"Europe/Kirov\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kyiv\",\n+                                        \"value\": \"Europe/Kyiv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Lisbon\",\n+                                        \"value\": \"Europe/Lisbon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Ljubljana\",\n+                                        \"value\": \"Europe/Ljubljana\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/London\",\n+                                        \"value\": \"Europe/London\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Luxembourg\",\n+                                        \"value\": \"Europe/Luxembourg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Madrid\",\n+                                        \"value\": \"Europe/Madrid\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Malta\",\n+                                        \"value\": \"Europe/Malta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Mariehamn\",\n+                                        \"value\": \"Europe/Mariehamn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Minsk\",\n+                                        \"value\": \"Europe/Minsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Monaco\",\n+                                        \"value\": \"Europe/Monaco\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Moscow\",\n+                                        \"value\": \"Europe/Moscow\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Nicosia\",\n+                                        \"value\": \"Europe/Nicosia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Oslo\",\n+                                        \"value\": \"Europe/Oslo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Paris\",\n+                                        \"value\": \"Europe/Paris\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Podgorica\",\n+                                        \"value\": \"Europe/Podgorica\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Prague\",\n+                                        \"value\": \"Europe/Prague\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Riga\",\n+                                        \"value\": \"Europe/Riga\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Rome\",\n+                                        \"value\": \"Europe/Rome\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Samara\",\n+                                        \"value\": \"Europe/Samara\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/San_Marino\",\n+                                        \"value\": \"Europe/San_Marino\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Sarajevo\",\n+                                        \"value\": \"Europe/Sarajevo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Saratov\",\n+                                        \"value\": \"Europe/Saratov\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Simferopol\",\n+                                        \"value\": \"Europe/Simferopol\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Skopje\",\n+                                        \"value\": \"Europe/Skopje\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Sofia\",\n+                                        \"value\": \"Europe/Sofia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Stockholm\",\n+                                        \"value\": \"Europe/Stockholm\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Tallinn\",\n+                                        \"value\": \"Europe/Tallinn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Tirane\",\n+                                        \"value\": \"Europe/Tirane\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Tiraspol\",\n+                                        \"value\": \"Europe/Tiraspol\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Ulyanovsk\",\n+                                        \"value\": \"Europe/Ulyanovsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Uzhgorod\",\n+                                        \"value\": \"Europe/Uzhgorod\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vaduz\",\n+                                        \"value\": \"Europe/Vaduz\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vatican\",\n+                                        \"value\": \"Europe/Vatican\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vienna\",\n+                                        \"value\": \"Europe/Vienna\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vilnius\",\n+                                        \"value\": \"Europe/Vilnius\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Volgograd\",\n+                                        \"value\": \"Europe/Volgograd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Warsaw\",\n+                                        \"value\": \"Europe/Warsaw\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Zagreb\",\n+                                        \"value\": \"Europe/Zagreb\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Zaporozhye\",\n+                                        \"value\": \"Europe/Zaporozhye\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Zurich\",\n+                                        \"value\": \"Europe/Zurich\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GB\",\n+                                        \"value\": \"GB\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GB-Eire\",\n+                                        \"value\": \"GB-Eire\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GMT\",\n+                                        \"value\": \"GMT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GMT0\",\n+                                        \"value\": \"GMT0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Greenwich\",\n+                                        \"value\": \"Greenwich\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Hongkong\",\n+                                        \"value\": \"Hongkong\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Iceland\",\n+                                        \"value\": \"Iceland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Antananarivo\",\n+                                        \"value\": \"Indian/Antananarivo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Chagos\",\n+                                        \"value\": \"Indian/Chagos\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Christmas\",\n+                                        \"value\": \"Indian/Christmas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Cocos\",\n+                                        \"value\": \"Indian/Cocos\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Comoro\",\n+                                        \"value\": \"Indian/Comoro\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Kerguelen\",\n+                                        \"value\": \"Indian/Kerguelen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Mahe\",\n+                                        \"value\": \"Indian/Mahe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Maldives\",\n+                                        \"value\": \"Indian/Maldives\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Mauritius\",\n+                                        \"value\": \"Indian/Mauritius\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Mayotte\",\n+                                        \"value\": \"Indian/Mayotte\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Reunion\",\n+                                        \"value\": \"Indian/Reunion\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Iran\",\n+                                        \"value\": \"Iran\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Israel\",\n+                                        \"value\": \"Israel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Jamaica\",\n+                                        \"value\": \"Jamaica\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Japan\",\n+                                        \"value\": \"Japan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Kwajalein\",\n+                                        \"value\": \"Kwajalein\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Libya\",\n+                                        \"value\": \"Libya\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MET\",\n+                                        \"value\": \"MET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MST7MDT\",\n+                                        \"value\": \"MST7MDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Mexico/BajaNorte\",\n+                                        \"value\": \"Mexico/BajaNorte\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Mexico/BajaSur\",\n+                                        \"value\": \"Mexico/BajaSur\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Mexico/General\",\n+                                        \"value\": \"Mexico/General\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NZ\",\n+                                        \"value\": \"NZ\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NZ-CHAT\",\n+                                        \"value\": \"NZ-CHAT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Navajo\",\n+                                        \"value\": \"Navajo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PRC\",\n+                                        \"value\": \"PRC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PST8PDT\",\n+                                        \"value\": \"PST8PDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Apia\",\n+                                        \"value\": \"Pacific/Apia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Auckland\",\n+                                        \"value\": \"Pacific/Auckland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Bougainville\",\n+                                        \"value\": \"Pacific/Bougainville\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Chatham\",\n+                                        \"value\": \"Pacific/Chatham\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Chuuk\",\n+                                        \"value\": \"Pacific/Chuuk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Easter\",\n+                                        \"value\": \"Pacific/Easter\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Efate\",\n+                                        \"value\": \"Pacific/Efate\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Enderbury\",\n+                                        \"value\": \"Pacific/Enderbury\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Fakaofo\",\n+                                        \"value\": \"Pacific/Fakaofo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Fiji\",\n+                                        \"value\": \"Pacific/Fiji\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Funafuti\",\n+                                        \"value\": \"Pacific/Funafuti\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Galapagos\",\n+                                        \"value\": \"Pacific/Galapagos\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Gambier\",\n+                                        \"value\": \"Pacific/Gambier\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Guadalcanal\",\n+                                        \"value\": \"Pacific/Guadalcanal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Guam\",\n+                                        \"value\": \"Pacific/Guam\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Honolulu\",\n+                                        \"value\": \"Pacific/Honolulu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Johnston\",\n+                                        \"value\": \"Pacific/Johnston\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kanton\",\n+                                        \"value\": \"Pacific/Kanton\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kiritimati\",\n+                                        \"value\": \"Pacific/Kiritimati\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kosrae\",\n+                                        \"value\": \"Pacific/Kosrae\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kwajalein\",\n+                                        \"value\": \"Pacific/Kwajalein\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Majuro\",\n+                                        \"value\": \"Pacific/Majuro\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Marquesas\",\n+                                        \"value\": \"Pacific/Marquesas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Midway\",\n+                                        \"value\": \"Pacific/Midway\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Nauru\",\n+                                        \"value\": \"Pacific/Nauru\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Niue\",\n+                                        \"value\": \"Pacific/Niue\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Norfolk\",\n+                                        \"value\": \"Pacific/Norfolk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Noumea\",\n+                                        \"value\": \"Pacific/Noumea\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Pago_Pago\",\n+                                        \"value\": \"Pacific/Pago_Pago\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Palau\",\n+                                        \"value\": \"Pacific/Palau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Pitcairn\",\n+                                        \"value\": \"Pacific/Pitcairn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Pohnpei\",\n+                                        \"value\": \"Pacific/Pohnpei\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Ponape\",\n+                                        \"value\": \"Pacific/Ponape\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Port_Moresby\",\n+                                        \"value\": \"Pacific/Port_Moresby\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Rarotonga\",\n+                                        \"value\": \"Pacific/Rarotonga\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Saipan\",\n+                                        \"value\": \"Pacific/Saipan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Samoa\",\n+                                        \"value\": \"Pacific/Samoa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Tahiti\",\n+                                        \"value\": \"Pacific/Tahiti\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Tarawa\",\n+                                        \"value\": \"Pacific/Tarawa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Tongatapu\",\n+                                        \"value\": \"Pacific/Tongatapu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Truk\",\n+                                        \"value\": \"Pacific/Truk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Wake\",\n+                                        \"value\": \"Pacific/Wake\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Wallis\",\n+                                        \"value\": \"Pacific/Wallis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Yap\",\n+                                        \"value\": \"Pacific/Yap\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Poland\",\n+                                        \"value\": \"Poland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Portugal\",\n+                                        \"value\": \"Portugal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ROK\",\n+                                        \"value\": \"ROK\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Singapore\",\n+                                        \"value\": \"Singapore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/AST4\",\n+                                        \"value\": \"SystemV/AST4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/AST4ADT\",\n+                                        \"value\": \"SystemV/AST4ADT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/CST6\",\n+                                        \"value\": \"SystemV/CST6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/CST6CDT\",\n+                                        \"value\": \"SystemV/CST6CDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/EST5\",\n+                                        \"value\": \"SystemV/EST5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/EST5EDT\",\n+                                        \"value\": \"SystemV/EST5EDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/HST10\",\n+                                        \"value\": \"SystemV/HST10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/MST7\",\n+                                        \"value\": \"SystemV/MST7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/MST7MDT\",\n+                                        \"value\": \"SystemV/MST7MDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/PST8\",\n+                                        \"value\": \"SystemV/PST8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/PST8PDT\",\n+                                        \"value\": \"SystemV/PST8PDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/YST9\",\n+                                        \"value\": \"SystemV/YST9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/YST9YDT\",\n+                                        \"value\": \"SystemV/YST9YDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Turkey\",\n+                                        \"value\": \"Turkey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UCT\",\n+                                        \"value\": \"UCT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Alaska\",\n+                                        \"value\": \"US/Alaska\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Aleutian\",\n+                                        \"value\": \"US/Aleutian\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Arizona\",\n+                                        \"value\": \"US/Arizona\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Central\",\n+                                        \"value\": \"US/Central\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/East-Indiana\",\n+                                        \"value\": \"US/East-Indiana\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Eastern\",\n+                                        \"value\": \"US/Eastern\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Hawaii\",\n+                                        \"value\": \"US/Hawaii\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Indiana-Starke\",\n+                                        \"value\": \"US/Indiana-Starke\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Michigan\",\n+                                        \"value\": \"US/Michigan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Mountain\",\n+                                        \"value\": \"US/Mountain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Pacific\",\n+                                        \"value\": \"US/Pacific\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Samoa\",\n+                                        \"value\": \"US/Samoa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTC\",\n+                                        \"value\": \"UTC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Universal\",\n+                                        \"value\": \"Universal\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"W-SU\",\n+                                        \"value\": \"W-SU\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the JSON should be pretty printed\",\n-                                \"displayName\": \"Pretty Print JSON\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pretty Print JSON\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Schema Write Strategy\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"WET\",\n+                                        \"value\": \"WET\"\n+                                    },\n                                     {\n-                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n-                                        \"displayName\": \"Do Not Write Schema\",\n-                                        \"value\": \"no-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Zulu\",\n+                                        \"value\": \"Zulu\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n-                                        \"displayName\": \"Set 'schema.name' Attribute\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EST\",\n+                                        \"value\": \"EST\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n-                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n-                                        \"value\": \"full-schema-attribute\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HST\",\n+                                        \"value\": \"HST\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MST\",\n+                                        \"value\": \"MST\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ACT\",\n+                                        \"value\": \"ACT\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Schema Registry Reference\",\n-                                        \"value\": \"confluent-encoded\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"no-schema\",\n-                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n-                                \"displayName\": \"Schema Write Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Write Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"compression-format\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AET\",\n+                                        \"value\": \"AET\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n+                                        \"displayName\": \"AGT\",\n+                                        \"value\": \"AGT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"displayName\": \"ART\",\n+                                        \"value\": \"ART\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n+                                        \"displayName\": \"AST\",\n+                                        \"value\": \"AST\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n+                                        \"displayName\": \"BET\",\n+                                        \"value\": \"BET\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"displayName\": \"BST\",\n+                                        \"value\": \"BST\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"snappy framed\",\n-                                        \"value\": \"snappy framed\"\n+                                        \"displayName\": \"CAT\",\n+                                        \"value\": \"CAT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"The compression format to use. Valid values are: GZIP, BZIP2, ZSTD, XZ-LZMA2, LZMA, Snappy, and Snappy Framed\",\n-                                \"displayName\": \"Compression Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"compression-level\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"CNT\",\n+                                        \"value\": \"CNT\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"0\",\n-                                        \"value\": \"0\"\n+                                        \"displayName\": \"CST\",\n+                                        \"value\": \"CST\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"1\",\n-                                        \"value\": \"1\"\n+                                        \"displayName\": \"CTT\",\n+                                        \"value\": \"CTT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2\",\n-                                        \"value\": \"2\"\n+                                        \"displayName\": \"EAT\",\n+                                        \"value\": \"EAT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"3\",\n-                                        \"value\": \"3\"\n+                                        \"displayName\": \"ECT\",\n+                                        \"value\": \"ECT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"4\",\n-                                        \"value\": \"4\"\n+                                        \"displayName\": \"IET\",\n+                                        \"value\": \"IET\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"5\",\n-                                        \"value\": \"5\"\n+                                        \"displayName\": \"IST\",\n+                                        \"value\": \"IST\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"6\",\n-                                        \"value\": \"6\"\n+                                        \"displayName\": \"JST\",\n+                                        \"value\": \"JST\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"7\",\n-                                        \"value\": \"7\"\n+                                        \"displayName\": \"MIT\",\n+                                        \"value\": \"MIT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"8\",\n-                                        \"value\": \"8\"\n+                                        \"displayName\": \"NET\",\n+                                        \"value\": \"NET\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"9\",\n-                                        \"value\": \"9\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"NST\",\n+                                        \"value\": \"NST\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"gzip\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Compression Format\",\n-                                        \"propertyName\": \"compression-format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The compression level to use; this is valid only when using GZIP compression. A lower value results in faster processing but less compression; a value of 0 indicates no compression but simply archiving\",\n-                                \"displayName\": \"Compression Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"output-grouping\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLT\",\n+                                        \"value\": \"PLT\"\n+                                    },\n                                     {\n-                                        \"description\": \"Output records as a JSON array\",\n-                                        \"displayName\": \"Array\",\n-                                        \"value\": \"output-array\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PNT\",\n+                                        \"value\": \"PNT\"\n                                     },\n                                     {\n-                                        \"description\": \"Output records with one JSON object per line, delimited by a newline character\",\n-                                        \"displayName\": \"One Line Per Object\",\n-                                        \"value\": \"output-oneline\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"output-array\",\n-                                \"description\": \"Specifies how the writer should output the JSON records (as an array or one object per line, e.g.) Note that if 'One Line Per Object' is selected, then Pretty Print JSON must be false.\",\n-                                \"displayName\": \"Output Grouping\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"output-grouping\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PRT\",\n+                                        \"value\": \"PRT\"\n+                                    },\n                                     {\n-                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n-                                        \"displayName\": \"Inherit Record Schema\",\n-                                        \"value\": \"inherit-record-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PST\",\n+                                        \"value\": \"PST\"\n                                     },\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SST\",\n+                                        \"value\": \"SST\"\n                                     },\n                                     {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"VST\",\n+                                        \"value\": \"VST\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"inherit-record-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"UTC\",\n+                                \"description\": \"The Time Zone to use for formatting dates when performing a search. Only used with Managed time strategies.\",\n+                                \"displayName\": \"Time Zone\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"Time Zone\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                            \"Token\": {\n+                                \"description\": \"The token to pass to Splunk.\",\n+                                \"displayName\": \"Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Token\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-cache\": {\n-                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n-                                \"displayName\": \"Schema Cache\",\n+                            \"Username\": {\n+                                \"description\": \"The username to authenticate to Splunk.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-cache\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"If using one of the managed Time Range Strategies, this processor will store the values of the latest and earliest times from the previous execution so that the next execution of the can pick up where the last execution left off. The state will be cleared and start over if the query is changed.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Results retrieved from Splunk are sent out this relationship.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"get\",\n+                            \"logs\",\n+                            \"splunk\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.splunk.GetSplunk\",\n+                        \"typeDescription\": \"Retrieves data from Splunk Enterprise.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The query that performed to produce the FlowFile.\",\n+                                \"name\": \"splunk.query\"\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            {\n+                                \"description\": \"The value of the earliest time that was used when performing the query.\",\n+                                \"name\": \"splunk.earliest.time\"\n+                            },\n+                            {\n+                                \"description\": \"The value of the latest time that was used when performing the query.\",\n+                                \"name\": \"splunk.latest.time\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the data being sent.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-protocol-version\": {\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n-                                        \"propertyName\": \"Schema Write Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n-                                \"displayName\": \"Schema Protocol Version\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Destination hostname or IP address\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-protocol-version\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"Idle Connection Expiration\": {\n+                                \"defaultValue\": \"15 seconds\",\n+                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n+                                \"displayName\": \"Idle Connection Expiration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Idle Connection Expiration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Size of Socket Send Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Send Buffer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Max Size of Socket Send Buffer\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                            \"Message Delimiter\": {\n+                                \"description\": \"Specifies the delimiter to use for splitting apart multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate message. Note that if messages are delimited and some messages for a given FlowFile are transferred successfully while others are not, the messages will be split into individual FlowFiles, such that those messages that were successfully sent are routed to the 'success' relationship while other messages are sent to the 'failure' relationship.\",\n+                                \"displayName\": \"Message Delimiter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"name\": \"Message Delimiter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"Port\": {\n+                                \"description\": \"Destination port number\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"suppress-nulls\": {\n+                            \"Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will be written out as a null value\",\n-                                        \"displayName\": \"Never Suppress\",\n-                                        \"value\": \"never-suppress\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will not be written out\",\n-                                        \"displayName\": \"Always Suppress\",\n-                                        \"value\": \"always-suppress\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TCP\",\n+                                        \"value\": \"TCP\"\n                                     },\n                                     {\n-                                        \"description\": \"When a field has a value of null, it will be written out. However, if a field is defined in the schema and not present in the record, the field will not be written out.\",\n-                                        \"displayName\": \"Suppress Missing Values\",\n-                                        \"value\": \"suppress-missing\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UDP\",\n+                                        \"value\": \"UDP\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"never-suppress\",\n-                                \"description\": \"Specifies how the writer should handle a null field\",\n-                                \"displayName\": \"Suppress Null Values\",\n+                                \"defaultValue\": \"TCP\",\n+                                \"description\": \"The protocol for communication.\",\n+                                \"displayName\": \"Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"suppress-nulls\",\n+                                \"name\": \"Protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies the SSL Context Service to enable TLS socket communication\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n+                                \"displayName\": \"Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"json\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"resultset\",\n-                            \"row\",\n-                            \"serialize\",\n-                            \"writer\"\n+                            \"logs\",\n+                            \"splunk\",\n+                            \"tcp\",\n+                            \"udp\"\n                         ],\n-                        \"type\": \"org.apache.nifi.json.JsonRecordSetWriter\",\n-                        \"typeDescription\": \"Writes the results of a RecordSet as either a JSON Array or one JSON object per line. If using Array output, then even if the RecordSet consists of a single row, it will be written as an array with a single element. If using One Line Per Object output, the JSON objects cannot be pretty-printed.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.splunk.PutSplunk\",\n+                        \"typeDescription\": \"Sends logs to Splunk Enterprise over TCP, TCP + TLS/SSL, or UDP. If a Message Delimiter is provided, then this processor will read messages from the incoming FlowFile based on the delimiter, and send each message to Splunk. If a Message Delimiter is not provided then the content of the FlowFile will be sent directly to Splunk as if it were a single message.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-splunk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Allow Comments\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to allow comments when parsing the JSON document\",\n-                                \"displayName\": \"Allow Comments\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The ip address or hostname of the Splunk server.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow Comments\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n+                            \"Owner\": {\n+                                \"description\": \"The owner to pass to Splunk.\",\n+                                \"displayName\": \"Owner\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Owner\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n-                                \"displayName\": \"Max String Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max String Length\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n+                            \"Password\": {\n+                                \"description\": \"The password to authenticate to Splunk.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"8088\",\n+                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n+                                \"displayName\": \"HTTP Event Collector Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"Scheme\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n-                                        \"displayName\": \"Infer Schema\",\n-                                        \"value\": \"infer-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"https\",\n+                                        \"value\": \"https\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"http\",\n+                                        \"value\": \"http\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"infer-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"https\",\n+                                \"description\": \"The scheme for connecting to Splunk.\",\n+                                \"displayName\": \"Scheme\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"Scheme\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-application-strategy\": {\n+                            \"Security Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Applies the schema for the whole JSON.\",\n-                                        \"displayName\": \"Whole JSON\",\n-                                        \"value\": \"WHOLE_JSON\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1_2\",\n+                                        \"value\": \"TLSv1_2\"\n                                     },\n                                     {\n-                                        \"description\": \"Applies the schema for the selected part starting from the \\\"Starting Field Name\\\".\",\n-                                        \"displayName\": \"Selected Part\",\n-                                        \"value\": \"SELECTED_PART\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SELECTED_PART\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1_1\",\n+                                        \"value\": \"TLSv1_1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"schema-text-property\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1\",\n+                                        \"value\": \"TLSv1\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"NESTED_FIELD\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Starting Field Strategy\",\n-                                        \"propertyName\": \"starting-field-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSLv3\",\n+                                        \"value\": \"SSLv3\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether the schema is defined for the whole JSON or for the selected part starting from \\\"Starting Field Name\\\".\",\n-                                \"displayName\": \"Schema Application Strategy\",\n+                                \"defaultValue\": \"TLSv1_2\",\n+                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-application-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Security Protocol\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                            \"Token\": {\n+                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n+                                \"displayName\": \"HTTP Event Collector Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Token\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-inference-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"infer-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies a Schema Cache to use when inferring the schema. If not populated, the schema will be inferred each time. However, if a cache is specified, the cache will first be consulted and if the applicable schema can be found, it will be used instead of inferring the schema.\",\n-                                \"displayName\": \"Schema Inference Cache\",\n+                            \"Username\": {\n+                                \"description\": \"The username to authenticate to Splunk.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-inference-cache\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The name of the character set.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"name\": \"character-set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"content-type\": {\n+                                \"description\": \"The media type of the event sent to Splunk. If not set, \\\"mime.type\\\" flow file attribute will be used. In case of neither of them is specified, this information will not be sent to the server.\",\n+                                \"displayName\": \"Content Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"content-type\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                            \"host\": {\n+                                \"description\": \"Specify with the host query string parameter. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"name\": \"host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"index\": {\n+                                \"description\": \"Index name. Specify with the index query string parameter. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n+                                \"name\": \"index\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"starting-field-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"NESTED_FIELD\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Starting Field Strategy\",\n-                                        \"propertyName\": \"starting-field-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Skips forward to the given nested JSON field (array or object) to begin processing.\",\n-                                \"displayName\": \"Starting Field Name\",\n+                            \"request-channel\": {\n+                                \"description\": \"Identifier of the used request channel.\",\n+                                \"displayName\": \"Splunk Request Channel\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"starting-field-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"request-channel\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"starting-field-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Begins processing from the root node.\",\n-                                        \"displayName\": \"Root Node\",\n-                                        \"value\": \"ROOT_NODE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Skips forward to the given nested JSON field (array or object) to begin processing.\",\n-                                        \"displayName\": \"Nested Field\",\n-                                        \"value\": \"NESTED_FIELD\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ROOT_NODE\",\n-                                \"description\": \"Start processing from the root node or from a specified nested node.\",\n-                                \"displayName\": \"Starting Field Strategy\",\n+                            \"source\": {\n+                                \"description\": \"User-defined event source. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Source\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"starting-field-strategy\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"source\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.json.JsonPathReader\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"json\",\n-                            \"parser\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"tree\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.json.JsonTreeReader\",\n-                        \"typeDescription\": \"Parses JSON into individual Record objects. While the reader expects each record to be well-formed JSON, the content of a FlowFile may consist of many records, each as a well-formed JSON array or JSON object with optional whitespace between them, such as the common 'JSON-per-line' format. If an array is encountered, each element in that array will be treated as a separate record. If the schema that is configured contains a field that is not present in the JSON, a null value will be used. If the JSON contains a field that is not present in the schema, that field will be skipped. See the Usage of the Controller Service for more information and examples.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Name of the RecordReader\",\n-                                \"value\": \"A RecordReaderFactory controller service\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Service to Use\": {\n-                                \"defaultValue\": \"${recordreader.name}\",\n-                                \"description\": \"Specifies the name of the user-defined property whose associated Controller Service should be used.\",\n-                                \"displayName\": \"Service to Use\",\n+                            },\n+                            \"source-type\": {\n+                                \"description\": \"User-defined event sourcetype. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Source Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Service to Use\",\n-                                \"required\": true,\n+                                \"name\": \"source-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Uses as value for HTTP Content-Type header if set.\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.lookup.RecordSetWriterLookup\"\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"lookup\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"row\"\n+                            \"org.apache.nifi.processors.splunk.QuerySplunkIndexingStatus\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.ReaderLookup\",\n-                        \"typeDescription\": \"Provides a RecordReaderFactory that can be used to dynamically select another RecordReaderFactory. This will allow multiple RecordReaderFactories to be defined and registered, and then selected dynamically at runtime by referencing a FlowFile attribute in the Service to Use property.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Name of the RecordSetWriter\",\n-                                \"value\": \"A RecordSetWriterFactory controller service\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Service to Use\": {\n-                                \"defaultValue\": \"${recordsetwriter.name}\",\n-                                \"description\": \"Specifies the name of the user-defined property whose associated Controller Service should be used.\",\n-                                \"displayName\": \"Service to Use\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Service to Use\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent to this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.lookup.ReaderLookup\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"lookup\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"result\",\n-                            \"row\",\n-                            \"serializer\",\n-                            \"set\",\n-                            \"writer\"\n+                            \"http\",\n+                            \"logs\",\n+                            \"splunk\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.RecordSetWriterLookup\",\n-                        \"typeDescription\": \"Provides a RecordSetWriterFactory that can be used to dynamically select another RecordSetWriterFactory. This will allow multiple RecordSetWriterFactory's to be defined and registered, and then selected dynamically at runtime by tagging FlowFiles with the attributes and referencing those attributes in the Service to Use property.\",\n-                        \"version\": \"1.27.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.splunk.PutSplunkHTTP\",\n+                        \"typeDescription\": \"Sends flow file content to the specified Splunk server over HTTP or HTTPS. Supports HEC Index Acknowledgement.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The indexing acknowledgement id provided by Splunk.\",\n+                                \"name\": \"splunk.acknowledgement.id\"\n+                            },\n+                            {\n+                                \"description\": \"The time of the response of put request for Splunk.\",\n+                                \"name\": \"splunk.responded.at\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-splunk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"max-cache-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of Schemas to cache.\",\n-                                \"displayName\": \"Maximum Cache Size\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The ip address or hostname of the Splunk server.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max-cache-size\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"record\",\n-                            \"schema\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.schema.inference.VolatileSchemaCache\",\n-                        \"typeDescription\": \"Provides a Schema Cache that evicts elements based on a Least-Recently-Used algorithm. This cache is not persisted, so any restart of NiFi will result in the cache being cleared. Additionally, the cache will be cleared any time that the Controller Service is stopped and restarted.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies which character set of the Syslog messages\",\n-                                \"displayName\": \"Character Set\",\n+                            },\n+                            \"Owner\": {\n+                                \"description\": \"The owner to pass to Splunk.\",\n+                                \"displayName\": \"Owner\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Owner\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password to authenticate to Splunk.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"8088\",\n+                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n+                                \"displayName\": \"HTTP Event Collector Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"syslog-5424-reader-raw-message\": {\n+                            \"Scheme\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"https\",\n+                                        \"value\": \"https\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"http\",\n+                                        \"value\": \"http\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the record will have a _raw field containing the raw message\",\n-                                \"displayName\": \"Raw message\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"syslog-5424-reader-raw-message\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"logfiles\",\n-                            \"logs\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"syslog\",\n-                            \"syslog 5424\",\n-                            \"text\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.syslog.Syslog5424Reader\",\n-                        \"typeDescription\": \"Provides a mechanism for reading RFC 5424 compliant Syslog data, such as log files, and structuring the data so that it can be processed.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies which character set of the Syslog messages\",\n-                                \"displayName\": \"Character Set\",\n+                                \"defaultValue\": \"https\",\n+                                \"description\": \"The scheme for connecting to Splunk.\",\n+                                \"displayName\": \"Scheme\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"Scheme\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"syslog-5424-reader-raw-message\": {\n+                            \"Security Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"TLSv1_2\",\n+                                        \"value\": \"TLSv1_2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"TLSv1_1\",\n+                                        \"value\": \"TLSv1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1\",\n+                                        \"value\": \"TLSv1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSLv3\",\n+                                        \"value\": \"SSLv3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the record will have a _raw field containing the raw message\",\n-                                \"displayName\": \"Raw message\",\n+                                \"defaultValue\": \"TLSv1_2\",\n+                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"syslog-5424-reader-raw-message\",\n+                                \"name\": \"Security Protocol\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Token\": {\n+                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n+                                \"displayName\": \"HTTP Event Collector Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Token\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"The username to authenticate to Splunk.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-query-size\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum number of acknowledgement identifiers the outgoing query contains in one batch. It is recommended not to set it too low in order to reduce network communication.\",\n+                                \"displayName\": \"Maximum Query Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-query-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"request-channel\": {\n+                                \"description\": \"Identifier of the used request channel.\",\n+                                \"displayName\": \"Splunk Request Channel\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"request-channel\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ttl\": {\n+                                \"defaultValue\": \"1 hour\",\n+                                \"description\": \"The maximum time the processor tries to acquire acknowledgement confirmation for an index, from the point of registration. After the given amount of time, the processor considers the index as not acknowledged and transfers the FlowFile to the \\\"unacknowledged\\\" relationship.\",\n+                                \"displayName\": \"Maximum Waiting Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ttl\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"The indexing acknowledgement id provided by Splunk.\",\n+                                \"name\": \"splunk.acknowledgement.id\"\n+                            },\n+                            {\n+                                \"description\": \"The time of the response of put request for Splunk.\",\n+                                \"name\": \"splunk.responded.at\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.splunk.PutSplunkHTTP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was successful.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful. This can happen when the acknowledgement did not happened within the time period set for Maximum Waiting Time. FlowFiles with acknowledgement id unknown for the Splunk server will be transferred to this relationship after the Maximum Waiting Time is reached.\",\n+                                \"name\": \"unacknowledged\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement state is not determined. FlowFiles transferred to this relationship might be penalized. This happens when Splunk returns with HTTP 200 but with false response for the acknowledgement id in the flow file attribute.\",\n+                                \"name\": \"undetermined\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful due to errors during the communication. FlowFiles are timing out or unknown by the Splunk server will transferred to \\\"undetermined\\\" relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"logfiles\",\n+                            \"acknowledgement\",\n+                            \"http\",\n                             \"logs\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"syslog\",\n-                            \"text\"\n+                            \"splunk\"\n                         ],\n-                        \"type\": \"org.apache.nifi.syslog.SyslogReader\",\n-                        \"typeDescription\": \"Attempts to parses the contents of a Syslog message in accordance to RFC5424 and RFC3164. In the case of RFC5424 formatted messages, structured data is not supported, and will be returned as part of the message.Note: Be mindfull that RFC3164 is informational and a wide range of different implementations are present in the wild.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.splunk.QuerySplunkIndexingStatus\",\n+                        \"typeDescription\": \"Queries Splunk server in order to acquire the status of indexing acknowledgement.\",\n                         \"version\": \"1.27.0\"\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-confluent-platform-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-confluent-platform-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Properties that begin with 'request.header.' are populated into a map and passed as http headers in REST requests to the Confluent Schema Registry\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"request.header.*\",\n+                                \"value\": \"String literal, may not be empty\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character set to use when writing the data to the FlowFile\",\n-                                \"displayName\": \"Character Set\",\n+                            \"authentication-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BASIC\",\n+                                        \"value\": \"BASIC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"HTTP Client Authentication Type for Confluent Schema Registry\",\n+                                \"displayName\": \"Authentication Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"authentication-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cache-expiration\": {\n+                                \"defaultValue\": \"1 hour\",\n+                                \"description\": \"Specifies how long a Schema that is cached should remain in the cache. Once this time period elapses, a cached version of a schema will no longer be used, and the service will have to communicate with the Schema Registry again in order to obtain the schema.\",\n+                                \"displayName\": \"Cache Expiration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-expiration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Text\": {\n-                                \"description\": \"The text to use when writing the results. This property will evaluate the Expression Language using any of the fields available in a Record.\",\n-                                \"displayName\": \"Text\",\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached from the Schema Registry\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Text\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Type\",\n+                                        \"propertyName\": \"authentication-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password for authentication to Confluent Schema Registry\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"ssl-context\": {\n+                                \"description\": \"Specifies the SSL Context Service to use for interacting with the Confluent Schema Registry\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait to receive data from the Schema Registry before considering the communications a failure\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"url\": {\n+                                \"defaultValue\": \"http://localhost:8081\",\n+                                \"description\": \"A comma-separated list of URLs of the Schema Registry to interact with\",\n+                                \"displayName\": \"Schema Registry URLs\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Type\",\n+                                        \"propertyName\": \"authentication-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username for authentication to Confluent Schema Registry\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"el\",\n-                            \"expression\",\n-                            \"freeform\",\n-                            \"language\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"resultset\",\n-                            \"serialize\",\n-                            \"text\",\n-                            \"writer\"\n+                            \"avro\",\n+                            \"confluent\",\n+                            \"kafka\",\n+                            \"registry\",\n+                            \"schema\"\n                         ],\n-                        \"type\": \"org.apache.nifi.text.FreeFormTextRecordSetWriter\",\n-                        \"typeDescription\": \"Writes the contents of a RecordSet as free-form text. The configured text is able to make use of the Expression Language to reference each of the fields that are available in a Record, as well as the attributes in the FlowFile and variables. If there is a name collision, the field name/value is used before attributes or variables. Each record in the RecordSet will be separated by a single newline character.\",\n+                        \"type\": \"org.apache.nifi.confluent.schemaregistry.ConfluentSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a Schema Registry that interacts with the Confluent Schema Registry so that those Schemas that are stored in the Confluent Schema Registry can be used in NiFi. The Confluent Schema Registry has a notion of a \\\"subject\\\" for schemas, which is their terminology for a schema name. When a Schema is looked up by name by this registry, it will find a Schema in the Confluent Schema Registry with that subject.\",\n                         \"version\": \"1.27.0\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-provenance-repository-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-single-user-iaa-providers-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hadoop-dbcp-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hadoop-dbcp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n+                        \"dynamicProperties\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"These properties will be set on the Hadoop configuration after loading any provided configuration files.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Hadoop configuration property.\",\n+                                \"value\": \"The value of the given Hadoop configuration property.\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"event\",\n-                            \"log\",\n-                            \"parser\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"windows\",\n-                            \"xml\"\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n                         ],\n-                        \"type\": \"org.apache.nifi.windowsevent.WindowsEventLogReader\",\n-                        \"typeDescription\": \"Reads Windows Event Log data as XML content having been generated by ConsumeWindowsEventLog, ParseEvtx, etc. (see Additional Details) and creates Record object(s). If the root tag of the input XML is 'Events', the child content is expected to be a series of 'Event' tags, each of which will constitute a single record. If the root tag is 'Event', the content is expected to be a single 'Event' and thus a single record. No other root tags are valid. Only events of type 'System' are currently supported.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n+                            \"Database Connection URL\": {\n+                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n+                                \"displayName\": \"Database Connection URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Database Connection URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Database Driver Class Name\": {\n+                                \"description\": \"Database driver class name\",\n+                                \"displayName\": \"Database Driver Class Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Database Driver Class Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Database User\": {\n+                                \"description\": \"Database user name\",\n+                                \"displayName\": \"Database User\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Database User\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"attribute_prefix\": {\n-                                \"description\": \"If this property is set, the name of attributes will be prepended with a prefix when they are added to a record.\",\n-                                \"displayName\": \"Attribute Prefix\",\n+                            \"Max Total Connections\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of active connections that can be allocated from this pool at the same time,  or negative for no limit.\",\n+                                \"displayName\": \"Max Total Connections\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"attribute_prefix\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Max Total Connections\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"500 millis\",\n+                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or -1 to wait indefinitely. \",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Max Wait Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password for the database user\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Validation-query\": {\n+                                \"description\": \"Validation query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. Note!! Using validation might have some performance penalty.\",\n+                                \"displayName\": \"Validation query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Validation-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"content_field_name\": {\n-                                \"description\": \"If tags with content (e. g. <field>content</field>) are defined as nested records in the schema, the name of the tag will be used as name for the record and the value of this property will be used as name for the field. If tags with content shall be parsed together with attributes (e. g. <field attribute=\\\"123\\\">content</field>), they have to be defined as records. In such a case, the name of the tag will be used as the name for the record and  the value of this property will be used as the name for the field holding the original content. The name of the attribute will be used to create a new record field, the content of which will be the value of the attribute. For more information, see the 'Additional Details...' section of the XMLReader controller service's documentation.\",\n-                                \"displayName\": \"Field Name for Content\",\n+                            \"database-driver-locations\": {\n+                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies. For example '/var/tmp/phoenix-client.jar'. NOTE: It is required that the resources specified by this property provide the classes from hadoop-common, such as Configuration and UserGroupInformation.\",\n+                                \"displayName\": \"Database Driver Location(s)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"content_field_name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"database-driver-locations\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-max-conn-lifetime\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The maximum lifetime of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n+                                \"displayName\": \"Max Connection Lifetime\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-max-conn-lifetime\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"parse_xml_attributes\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"infer-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"When 'Schema Access Strategy' is 'Infer Schema' and this property is 'true' then XML attributes are parsed and added to the record as new fields. When the schema is inferred but this property is 'false', XML attributes and their values are ignored.\",\n-                                \"displayName\": \"Parse XML Attributes\",\n+                            \"dbcp-max-idle-conns\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of connections that can remain idle in the pool without extra ones being released. Set to any negative value to allow unlimited idle connections.\",\n+                                \"displayName\": \"Max Idle Connections\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parse_xml_attributes\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-max-idle-conns\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record_format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Each FlowFile will consist of a single record without any sort of \\\"wrapper\\\".\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Each FlowFile will consist of zero or more records. The outer-most XML element is expected to be a \\\"wrapper\\\" and will be ignored.\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Whether to treat a FlowFile as a single Record or an array of multiple Records is determined by the value of the 'xml.stream.is.array' attribute. If the value of the attribute is 'true' (case-insensitive), then the XML Reader will treat the FlowFile as a series of Records with the outer element being ignored. If the value of the attribute is 'false' (case-insensitive), then the FlowFile is treated as a single Record and no wrapper element is assumed. If the attribute is missing or its value is anything other than 'true' or 'false', then an Exception will be thrown and no records will be parsed.\",\n-                                        \"displayName\": \"Use attribute 'xml.stream.is.array'\",\n-                                        \"value\": \"${xml.stream.is.array}\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"This property defines whether the reader expects a FlowFile to consist of a single Record or a series of Records with a \\\"wrapper element\\\". Because XML does not provide for a way to read a series of XML documents from a stream directly, it is common to combine many XML documents by concatenating them and then wrapping the entire XML blob  with a \\\"wrapper element\\\". This property dictates whether the reader expects a FlowFile to consist of a single Record or a series of Records with a \\\"wrapper element\\\" that will be ignored.\",\n-                                \"displayName\": \"Expect Records as Array\",\n+                            \"dbcp-min-evictable-idle-time\": {\n+                                \"defaultValue\": \"30 mins\",\n+                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction.\",\n+                                \"displayName\": \"Minimum Evictable Idle Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"record_format\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-min-evictable-idle-time\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n-                                        \"displayName\": \"Infer Schema\",\n-                                        \"value\": \"infer-schema\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"infer-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                            \"dbcp-min-idle-conns\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The minimum number of connections that can remain idle in the pool without extra ones being created. Set to or zero to allow no idle connections.\",\n+                                \"displayName\": \"Minimum Idle Connections\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-min-idle-conns\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                            \"dbcp-soft-min-evictable-idle-time\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle connection evictor, with the extra condition that at least a minimum number of idle connections remain in the pool. When the not-soft version of this option is set to a positive value, it is examined first by the idle connection evictor: when idle connections are visited by the evictor, idle time is first compared against it (without considering the number of idle connections in the pool) and then against this soft option, including the minimum idle connections constraint.\",\n+                                \"displayName\": \"Soft Minimum Evictable Idle Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-soft-min-evictable-idle-time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-inference-cache\": {\n-                                \"description\": \"Specifies a Schema Cache to use when inferring the schema. If not populated, the schema will be inferred each time. However, if a cache is specified, the cache will first be consulted and if the applicable schema can be found, it will be used instead of inferring the schema.\",\n-                                \"displayName\": \"Schema Inference Cache\",\n+                            \"dbcp-time-between-eviction-runs\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The time period to sleep between runs of the idle connection evictor thread. When non-positive, no idle connection evictor thread will be run.\",\n+                                \"displayName\": \"Time Between Eviction Runs\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-time-between-eviction-runs\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"hadoop-config-resources\": {\n+                                \"description\": \"A file, or comma separated list of files, which contain the Hadoop configuration (core-site.xml, etc.). Without this, Hadoop will search the classpath, or will revert to a default configuration. Note that to enable authentication with Kerberos, the appropriate properties must be set in the configuration files.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hadoop-config-resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-inference-cache\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"parser\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"xml\"\n+                            \"connection\",\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"hadoop\",\n+                            \"jdbc\",\n+                            \"pooling\",\n+                            \"store\"\n                         ],\n-                        \"type\": \"org.apache.nifi.xml.XMLReader\",\n-                        \"typeDescription\": \"Reads XML content and creates Record objects. Records are expected in the second level of XML data, embedded in an enclosing root tag.\",\n+                        \"type\": \"org.apache.nifi.dbcp.HadoopDBCPConnectionPool\",\n+                        \"typeDescription\": \"Provides a Database Connection Pooling Service for Hadoop related JDBC services. This service requires that the Database Driver Location(s) contains some version of a hadoop-common JAR, or a shaded JAR that shades hadoop-common.\",\n                         \"version\": \"1.27.0\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-gcp-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-stateful-analysis-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-stateful-analysis-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character set to use when writing the data to the FlowFile\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n+                            \"Sub-window length\": {\n+                                \"description\": \"When set, values will be batched into sub-windows of the set length. This allows for much larger length total windows to be set but sacrifices some precision. If this is not set (or is 0) then each value is stored in state with the timestamp of when it was received. After the length of time stated in Time window elaspes the value will be removed. If this is set, values will be batched together every X amount of time (where X is the time period set for this property) and removed all at once.\",\n+                                \"displayName\": \"Sub-window length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n+                                \"name\": \"Sub-window length\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Schema Write Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n-                                        \"displayName\": \"Do Not Write Schema\",\n-                                        \"value\": \"no-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n-                                        \"displayName\": \"Set 'schema.name' Attribute\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n-                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n-                                        \"value\": \"full-schema-attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Schema Registry Reference\",\n-                                        \"value\": \"confluent-encoded\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"no-schema\",\n-                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n-                                \"displayName\": \"Schema Write Strategy\",\n+                            \"Time window\": {\n+                                \"description\": \"The time window on which to calculate the rolling window.\",\n+                                \"displayName\": \"Time window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Write Strategy\",\n+                                \"name\": \"Time window\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n+                            \"Value to track\": {\n+                                \"description\": \"The expression on which to evaluate each FlowFile. The result of the expression will be added to the rolling window value.\",\n+                                \"displayName\": \"Value to track\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Value to track\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Store the values backing the rolling window. This includes storing the individual values and their time-stamps or the batches of values and their counts.\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"When state fails to save when processing a FlowFile, the FlowFile is routed here.\",\n+                                \"name\": \"set state fail\"\n                             },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"All FlowFiles are successfully processed are routed here\",\n+                                \"name\": \"success\"\n                             },\n-                            \"array_tag_name\": {\n-                                \"description\": \"Name of the tag used by property \\\"Wrap Elements of Arrays\\\" to write arrays\",\n-                                \"displayName\": \"Array Tag Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"array_tag_name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"When a FlowFile fails for a reason other than failing to set state it is routed here.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Attribute Expression Language\",\n+                            \"data science\",\n+                            \"rolling\",\n+                            \"state\",\n+                            \"window\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.stateful.analysis.AttributeRollingWindow\",\n+                        \"typeDescription\": \"Track a Rolling Window based on evaluating an Expression Language expression on each FlowFile and add that value to the processor's state. Each FlowFile will be emitted with the count of FlowFiles and total aggregate value of values processed in the current time window.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The rolling window value (sum of all the values stored).\",\n+                                \"name\": \"rolling_window_value\"\n                             },\n-                            \"array_wrapping\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The value of the property \\\"Array Tag Name\\\" will be used as the tag name to wrap elements of an array. The field name of the array field will be used for the tag name of the elements.\",\n-                                        \"displayName\": \"Use Property as Wrapper\",\n-                                        \"value\": \"use-property-as-wrapper\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The value of the property \\\"Array Tag Name\\\" will be used for the tag name of the elements of an array. The field name of the array field will be used as the tag name to wrap elements.\",\n-                                        \"displayName\": \"Use Property for Elements\",\n-                                        \"value\": \"use-property-for-elements\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The elements of an array will not be wrapped\",\n-                                        \"displayName\": \"No Wrapping\",\n-                                        \"value\": \"no-wrapping\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"no-wrapping\",\n-                                \"description\": \"Specifies how the writer wraps elements of fields of type array\",\n-                                \"displayName\": \"Wrap Elements of Arrays\",\n+                            {\n+                                \"description\": \"The count of the number of FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_count\"\n+                            },\n+                            {\n+                                \"description\": \"The mean of the FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_mean\"\n+                            },\n+                            {\n+                                \"description\": \"The variance of the FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_variance\"\n+                            },\n+                            {\n+                                \"description\": \"The standard deviation (positive square root of the variance) of the FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_stddev\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-websocket-services-jetty-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"authentication-charset\": {\n+                                \"defaultValue\": \"US-ASCII\",\n+                                \"description\": \"The charset for Basic Authentication header base64 string.\",\n+                                \"displayName\": \"Authentication Header Charset\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"array_wrapping\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"authentication-charset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"omit_xml_declaration\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not to include XML declaration\",\n-                                \"displayName\": \"Omit XML Declaration\",\n+                            \"connection-attempt-timeout\": {\n+                                \"defaultValue\": \"3\",\n+                                \"description\": \"The number of times to try and establish a connection.\",\n+                                \"displayName\": \"Connection Attempt Count\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"omit_xml_declaration\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"connection-attempt-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"pretty_print_xml\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the XML should be pretty printed\",\n-                                \"displayName\": \"Pretty Print XML\",\n+                            \"connection-timeout\": {\n+                                \"defaultValue\": \"3 sec\",\n+                                \"description\": \"The timeout to connect the WebSocket URI.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"pretty_print_xml\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"connection-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record_tag_name\": {\n-                                \"description\": \"Specifies the name of the XML record tag wrapping the record fields. If this is not set, the writer will use the record name in the schema.\",\n-                                \"displayName\": \"Name of Record Tag\",\n+                            \"custom-authorization\": {\n+                                \"description\": \"Configures a custom HTTP Authorization Header as described in RFC 7235 Section 4.2. Setting a custom Authorization Header excludes configuring the User Name and User Password properties for Basic Authentication.\",\n+                                \"displayName\": \"Custom Authorization\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record_tag_name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"custom-authorization\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"root_tag_name\": {\n-                                \"description\": \"Specifies the name of the XML root tag wrapping the record set. This property has to be defined if the writer is supposed to write multiple records in a single FlowFile.\",\n-                                \"displayName\": \"Name of Root Tag\",\n+                            \"input-buffer-size\": {\n+                                \"defaultValue\": \"4 kb\",\n+                                \"description\": \"The size of the input (read from network layer) buffer size.\",\n+                                \"displayName\": \"Input Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"root_tag_name\",\n-                                \"required\": false,\n+                                \"name\": \"input-buffer-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n-                                        \"displayName\": \"Inherit Record Schema\",\n-                                        \"value\": \"inherit-record-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"inherit-record-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                            \"max-binary-message-size\": {\n+                                \"defaultValue\": \"64 kb\",\n+                                \"description\": \"The maximum size of a binary message during parsing/generating.\",\n+                                \"displayName\": \"Max Binary Message Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"max-binary-message-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                            \"max-text-message-size\": {\n+                                \"defaultValue\": \"64 kb\",\n+                                \"description\": \"The maximum size of a text message during parsing/generating.\",\n+                                \"displayName\": \"Max Text Message Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-text-message-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-cache\": {\n-                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n-                                \"displayName\": \"Schema Cache\",\n+                            \"proxy-host\": {\n+                                \"description\": \"The host name of the HTTP Proxy.\",\n+                                \"displayName\": \"HTTP Proxy Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-cache\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-host\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"proxy-port\": {\n+                                \"description\": \"The port number of the HTTP Proxy.\",\n+                                \"displayName\": \"HTTP Proxy Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-protocol-version\": {\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n-                                        \"propertyName\": \"Schema Write Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n-                                \"displayName\": \"Schema Protocol Version\",\n+                            \"session-maintenance-interval\": {\n+                                \"defaultValue\": \"10 sec\",\n+                                \"description\": \"The interval between session maintenance activities. A WebSocket session established with a WebSocket server can be terminated due to different reasons including restarting the WebSocket server or timing out inactive sessions. This session maintenance activity is periodically executed in order to reconnect those lost sessions, so that a WebSocket client can reuse the same session id transparently after it reconnects successfully.  The maintenance activity is executed until corresponding processors or this controller service is stopped.\",\n+                                \"displayName\": \"Session Maintenance Interval\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-protocol-version\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"session-maintenance-interval\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only WSS requests; otherwise, the server will accept only WS requests\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                            \"user-name\": {\n+                                \"description\": \"The user name for Basic Authentication.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"user-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"user-password\": {\n+                                \"description\": \"The user password for Basic Authentication.\",\n+                                \"displayName\": \"User Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"user-password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"suppress_nulls\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will be written out as a null value\",\n-                                        \"displayName\": \"Never Suppress\",\n-                                        \"value\": \"never-suppress\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will not be written out\",\n-                                        \"displayName\": \"Always Suppress\",\n-                                        \"value\": \"always-suppress\"\n-                                    },\n-                                    {\n-                                        \"description\": \"When a field has a value of null, it will be written out. However, if a field is defined in the schema and not present in the record, the field will not be written out.\",\n-                                        \"displayName\": \"Suppress Missing Values\",\n-                                        \"value\": \"suppress-missing\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"never-suppress\",\n-                                \"description\": \"Specifies how the writer should handle a null field\",\n-                                \"displayName\": \"Suppress Null Values\",\n+                            \"websocket-uri\": {\n+                                \"description\": \"The WebSocket URI this client connects to.\",\n+                                \"displayName\": \"WebSocket URI\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"suppress_nulls\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"websocket-uri\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n+                                \"version\": \"1.27.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"record\",\n-                            \"recordset\",\n-                            \"resultset\",\n-                            \"row\",\n-                            \"serialize\",\n-                            \"writer\",\n-                            \"xml\"\n+                            \"Jetty\",\n+                            \"WebSocket\",\n+                            \"client\"\n                         ],\n-                        \"type\": \"org.apache.nifi.xml.XMLRecordSetWriter\",\n-                        \"typeDescription\": \"Writes a RecordSet to XML. The records are wrapped by a root tag.\",\n+                        \"type\": \"org.apache.nifi.websocket.jetty.JettyWebSocketClient\",\n+                        \"typeDescription\": \"Implementation of WebSocketClientService. This service uses Jetty WebSocket client module to provide WebSocket session management throughout the application.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n+                            \"auth-path-spec\": {\n+                                \"defaultValue\": \"/*\",\n+                                \"description\": \"Specify a Path Spec to apply Basic Authentication.\",\n+                                \"displayName\": \"Basic Authentication Path Spec\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"auth-path-spec\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n+                            \"auth-roles\": {\n+                                \"defaultValue\": \"**\",\n+                                \"description\": \"The authenticated user must have one of specified role. Multiple roles can be set as comma separated string. '*' represents any role and so does '**' any role including no role.\",\n+                                \"displayName\": \"Basic Authentication Roles\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"auth-roles\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"basic-auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n-                                        \"displayName\": \"Infer Schema\",\n-                                        \"value\": \"infer-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"infer-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If enabled, client connection requests are authenticated with Basic authentication using the specified Login Provider.\",\n+                                \"displayName\": \"Enable Basic Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"basic-auth\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-application-strategy\": {\n+                            \"client-authentication\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Applies the schema for the whole JSON.\",\n-                                        \"displayName\": \"Whole JSON\",\n-                                        \"value\": \"WHOLE_JSON\"\n+                                        \"description\": \"Processor will not authenticate clients. Anyone can communicate with this Processor anonymously\",\n+                                        \"displayName\": \"No Authentication\",\n+                                        \"value\": \"no\"\n                                     },\n                                     {\n-                                        \"description\": \"Applies the schema for the selected part starting from the \\\"Starting Field Name\\\".\",\n-                                        \"displayName\": \"Selected Part\",\n-                                        \"value\": \"SELECTED_PART\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SELECTED_PART\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"schema-text-property\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"Processor will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n+                                        \"displayName\": \"Want Authentication\",\n+                                        \"value\": \"want\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"NESTED_FIELD\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Starting Field Strategy\",\n-                                        \"propertyName\": \"starting-field-strategy\"\n+                                        \"description\": \"Processor will reject communications from any client unless the client provides a certificate that is trusted by the TrustStore specified in the SSL Context Service\",\n+                                        \"displayName\": \"Need Authentication\",\n+                                        \"value\": \"need\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether the schema is defined for the whole JSON or for the selected part starting from \\\"Starting Field Name\\\".\",\n-                                \"displayName\": \"Schema Application Strategy\",\n+                                \"defaultValue\": \"no\",\n+                                \"description\": \"Specifies whether or not the Processor should authenticate client by its certificate. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n+                                \"displayName\": \"SSL Client Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-application-strategy\",\n+                                \"name\": \"client-authentication\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-inference-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"infer-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies a Schema Cache to use when inferring the schema. If not populated, the schema will be inferred each time. However, if a cache is specified, the cache will first be consulted and if the applicable schema can be found, it will be used instead of inferring the schema.\",\n-                                \"displayName\": \"Schema Inference Cache\",\n+                            \"input-buffer-size\": {\n+                                \"defaultValue\": \"4 kb\",\n+                                \"description\": \"The size of the input (read from network layer) buffer size.\",\n+                                \"displayName\": \"Input Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-inference-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"input-buffer-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"listen-port\": {\n+                                \"description\": \"The port number on which this WebSocketServer listens to.\",\n+                                \"displayName\": \"Listen Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"listen-port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                            \"login-service\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"See http://www.eclipse.org/jetty/javadoc/current/org/eclipse/jetty/security/HashLoginService.html for detail.\",\n+                                        \"displayName\": \"HashLoginService\",\n+                                        \"value\": \"hash\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                                \"defaultValue\": \"hash\",\n+                                \"description\": \"Specify which Login Service to use for Basic Authentication.\",\n+                                \"displayName\": \"Login Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"name\": \"login-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"max-binary-message-size\": {\n+                                \"defaultValue\": \"64 kb\",\n+                                \"description\": \"The maximum size of a binary message during parsing/generating.\",\n+                                \"displayName\": \"Max Binary Message Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-binary-message-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"starting-field-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"NESTED_FIELD\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Starting Field Strategy\",\n-                                        \"propertyName\": \"starting-field-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Skips forward to the given nested JSON field (array or object) to begin processing.\",\n-                                \"displayName\": \"Starting Field Name\",\n+                            \"max-text-message-size\": {\n+                                \"defaultValue\": \"64 kb\",\n+                                \"description\": \"The maximum size of a text message during parsing/generating.\",\n+                                \"displayName\": \"Max Text Message Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"starting-field-name\",\n-                                \"required\": false,\n+                                \"name\": \"max-text-message-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"starting-field-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Begins processing from the root node.\",\n-                                        \"displayName\": \"Root Node\",\n-                                        \"value\": \"ROOT_NODE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Skips forward to the given nested JSON field (array or object) to begin processing.\",\n-                                        \"displayName\": \"Nested Field\",\n-                                        \"value\": \"NESTED_FIELD\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ROOT_NODE\",\n-                                \"description\": \"Start processing from the root node or from a specified nested node.\",\n-                                \"displayName\": \"Starting Field Strategy\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only WSS requests; otherwise, the server will accept only WS requests\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"starting-field-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"users-properties-file\": {\n+                                \"description\": \"Specify a property file containing users for Basic Authentication using HashLoginService. See http://www.eclipse.org/jetty/documentation/current/configuring-security.html for detail.\",\n+                                \"displayName\": \"Users Properties File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"users-properties-file\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n+                                \"version\": \"1.27.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.json.JsonPathReader\"\n-                        ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"parser\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"tree\",\n-                            \"yaml\"\n+                            \"Jetty\",\n+                            \"WebSocket\",\n+                            \"server\"\n                         ],\n-                        \"type\": \"org.apache.nifi.yaml.YamlTreeReader\",\n-                        \"typeDescription\": \"Parses YAML into individual Record objects. While the reader expects each record to be well-formed YAML, the content of a FlowFile may consist of many records, each as a well-formed YAML array or YAML object. If an array is encountered, each element in that array will be treated as a separate record. If the schema that is configured contains a field that is not present in the YAML, a null value will be used. If the YAML contains a field that is not present in the schema, that field will be skipped. Please note this controller service does not support resolving the use of YAML aliases. Any alias present will be treated as a string. See the Usage of the Controller Service for more information and examples.\",\n+                        \"type\": \"org.apache.nifi.websocket.jetty.JettyWebSocketServer\",\n+                        \"typeDescription\": \"Implementation of WebSocketServerService. This service uses Jetty WebSocket server module to provide WebSocket session management throughout the application.\",\n                         \"version\": \"1.27.0\"\n                     }\n                 ],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-box-services-nar\",\n+            \"artifact\": \"nifi-kerberos-user-service-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Allows user to define a Keytab and principal that can then be used by other components.\",\n+                                \"requiredPermission\": \"access keytab\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"app-config-file\": {\n-                                \"description\": \"Full path of an App config JSON file. See Additional Details for more information.\",\n-                                \"displayName\": \"App Config File\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal.\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"app-config-file\",\n-                                \"required\": false,\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": true,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"app-config-json\": {\n-                                \"description\": \"The raw JSON containing an App config. See Additional Details for more information.\",\n-                                \"displayName\": \"App Config JSON\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"app-config-json\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"box-account-id\": {\n-                                \"description\": \"The ID of the Box account who owns the accessed resource. Same as 'User Id' under 'App Info' in the App 'General Settings'.\",\n-                                \"displayName\": \"Account ID\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"box-account-id\",\n+                                \"name\": \"Kerberos Principal\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-box-services-api-nar\",\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                \"version\": \"1.27.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"box\",\n-                            \"client\",\n-                            \"provider\"\n+                            \"Authentication\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Keytab\",\n+                            \"Principal\",\n+                            \"Security\"\n                         ],\n-                        \"type\": \"org.apache.nifi.box.controllerservices.JsonConfigBasedBoxClientService\",\n-                        \"typeDescription\": \"Provides Box client objects through which Box API calls can be used.\",\n+                        \"type\": \"org.apache.nifi.kerberos.KerberosKeytabUserService\",\n+                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and keytab that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it (as opposed to specifying the principal and keytab directly in the processor) an administrator is able to choose which users are allowed to use which keytabs and principals. This provides a more robust security model for multi-tenant use cases.\",\n                         \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-ambari-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-ambari-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"This reporting task is deprecated and will be removed in NiFi 2.x.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Application ID\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The Application ID to be included in the metrics sent to Ambari\",\n-                                \"displayName\": \"Application ID\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Application ID\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kerberos Password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"The Hostname of this NiFi instance to be included in the metrics sent to Ambari\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"Kerberos Principal\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Metrics Collector URL\": {\n-                                \"defaultValue\": \"http://localhost:6188/ws/v1/timeline/metrics\",\n-                                \"description\": \"The URL of the Ambari Metrics Collector Service\",\n-                                \"displayName\": \"Metrics Collector URL\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Authentication\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Password\",\n+                            \"Principal\",\n+                            \"Security\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.kerberos.KerberosPasswordUserService\",\n+                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and password that other components are able to use in order to perform authentication using Kerberos.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Allows user to define a ticket cache and principal that can then be used by other components.\",\n+                                \"requiredPermission\": \"access ticket cache\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Metrics Collector URL\",\n+                                \"name\": \"Kerberos Principal\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Process Group ID\": {\n-                                \"description\": \"If specified, the reporting task will send metrics about this process group only. If not, the root process group is used and global metrics are sent.\",\n-                                \"displayName\": \"Process Group ID\",\n+                            \"Kerberos Ticket Cache File\": {\n+                                \"description\": \"Kerberos ticket cache associated with the principal.\",\n+                                \"displayName\": \"Kerberos Ticket Cache File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Process Group ID\",\n-                                \"required\": false,\n+                                \"name\": \"Kerberos Ticket Cache File\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                \"version\": \"1.27.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n                         ],\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ambari\",\n-                            \"metrics\",\n-                            \"reporting\"\n+                            \"Authentication\",\n+                            \"Cache\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Principal\",\n+                            \"Security\",\n+                            \"Ticket\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.ambari.AmbariReportingTask\",\n-                        \"typeDescription\": \"Publishes metrics from NiFi to Ambari Metrics Service (AMS). Due to how the Ambari Metrics Service works, this reporting task should be scheduled to run every 60 seconds. Each iteration it will send the metrics from the previous iteration, and calculate the current metrics to be sent on next iteration. Scheduling this reporting task at a frequency other than 60 seconds may produce unexpected results.\",\n+                        \"type\": \"org.apache.nifi.kerberos.KerberosTicketCacheUserService\",\n+                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and ticket cache that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it an administrator is able to choose which users are allowed to use which ticket caches and principals. This provides a more robust security model for multi-tenant use cases.\",\n                         \"version\": \"1.27.0\"\n                     }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n+                ],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-websocket-processors-nar\",\n+            \"artifact\": \"nifi-tcp-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-websocket-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-tcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -32944,1516 +29218,1978 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Sets a FlowFile attribute specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A FlowFile attribute to set\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"websocket-client-controller-service\": {\n-                                \"description\": \"A WebSocket CLIENT Controller Service which can connect to a WebSocket server.\",\n-                                \"displayName\": \"WebSocket Client ControllerService\",\n+                            \"connection-attempt-timeout\": {\n+                                \"defaultValue\": \"3\",\n+                                \"description\": \"The number of times to try and establish a connection, before using a backup host if available. This same attempt count would be used for a backup host as well.\",\n+                                \"displayName\": \"Connection Attempt Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"websocket-client-controller-service\",\n+                                \"name\": \"connection-attempt-timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"websocket-client-id\": {\n-                                \"description\": \"The client ID to identify WebSocket session. It should be unique within the WebSocket Client Controller Service. Otherwise, it throws WebSocketConfigurationException when it gets started.\",\n-                                \"displayName\": \"WebSocket Client Id\",\n+                            \"end-of-message-byte\": {\n+                                \"defaultValue\": \"13\",\n+                                \"description\": \"Byte value which denotes end of message. Must be specified as integer within the valid byte range (-128 thru 127). For example, '13' = Carriage return and '10' = New line. Default '13'.\",\n+                                \"displayName\": \"End of message delimiter byte\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"websocket-client-id\",\n+                                \"name\": \"end-of-message-byte\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of successful connection\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"The WebSocket text message output\",\n-                                \"name\": \"text message\"\n+                            \"endpoint-list\": {\n+                                \"description\": \"A comma delimited list of the endpoints to connect to. The format should be <server_address>:<port>. Only one server will be connected to at a time, the others will be used as fail overs.\",\n+                                \"displayName\": \"Endpoint List\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"endpoint-list\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The WebSocket binary message output\",\n-                                \"name\": \"binary message\"\n+                            \"receive-buffer-size\": {\n+                                \"defaultValue\": \"16MB\",\n+                                \"description\": \"The size of the buffer to receive data in. Default 16384 (16MB).\",\n+                                \"displayName\": \"Receive Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"receive-buffer-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n+                            \"reconnect-interval\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The number of seconds to wait before attempting to reconnect to the endpoint.\",\n+                                \"displayName\": \"Reconnect interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"reconnect-interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of connection failure\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The relationship that all incomplete messages from the endpoint will be sent to. Incomplete message is the message that doesn't end with 'End of message delimiter byte'. This can happen when 'Receive Buffer Size' is smaller then the incoming message. If that happens that the subsequent message that completes the previous incomplete message will also end up in this relationship, after which subsequent 'complete' messages will go to 'success'.\",\n+                                \"name\": \"Partial\"\n                             },\n                             {\n-                                \"description\": \"The WebSocket session is established\",\n-                                \"name\": \"connected\"\n+                                \"description\": \"The relationship that all sucessful messages from the endpoint will be sent to.\",\n+                                \"name\": \"Success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"WebSocket\",\n-                            \"consume\",\n-                            \"listen\",\n-                            \"subscribe\"\n+                            \"fetch\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"poll\",\n+                            \"source\",\n+                            \"tcp\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.websocket.ConnectWebSocket\",\n-                        \"typeDescription\": \"Acts as a WebSocket client endpoint to interact with a remote WebSocket server. FlowFiles are transferred to downstream relationships according to received message types as WebSocket client configured with this processor receives messages from remote WebSocket server. If a new flowfile is passed to the processor, the previous sessions will be closed and any data being sent will be aborted.\",\n+                        \"type\": \"org.apache.nifi.processors.gettcp.GetTCP\",\n+                        \"typeDescription\": \"Connects over TCP to the provided endpoint(s). Received data will be written as content to the FlowFile\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"WebSocket Controller Service id.\",\n-                                \"name\": \"websocket.controller.service.id\"\n-                            },\n-                            {\n-                                \"description\": \"Established WebSocket session id.\",\n-                                \"name\": \"websocket.session.id\"\n-                            },\n-                            {\n-                                \"description\": \"WebSocket endpoint id.\",\n-                                \"name\": \"websocket.endpoint.id\"\n-                            },\n-                            {\n-                                \"description\": \"WebSocket client address.\",\n-                                \"name\": \"websocket.local.address\"\n-                            },\n-                            {\n-                                \"description\": \"WebSocket server address.\",\n-                                \"name\": \"websocket.remote.address\"\n-                            },\n-                            {\n-                                \"description\": \"TEXT or BINARY.\",\n-                                \"name\": \"websocket.message.type\"\n+                                \"description\": \"The address of the source endpoint the message came from\",\n+                                \"name\": \"source.endpoint\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hubspot-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-websocket-processors-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hubspot-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"defaultYieldDuration\": \"10 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"server-url-path\": {\n-                                \"description\": \"The WetSocket URL Path on which this processor listens to. Must starts with '/', e.g. '/example'.\",\n-                                \"displayName\": \"Server URL Path\",\n+                            \"access-token\": {\n+                                \"description\": \"Access Token to authenticate requests\",\n+                                \"displayName\": \"Access Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"server-url-path\",\n+                                \"name\": \"access-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"incremental-delay\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Incremental Loading\",\n+                                        \"propertyName\": \"is-incremental\"\n+                                    }\n+                                ],\n+                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35. Set this property to avoid missing objects when the clock of your local machines and HubSpot servers' clock are not in sync and to protect against HubSpot's mechanism that changes last updated timestamps after object creation.\",\n+                                \"displayName\": \"Incremental Delay\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"incremental-delay\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"websocket-server-controller-service\": {\n-                                \"description\": \"A WebSocket SERVER Controller Service which can accept WebSocket requests.\",\n-                                \"displayName\": \"WebSocket Server ControllerService\",\n+                            \"incremental-initial-start-time\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Incremental Loading\",\n+                                        \"propertyName\": \"is-incremental\"\n+                                    }\n+                                ],\n+                                \"description\": \"This property specifies the start time that the processor applies when running the first request. The expected format is a UTC date-time such as '2011-12-03T10:15:30Z'\",\n+                                \"displayName\": \"Incremental Initial Start Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"incremental-initial-start-time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"is-incremental\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"The processor can incrementally load the queried objects so that each object is queried exactly once. For each query, the processor queries objects within a time window where the objects were modified between the previous run time and the current time (optionally adjusted by the Incremental Delay property).\",\n+                                \"displayName\": \"Incremental Loading\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"websocket-server-controller-service\",\n+                                \"name\": \"is-incremental\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"object-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"In HubSpot, the companies object is a standard CRM object. Individual company records can be used to store information about businesses and organizations within company properties.\",\n+                                        \"displayName\": \"Companies\",\n+                                        \"value\": \"/crm/v3/objects/companies\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In HubSpot, contacts store information about individuals. From marketing automation to smart content, the lead-specific data found in contact records helps users leverage much of HubSpot's functionality.\",\n+                                        \"displayName\": \"Contacts\",\n+                                        \"value\": \"/crm/v3/objects/contacts\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In HubSpot, a deal represents an ongoing transaction that a sales team is pursuing with a contact or company. It\\u2019s tracked through pipeline stages until won or lost.\",\n+                                        \"displayName\": \"Deals\",\n+                                        \"value\": \"/crm/v3/objects/deals\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In HubSpot, line items can be thought of as a subset of products. When a product is attached to a deal, it becomes a line item. Line items can be created that are unique to an individual quote, but they will not be added to the product library.\",\n+                                        \"displayName\": \"Line Items\",\n+                                        \"value\": \"/crm/v3/objects/line_items\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In HubSpot, products represent the goods or services to be sold. Building a product library allows the user to quickly add products to deals, generate quotes, and report on product performance.\",\n+                                        \"displayName\": \"Products\",\n+                                        \"value\": \"/crm/v3/objects/products\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In HubSpot, a ticket represents a customer request for help or support.\",\n+                                        \"displayName\": \"Tickets\",\n+                                        \"value\": \"/crm/v3/objects/tickets\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In HubSpot, quotes are used to share pricing information with potential buyers.\",\n+                                        \"displayName\": \"Quotes\",\n+                                        \"value\": \"/crm/v3/objects/quotes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get calls on CRM records and on the calls index page.\",\n+                                        \"displayName\": \"Calls\",\n+                                        \"value\": \"/crm/v3/objects/calls\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get emails on CRM records.\",\n+                                        \"displayName\": \"Emails\",\n+                                        \"value\": \"/crm/v3/objects/emails\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get meetings on CRM records.\",\n+                                        \"displayName\": \"Meetings\",\n+                                        \"value\": \"/crm/v3/objects/meetings\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get notes on CRM records.\",\n+                                        \"displayName\": \"Notes\",\n+                                        \"value\": \"/crm/v3/objects/notes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get tasks on CRM records.\",\n+                                        \"displayName\": \"Tasks\",\n+                                        \"value\": \"/crm/v3/objects/tasks\"\n+                                    }\n+                                ],\n+                                \"description\": \"The HubSpot Object Type requested\",\n+                                \"displayName\": \"Object Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"object-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"result-limit\": {\n+                                \"description\": \"The maximum number of results to request for each invocation of the Processor\",\n+                                \"displayName\": \"Result Limit\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"result-limit\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations\",\n+                                \"displayName\": \"Web Client Service Provider\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"web-client-service-provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"In case of incremental loading, the start and end timestamps of the last query time window are stored in the state. When the 'Result Limit' property is set, the paging cursor is saved after executing a request. Only the objects after the paging cursor will be retrieved. The maximum number of retrieved objects can be set in the 'Result Limit' property.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The WebSocket text message output\",\n-                                \"name\": \"text message\"\n-                            },\n-                            {\n-                                \"description\": \"The WebSocket binary message output\",\n-                                \"name\": \"binary message\"\n-                            },\n-                            {\n-                                \"description\": \"The WebSocket session is established\",\n-                                \"name\": \"connected\"\n+                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"WebSocket\",\n-                            \"consume\",\n-                            \"listen\",\n-                            \"subscribe\"\n+                            \"hubspot\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.websocket.ListenWebSocket\",\n-                        \"typeDescription\": \"Acts as a WebSocket server endpoint to accept client connections. FlowFiles are transferred to downstream relationships according to received message types as the WebSocket server configured with this processor receives client requests\",\n+                        \"type\": \"org.apache.nifi.processors.hubspot.GetHubSpot\",\n+                        \"typeDescription\": \"Retrieves JSON data from a private HubSpot application. This processor is intended to be run on the Primary Node only.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"WebSocket Controller Service id.\",\n-                                \"name\": \"websocket.controller.service.id\"\n-                            },\n+                                \"description\": \"Sets the MIME type to application/json\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-gcp-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Established WebSocket session id.\",\n-                                \"name\": \"websocket.session.id\"\n+                                \"explanation\": \"The default configuration can read environment variables and system properties for credentials\",\n+                                \"requiredPermission\": \"access environment credentials\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"application-default-credentials\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, uses Google Application Default Credentials, which checks the GOOGLE_APPLICATION_CREDENTIALS environment variable for a filepath to a service account JSON key, the config generated by the gcloud sdk, the App Engine service account, and the Compute Engine service account.\",\n+                                \"displayName\": \"Use Application Default Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"application-default-credentials\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"WebSocket endpoint id.\",\n-                                \"name\": \"websocket.endpoint.id\"\n+                            \"compute-engine-credentials\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, uses Google Compute Engine Credentials of the Compute Engine VM Instance which NiFi is running on.\",\n+                                \"displayName\": \"Use Compute Engine Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"compute-engine-credentials\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"WebSocket server address.\",\n-                                \"name\": \"websocket.local.address\"\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"WebSocket client address.\",\n-                                \"name\": \"websocket.remote.address\"\n+                            \"service-account-json\": {\n+                                \"description\": \"The raw JSON containing a Service Account keyfile.\",\n+                                \"displayName\": \"Service Account JSON\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"service-account-json\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n+                            \"service-account-json-file\": {\n+                                \"description\": \"Path to a file containing a Service Account key file in JSON format.\",\n+                                \"displayName\": \"Service Account JSON File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-account-json-file\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"TEXT or BINARY.\",\n-                                \"name\": \"websocket.message.type\"\n+                                \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                \"version\": \"1.27.0\"\n                             }\n-                        ]\n-                    },\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"credentials\",\n+                            \"gcp\",\n+                            \"provider\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.processors.gcp.credentials.service.GCPCredentialsControllerService\",\n+                        \"typeDescription\": \"Defines credentials for Google Cloud Platform processors. Uses Application Default credentials without configuration. Application Default credentials support environmental variable (GOOGLE_APPLICATION_CREDENTIALS) pointing to a credential file, the config generated by `gcloud auth application-default login`, AppEngine/Compute Engine service accounts, etc.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-websocket-processors-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"websocket-controller-service-id\": {\n-                                \"defaultValue\": \"${websocket.controller.service.id}\",\n-                                \"description\": \"A NiFi Expression to retrieve the id of a WebSocket ControllerService.\",\n-                                \"displayName\": \"WebSocket ControllerService Id\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"websocket-controller-service-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"bigquery-api-endpoint\": {\n+                                \"defaultValue\": \"bigquerystorage.googleapis.com:443\",\n+                                \"description\": \"Can be used to override the default BigQuery endpoint. Default is bigquerystorage.googleapis.com:443. Format must be hostname:port.\",\n+                                \"displayName\": \"BigQuery API Endpoint\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bigquery-api-endpoint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"websocket-endpoint-id\": {\n-                                \"defaultValue\": \"${websocket.endpoint.id}\",\n-                                \"description\": \"A NiFi Expression to retrieve the endpoint id of a WebSocket ControllerService.\",\n-                                \"displayName\": \"WebSocket Endpoint Id\",\n+                            \"bq.append.record.count\": {\n+                                \"defaultValue\": \"20\",\n+                                \"description\": \"The number of records to be appended to the write stream at once. Applicable for both batch and stream types\",\n+                                \"displayName\": \"Append Record Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"bq.append.record.count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bq.dataset\": {\n+                                \"defaultValue\": \"${bq.dataset}\",\n+                                \"description\": \"BigQuery dataset name (Note - The dataset must exist in GCP)\",\n+                                \"displayName\": \"Dataset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"websocket-endpoint-id\",\n+                                \"name\": \"bq.dataset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"websocket-message-type\": {\n-                                \"defaultValue\": \"TEXT\",\n-                                \"description\": \"The type of message content: TEXT or BINARY\",\n-                                \"displayName\": \"WebSocket Message Type\",\n+                            \"bq.record.reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"bq.record.reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"bq.skip.invalid.rows\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Sets whether to insert all valid rows of a request, even if invalid rows exist. If not set the entire insert request will fail if it contains an invalid row.\",\n+                                \"displayName\": \"Skip Invalid Rows\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"websocket-message-type\",\n+                                \"name\": \"bq.skip.invalid.rows\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"websocket-session-id\": {\n-                                \"defaultValue\": \"${websocket.session.id}\",\n-                                \"description\": \"A NiFi Expression to retrieve the session id. If not specified, a message will be sent to all connected WebSocket peers for the WebSocket controller service endpoint.\",\n-                                \"displayName\": \"WebSocket Session Id\",\n+                            \"bq.table.name\": {\n+                                \"defaultValue\": \"${bq.table.name}\",\n+                                \"description\": \"BigQuery table name\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"websocket-session-id\",\n+                                \"name\": \"bq.table.name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bq.transfer.type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Use streaming record handling strategy\",\n+                                        \"displayName\": \"STREAM\",\n+                                        \"value\": \"STREAM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use batching record handling strategy\",\n+                                        \"displayName\": \"BATCH\",\n+                                        \"value\": \"BATCH\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"STREAM\",\n+                                \"description\": \"Defines the preferred transfer type streaming or batching\",\n+                                \"displayName\": \"Transfer Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"bq.transfer.type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-project-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-retry-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryBatch\",\n+                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryStreaming\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are transferred to this relationship.\",\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"WebSocket\",\n-                            \"publish\",\n-                            \"send\"\n+                            \"bigquery\",\n+                            \"bq\",\n+                            \"google\",\n+                            \"google cloud\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.websocket.PutWebSocket\",\n-                        \"typeDescription\": \"Sends messages to a WebSocket remote endpoint using a WebSocket session that is established by either ListenWebSocket or ConnectWebSocket.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.bigquery.PutBigQuery\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to a Google BigQuery table. The processor is record based so the schema that is used is driven by the RecordReader. Attributes that are not matched to the target schema are skipped. Exactly once delivery semantics are achieved via stream offsets.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"WebSocket Controller Service id.\",\n-                                \"name\": \"websocket.controller.service.id\"\n-                            },\n-                            {\n-                                \"description\": \"Established WebSocket session id.\",\n-                                \"name\": \"websocket.session.id\"\n-                            },\n-                            {\n-                                \"description\": \"WebSocket endpoint id.\",\n-                                \"name\": \"websocket.endpoint.id\"\n-                            },\n-                            {\n-                                \"description\": \"TEXT or BINARY.\",\n-                                \"name\": \"websocket.message.type\"\n-                            },\n-                            {\n-                                \"description\": \"WebSocket server address.\",\n-                                \"name\": \"websocket.local.address\"\n-                            },\n-                            {\n-                                \"description\": \"WebSocket client address.\",\n-                                \"name\": \"websocket.remote.address\"\n-                            },\n-                            {\n-                                \"description\": \"Detail of the failure.\",\n-                                \"name\": \"websocket.failure.detail\"\n+                                \"description\": \"Number of records successfully inserted\",\n+                                \"name\": \"bq.records.count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-key-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-key-service-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQuery\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"key\": {\n-                                \"description\": \"Private Key structured using PKCS8 and encoded as PEM\",\n-                                \"displayName\": \"Key\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"key-file\": {\n-                                \"description\": \"File path to Private Key structured using PKCS8 and encoded as PEM\",\n-                                \"displayName\": \"Key File\",\n+                            \"bq.avro.use.logical.types\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If format is set to Avro and if this option is set to true, you can interpret logical types into their corresponding types (such as TIMESTAMP) instead of only using their raw types (such as INTEGER).\",\n+                                \"displayName\": \"Avro Input - Use Logical Types\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-file\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"bq.avro.use.logical.types\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-password\": {\n-                                \"description\": \"Password used for decrypting Private Keys\",\n-                                \"displayName\": \"Key Password\",\n+                            \"bq.csv.allow.jagged.rows\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Set whether BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. By default, rows with missing trailing columns are considered bad records.\",\n+                                \"displayName\": \"CSV Input - Allow Jagged Rows\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.key.service.api.PrivateKeyService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"PEM\",\n-                            \"PKCS8\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.key.service.StandardPrivateKeyService\",\n-                        \"typeDescription\": \"Private Key Service provides access to a Private Key loaded from configured sources\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kerberos-credentials-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-credentials-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Allows user to define a Keytab and principal that can then be used by other components.\",\n-                                \"requiredPermission\": \"access keytab\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                                \"name\": \"bq.csv.allow.jagged.rows\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bq.csv.allow.quoted.new.lines\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Sets whether BigQuery should allow quoted data sections that contain newline characters in a CSV file. By default quoted newline are not allowed.\",\n+                                \"displayName\": \"CSV Input - Allow Quoted New Lines\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"bq.csv.allow.quoted.new.lines\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"bq.csv.charset\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Sets the character encoding of the data.\",\n+                                \"displayName\": \"CSV Input - Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"bq.csv.charset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Authentication\",\n-                            \"Credentials\",\n-                            \"Kerberos\",\n-                            \"Keytab\",\n-                            \"Principal\",\n-                            \"Security\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.kerberos.KeytabCredentialsService\",\n-                        \"typeDescription\": \"Provides a mechanism for specifying a Keytab and a Principal that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it (as opposed to specifying the principal and keytab directly in the processor) an administrator is able to choose which users are allowed to use which keytabs and principals. This provides a more robust security model for multi-tenant use cases.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-websocket-services-jetty-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"authentication-charset\": {\n-                                \"defaultValue\": \"US-ASCII\",\n-                                \"description\": \"The charset for Basic Authentication header base64 string.\",\n-                                \"displayName\": \"Authentication Header Charset\",\n+                            },\n+                            \"bq.csv.delimiter\": {\n+                                \"defaultValue\": \",\",\n+                                \"description\": \"Sets the separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence \\\"\\t\\\" to specify a tab separator. The default value is a comma (',').\",\n+                                \"displayName\": \"CSV Input - Field Delimiter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"authentication-charset\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.csv.delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"connection-attempt-timeout\": {\n-                                \"defaultValue\": \"3\",\n-                                \"description\": \"The number of times to try and establish a connection.\",\n-                                \"displayName\": \"Connection Attempt Count\",\n+                            \"bq.csv.quote\": {\n+                                \"defaultValue\": \"\\\"\",\n+                                \"description\": \"Sets the value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('\\\"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the Allow Quoted New Lines property to true.\",\n+                                \"displayName\": \"CSV Input - Quote\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection-attempt-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.csv.quote\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"connection-timeout\": {\n-                                \"defaultValue\": \"3 sec\",\n-                                \"description\": \"The timeout to connect the WebSocket URI.\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"bq.csv.skip.leading.rows\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Sets the number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.\",\n+                                \"displayName\": \"CSV Input - Skip Leading Rows\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.csv.skip.leading.rows\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-authorization\": {\n-                                \"description\": \"Configures a custom HTTP Authorization Header as described in RFC 7235 Section 4.2. Setting a custom Authorization Header excludes configuring the User Name and User Password properties for Basic Authentication.\",\n-                                \"displayName\": \"Custom Authorization\",\n+                            \"bq.dataset\": {\n+                                \"defaultValue\": \"${bq.dataset}\",\n+                                \"description\": \"BigQuery dataset name (Note - The dataset must exist in GCP)\",\n+                                \"displayName\": \"Dataset\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"custom-authorization\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.dataset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"input-buffer-size\": {\n-                                \"defaultValue\": \"4 kb\",\n-                                \"description\": \"The size of the input (read from network layer) buffer size.\",\n-                                \"displayName\": \"Input Buffer Size\",\n+                            \"bq.load.create_disposition\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Configures the job to create the table if it does not exist.\",\n+                                        \"displayName\": \"CREATE_IF_NEEDED\",\n+                                        \"value\": \"CREATE_IF_NEEDED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Configures the job to fail with a not-found error if the table does not exist.\",\n+                                        \"displayName\": \"CREATE_NEVER\",\n+                                        \"value\": \"CREATE_NEVER\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"CREATE_IF_NEEDED\",\n+                                \"description\": \"Sets whether the job is allowed to create new tables\",\n+                                \"displayName\": \"Create Disposition\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"input-buffer-size\",\n+                                \"name\": \"bq.load.create_disposition\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-binary-message-size\": {\n-                                \"defaultValue\": \"64 kb\",\n-                                \"description\": \"The maximum size of a binary message during parsing/generating.\",\n-                                \"displayName\": \"Max Binary Message Size\",\n+                            \"bq.load.ignore_unknown\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Sets whether BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. By default unknown values are not allowed.\",\n+                                \"displayName\": \"Ignore Unknown Values\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.load.ignore_unknown\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bq.load.max_badrecords\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Sets the maximum number of bad records that BigQuery can ignore when running the job. If the number of bad records exceeds this value, an invalid error is returned in the job result. By default no bad record is ignored.\",\n+                                \"displayName\": \"Max Bad Records\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-binary-message-size\",\n+                                \"name\": \"bq.load.max_badrecords\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-text-message-size\": {\n-                                \"defaultValue\": \"64 kb\",\n-                                \"description\": \"The maximum size of a text message during parsing/generating.\",\n-                                \"displayName\": \"Max Text Message Size\",\n+                            \"bq.load.type\": {\n+                                \"description\": \"Data type of the file to be loaded. Possible values: AVRO, NEWLINE_DELIMITED_JSON, CSV.\",\n+                                \"displayName\": \"Load file type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.load.type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bq.load.write_disposition\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Configures the job to fail with a duplicate error if the table already exists.\",\n+                                        \"displayName\": \"WRITE_EMPTY\",\n+                                        \"value\": \"WRITE_EMPTY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Configures the job to append data to the table if it already exists.\",\n+                                        \"displayName\": \"WRITE_APPEND\",\n+                                        \"value\": \"WRITE_APPEND\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Configures the job to overwrite the table data if table already exists.\",\n+                                        \"displayName\": \"WRITE_TRUNCATE\",\n+                                        \"value\": \"WRITE_TRUNCATE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"WRITE_EMPTY\",\n+                                \"description\": \"Sets the action that should occur if the destination table already exists.\",\n+                                \"displayName\": \"Write Disposition\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-text-message-size\",\n+                                \"name\": \"bq.load.write_disposition\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-host\": {\n-                                \"description\": \"The host name of the HTTP Proxy.\",\n-                                \"displayName\": \"HTTP Proxy Host\",\n+                            \"bq.readtimeout\": {\n+                                \"defaultValue\": \"5 minutes\",\n+                                \"description\": \"Load Job Time Out\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-host\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.readtimeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bq.table.name\": {\n+                                \"defaultValue\": \"${bq.table.name}\",\n+                                \"description\": \"BigQuery table name\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.table.name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bq.table.schema\": {\n+                                \"description\": \"BigQuery schema in JSON format\",\n+                                \"displayName\": \"Table Schema\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.table.schema\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-port\": {\n-                                \"description\": \"The port number of the HTTP Proxy.\",\n-                                \"displayName\": \"HTTP Proxy Port\",\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-port\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"session-maintenance-interval\": {\n-                                \"defaultValue\": \"10 sec\",\n-                                \"description\": \"The interval between session maintenance activities. A WebSocket session established with a WebSocket server can be terminated due to different reasons including restarting the WebSocket server or timing out inactive sessions. This session maintenance activity is periodically executed in order to reconnect those lost sessions, so that a WebSocket client can reuse the same session id transparently after it reconnects successfully.  The maintenance activity is executed until corresponding processors or this controller service is stopped.\",\n-                                \"displayName\": \"Session Maintenance Interval\",\n+                            \"gcp-proxy-host\": {\n+                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n+                                \"displayName\": \"Proxy host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"session-maintenance-interval\",\n-                                \"required\": true,\n+                                \"name\": \"gcp-proxy-host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only WSS requests; otherwise, the server will accept only WS requests\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"gcp-proxy-port\": {\n+                                \"description\": \"Proxy port number\",\n+                                \"displayName\": \"Proxy port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-port\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"user-name\": {\n-                                \"description\": \"The user name for Basic Authentication.\",\n-                                \"displayName\": \"User Name\",\n+                            \"gcp-proxy-user-name\": {\n+                                \"description\": \"HTTP Proxy Username\",\n+                                \"displayName\": \"HTTP Proxy Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"user-name\",\n+                                \"name\": \"gcp-proxy-user-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"user-password\": {\n-                                \"description\": \"The user password for Basic Authentication.\",\n-                                \"displayName\": \"User Password\",\n+                            \"gcp-proxy-user-password\": {\n+                                \"description\": \"HTTP Proxy Password\",\n+                                \"displayName\": \"HTTP Proxy Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"user-password\",\n+                                \"name\": \"gcp-proxy-user-password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"websocket-uri\": {\n-                                \"description\": \"The WebSocket URI this client connects to.\",\n-                                \"displayName\": \"WebSocket URI\",\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"websocket-uri\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-retry-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Jetty\",\n-                            \"WebSocket\",\n-                            \"client\"\n+                            \"bigquery\",\n+                            \"bq\",\n+                            \"google\",\n+                            \"google cloud\"\n                         ],\n-                        \"type\": \"org.apache.nifi.websocket.jetty.JettyWebSocketClient\",\n-                        \"typeDescription\": \"Implementation of WebSocketClientService. This service uses Jetty WebSocket client module to provide WebSocket session management throughout the application.\",\n-                        \"version\": \"1.27.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryBatch\",\n+                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use PutBigQuery instead. Batch loads flow files content to a Google BigQuery table.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Time load job creation\",\n+                                \"name\": \"bq.job.stat.creation_time\"\n+                            },\n+                            {\n+                                \"description\": \"Time load job ended\",\n+                                \"name\": \"bq.job.stat.end_time\"\n+                            },\n+                            {\n+                                \"description\": \"Time load job started\",\n+                                \"name\": \"bq.job.stat.start_time\"\n+                            },\n+                            {\n+                                \"description\": \"API Link to load job\",\n+                                \"name\": \"bq.job.link\"\n+                            },\n+                            {\n+                                \"description\": \"ID of the BigQuery job\",\n+                                \"name\": \"bq.job.id\"\n+                            },\n+                            {\n+                                \"description\": \"Load job error message\",\n+                                \"name\": \"bq.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"Load job error reason\",\n+                                \"name\": \"bq.error.reason\"\n+                            },\n+                            {\n+                                \"description\": \"Load job error location\",\n+                                \"name\": \"bq.error.location\"\n+                            },\n+                            {\n+                                \"description\": \"Number of records successfully inserted\",\n+                                \"name\": \"bq.records.count\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQuery\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"auth-path-spec\": {\n-                                \"defaultValue\": \"/*\",\n-                                \"description\": \"Specify a Path Spec to apply Basic Authentication.\",\n-                                \"displayName\": \"Basic Authentication Path Spec\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"auth-path-spec\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"auth-roles\": {\n-                                \"defaultValue\": \"**\",\n-                                \"description\": \"The authenticated user must have one of specified role. Multiple roles can be set as comma separated string. '*' represents any role and so does '**' any role including no role.\",\n-                                \"displayName\": \"Basic Authentication Roles\",\n+                            \"bq.dataset\": {\n+                                \"defaultValue\": \"${bq.dataset}\",\n+                                \"description\": \"BigQuery dataset name (Note - The dataset must exist in GCP)\",\n+                                \"displayName\": \"Dataset\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"auth-roles\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.dataset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"basic-auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n+                            \"bq.load.ignore_unknown\": {\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, client connection requests are authenticated with Basic authentication using the specified Login Provider.\",\n-                                \"displayName\": \"Enable Basic Authentication\",\n+                                \"description\": \"Sets whether BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. By default unknown values are not allowed.\",\n+                                \"displayName\": \"Ignore Unknown Values\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"basic-auth\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.load.ignore_unknown\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"client-authentication\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Processor will not authenticate clients. Anyone can communicate with this Processor anonymously\",\n-                                        \"displayName\": \"No Authentication\",\n-                                        \"value\": \"no\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Processor will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n-                                        \"displayName\": \"Want Authentication\",\n-                                        \"value\": \"want\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Processor will reject communications from any client unless the client provides a certificate that is trusted by the TrustStore specified in the SSL Context Service\",\n-                                        \"displayName\": \"Need Authentication\",\n-                                        \"value\": \"need\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"no\",\n-                                \"description\": \"Specifies whether or not the Processor should authenticate client by its certificate. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n-                                \"displayName\": \"SSL Client Authentication\",\n+                            \"bq.record.reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-authentication\",\n+                                \"name\": \"bq.record.reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"bq.skip.invalid.rows\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Sets whether to insert all valid rows of a request, even if invalid rows exist. If not set the entire insert request will fail if it contains an invalid row.\",\n+                                \"displayName\": \"Skip Invalid Rows\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.skip.invalid.rows\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"input-buffer-size\": {\n-                                \"defaultValue\": \"4 kb\",\n-                                \"description\": \"The size of the input (read from network layer) buffer size.\",\n-                                \"displayName\": \"Input Buffer Size\",\n+                            \"bq.table.name\": {\n+                                \"defaultValue\": \"${bq.table.name}\",\n+                                \"description\": \"BigQuery table name\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"input-buffer-size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.table.name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listen-port\": {\n-                                \"description\": \"The port number on which this WebSocketServer listens to.\",\n-                                \"displayName\": \"Listen Port\",\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"listen-port\",\n-                                \"required\": true,\n+                                \"name\": \"gcp-project-id\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"login-service\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"See http://www.eclipse.org/jetty/javadoc/current/org/eclipse/jetty/security/HashLoginService.html for detail.\",\n-                                        \"displayName\": \"HashLoginService\",\n-                                        \"value\": \"hash\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"hash\",\n-                                \"description\": \"Specify which Login Service to use for Basic Authentication.\",\n-                                \"displayName\": \"Login Service\",\n+                            \"gcp-proxy-host\": {\n+                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n+                                \"displayName\": \"Proxy host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"login-service\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-binary-message-size\": {\n-                                \"defaultValue\": \"64 kb\",\n-                                \"description\": \"The maximum size of a binary message during parsing/generating.\",\n-                                \"displayName\": \"Max Binary Message Size\",\n+                            \"gcp-proxy-port\": {\n+                                \"description\": \"Proxy port number\",\n+                                \"displayName\": \"Proxy port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-binary-message-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-text-message-size\": {\n-                                \"defaultValue\": \"64 kb\",\n-                                \"description\": \"The maximum size of a text message during parsing/generating.\",\n-                                \"displayName\": \"Max Text Message Size\",\n+                            \"gcp-proxy-user-name\": {\n+                                \"description\": \"HTTP Proxy Username\",\n+                                \"displayName\": \"HTTP Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-user-password\": {\n+                                \"description\": \"HTTP Proxy Password\",\n+                                \"displayName\": \"HTTP Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-text-message-size\",\n+                                \"name\": \"gcp-retry-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only WSS requests; otherwise, the server will accept only WS requests\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"users-properties-file\": {\n-                                \"description\": \"Specify a property file containing users for Basic Authentication using HashLoginService. See http://www.eclipse.org/jetty/documentation/current/configuring-security.html for detail.\",\n-                                \"displayName\": \"Users Properties File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"users-properties-file\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryBatch\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"Jetty\",\n-                            \"WebSocket\",\n-                            \"server\"\n+                            \"bigquery\",\n+                            \"bq\",\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"record\"\n                         ],\n-                        \"type\": \"org.apache.nifi.websocket.jetty.JettyWebSocketServer\",\n-                        \"typeDescription\": \"Implementation of WebSocketServerService. This service uses Jetty WebSocket server module to provide WebSocket session management throughout the application.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-framework-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-mongodb-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryStreaming\",\n+                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use PutBigQuery instead. Load data into Google BigQuery table using the streaming API. This processor is not intended to load large flow files as it will load the full content into memory. If you need to insert large flow files, consider using PutBigQueryBatch instead.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Number of records successfully inserted\",\n+                                \"name\": \"bq.records.count\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo URI\": {\n-                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n-                                \"displayName\": \"Mongo URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Mongo URI\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Write Concern\": {\n+                            \"Google Doc Export Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ACKNOWLEDGED\",\n-                                        \"value\": \"ACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UNACKNOWLEDGED\",\n-                                        \"value\": \"UNACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FSYNCED\",\n-                                        \"value\": \"FSYNCED\"\n+                                        \"displayName\": \"PDF\",\n+                                        \"value\": \"application/pdf\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"JOURNALED\",\n-                                        \"value\": \"JOURNALED\"\n+                                        \"displayName\": \"Plain Text\",\n+                                        \"value\": \"text/plain\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n-                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n+                                        \"displayName\": \"Microsoft Word\",\n+                                        \"value\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"MAJORITY\",\n-                                        \"value\": \"MAJORITY\"\n+                                        \"displayName\": \"OpenDocument\",\n+                                        \"value\": \"application/vnd.oasis.opendocument.text\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"W1\",\n-                                        \"value\": \"W1\"\n+                                        \"displayName\": \"Rich Text\",\n+                                        \"value\": \"application/rtf\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"W2\",\n-                                        \"value\": \"W2\"\n+                                        \"displayName\": \"Web Page (HTML)\",\n+                                        \"value\": \"application/zip\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"W3\",\n-                                        \"value\": \"W3\"\n+                                        \"displayName\": \"EPUB\",\n+                                        \"value\": \"application/epub+zip\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ACKNOWLEDGED\",\n-                                \"description\": \"The write concern to use\",\n-                                \"displayName\": \"Write Concern\",\n+                                \"defaultValue\": \"application/pdf\",\n+                                \"description\": \"Google Documents cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Document, this property specifies the MIME Type to export the document to.\",\n+                                \"displayName\": \"Google Doc Export Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Write Concern\",\n+                                \"name\": \"Google Doc Export Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete-mongo-delete-mode\": {\n+                            \"Google Drawing Export Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Delete only the first document that matches the query.\",\n-                                        \"displayName\": \"Delete One\",\n-                                        \"value\": \"one\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PDF\",\n+                                        \"value\": \"application/pdf\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete every document that matches the query.\",\n-                                        \"displayName\": \"Delete Many\",\n-                                        \"value\": \"many\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PNG\",\n+                                        \"value\": \"image/png\"\n                                     },\n                                     {\n-                                        \"description\": \"Read the 'mongodb.delete.mode attribute and use that mode. Acceptable values are 'many' and 'one.'\",\n-                                        \"displayName\": \"Use 'mongodb.delete.mode' attribute\",\n-                                        \"value\": \"attr\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JPEG\",\n+                                        \"value\": \"image/jpeg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SVG\",\n+                                        \"value\": \"image/svg+xml\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"one\",\n-                                \"description\": \"Choose between deleting one document by query or many documents by query.\",\n-                                \"displayName\": \"Delete Mode\",\n+                                \"defaultValue\": \"application/pdf\",\n+                                \"description\": \"Google Drawings cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Drawing, this property specifies the MIME Type to export the drawing to.\",\n+                                \"displayName\": \"Google Drawing Export Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete-mongo-delete-mode\",\n-                                \"required\": false,\n+                                \"name\": \"Google Drawing Export Type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete-mongo-fail-on-no-delete\": {\n+                            \"Google Presentation Export Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fail when no documents are deleted.\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PDF\",\n+                                        \"value\": \"application/pdf\"\n                                     },\n                                     {\n-                                        \"description\": \"Do not fail when nothing is deleted.\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Microsoft PowerPoint\",\n+                                        \"value\": \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Plain Text\",\n+                                        \"value\": \"text/plain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OpenDocument Presentation\",\n+                                        \"value\": \"application/vnd.oasis.opendocument.presentation\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PNG (first slide only)\",\n+                                        \"value\": \"image/png\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JPEG (first slide only)\",\n+                                        \"value\": \"image/jpeg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Scalable Vector Graphics. Only the first slide will be exported.\",\n+                                        \"displayName\": \"SVG (first slide only)\",\n+                                        \"value\": \"image/svg+xml\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines whether to send the flowfile to the success or failure relationship if nothing is successfully deleted.\",\n-                                \"displayName\": \"Fail When Nothing Is Deleted\",\n+                                \"defaultValue\": \"application/pdf\",\n+                                \"description\": \"Google Presentations cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Presentation, this property specifies the MIME Type to export the presentation to.\",\n+                                \"displayName\": \"Google Presentation Export Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete-mongo-fail-on-no-delete\",\n-                                \"required\": false,\n+                                \"name\": \"Google Presentation Export Type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"ssl-client-auth\": {\n+                            \"Google Spreadsheet Export Type\": {\n                                 \"allowableValues\": [\n                                     {\n+                                        \"description\": \"Comma-separated values. Only the first sheet will be exported.\",\n+                                        \"displayName\": \"CSV (first sheet only)\",\n+                                        \"value\": \"text/csv\"\n+                                    },\n+                                    {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"displayName\": \"PDF\",\n+                                        \"value\": \"application/pdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Tab-separate values. Only the first sheet will be exported.\",\n+                                        \"displayName\": \"TSV (first sheet only)\",\n+                                        \"value\": \"text/tab-separated-values\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"Web Page (HTML)\",\n+                                        \"value\": \"text/html\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OpenDocument Spreadsheet\",\n+                                        \"value\": \"application/x-vnd.oasis.opendocument.spreadsheet\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"text/csv\",\n+                                \"description\": \"Google Spreadsheets cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Spreadsheet, this property specifies the MIME Type to export the spreadsheet to.\",\n+                                \"displayName\": \"Google Spreadsheet Export Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n-                                \"required\": false,\n+                                \"name\": \"Google Spreadsheet Export Type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"drive-file-id\": {\n+                                \"defaultValue\": \"${drive.id}\",\n+                                \"description\": \"The Drive ID of the File to fetch. Please see Additional Details for information on how to obtain the Drive ID.\",\n+                                \"displayName\": \"File ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"drive-file-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"Configurable parameter for controlling delete mode on a per-flowfile basis. The process must be configured to use this option. Acceptable values are 'one' and 'many.'\",\n-                                \"name\": \"mongodb.delete.mode\"\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"drive.id\"\n                             }\n                         ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\",\n+                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n+                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n+                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"delete\",\n-                            \"mongo\",\n-                            \"mongodb\"\n+                            \"drive\",\n+                            \"fetch\",\n+                            \"google\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.DeleteMongo\",\n-                        \"typeDescription\": \"Executes a delete query against a MongoDB collection. The query is provided in the body of the flowfile and the user can select whether it will delete one or many documents that match it.\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n+                        \"typeDescription\": \"Fetches files from a Google Drive Folder. Designed to be used in tandem with ListGoogleDrive. Please see Additional Details to set up access to Google Drive.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"drive.id\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME type of the file\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"drive.size\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n+                                \"name\": \"drive.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The error code returned by Google Drive\",\n+                                \"name\": \"error.code\"\n+                            },\n+                            {\n+                                \"description\": \"The error message returned by Google Drive\",\n+                                \"name\": \"error.message\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"description\": \"The number of elements to be returned from the server in one batch\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Limit\": {\n-                                \"description\": \"The maximum number of elements to return\",\n-                                \"displayName\": \"Limit\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Limit\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo URI\": {\n-                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n-                                \"displayName\": \"Mongo URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Mongo URI\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Projection\": {\n-                                \"description\": \"The fields to be returned from the documents in the result set; must be a valid BSON document\",\n-                                \"displayName\": \"Projection\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Projection\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Query\": {\n-                                \"description\": \"The selection criteria to do the lookup. If the field is left blank, it will look for input from an incoming connection from another processor to provide the query as a valid JSON document inside of the FlowFile's body. If this field is left blank and a timer is enabled instead of an incoming connection, that will result in a full collection fetch using a \\\"{}\\\" query.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Sort\": {\n-                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n-                                \"displayName\": \"Sort\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Sort\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"get-mongo-send-empty\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If a query executes successfully, but returns no results, send an empty JSON document signifying no result.\",\n-                                \"displayName\": \"Send Empty Result\",\n+                                \"defaultValue\": \"all\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"get-mongo-send-empty\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"json-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use MongoDB's \\\"extended JSON\\\". This is the JSON generated with toJson() on a MongoDB Document from the Java driver\",\n-                                        \"displayName\": \"Extended JSON\",\n-                                        \"value\": \"Extended\"\n-                                    },\n+                            \"et-state-cache\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Generate a JSON document that conforms to typical JSON conventions instead of Mongo-specific conventions.\",\n-                                        \"displayName\": \"Standard JSON\",\n-                                        \"value\": \"Standard\"\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Extended\",\n-                                \"description\": \"By default, MongoDB's Java driver returns \\\"extended JSON\\\". Some of the features of this variant of JSON may cause problems for other JSON parsers that expect only standard JSON types and conventions. This configuration setting  controls whether to use extended JSON or provide a clean view that conforms to standard JSON.\",\n-                                \"displayName\": \"JSON Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"json-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-charset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n+                                \"name\": \"et-state-cache\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"mongo-date-format\": {\n-                                \"defaultValue\": \"yyyy-MM-dd'T'HH:mm:ss'Z'\",\n-                                \"description\": \"The date format string to use for formatting Date fields that are returned from Mongo. It is only applied when the JSON output format is set to Standard JSON. Full documentation for format characters can be found here: https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html\",\n-                                \"displayName\": \"Date Format\",\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-date-format\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-query-attribute\": {\n-                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n-                                \"displayName\": \"Query Output Attribute\",\n+                            \"folder-id\": {\n+                                \"description\": \"The ID of the folder from which to pull list of files. Please see Additional Details to set up access to Google Drive and obtain Folder ID. WARNING: Unauthorized access to the folder is treated as if the folder was empty. This results in the processor not creating outgoing FlowFiles. No additional error message is provided.\",\n+                                \"displayName\": \"Folder ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"folder-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"results-per-flowfile\": {\n-                                \"description\": \"How many results to put into a FlowFile at once. The whole body will be treated as a JSON array of results.\",\n-                                \"displayName\": \"Results Per FlowFile\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"results-per-flowfile\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"ssl-client-auth\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n+                                        \"displayName\": \"Time Window\",\n+                                        \"value\": \"time-window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n-                                \"required\": false,\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"min-age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age a file must be in order to be considered; any files younger than this will be ignored.\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"min-age\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"use-pretty-printing\": {\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"recursive-search\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"True\",\n+                                        \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"False\",\n+                                        \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Choose whether or not to pretty print the JSON from the results of the query. Choosing 'True' can greatly increase the space requirements on disk depending on the complexity of the JSON document\",\n-                                \"displayName\": \"Pretty Print Results JSON\",\n+                                \"description\": \"When 'true', will include list of files from concrete sub-folders (ignores shortcuts). Otherwise, will return only files that have the defined 'Folder ID' as their parent directly. WARNING: The listing may fail if there are too many sub-folders (500+).\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-pretty-printing\",\n+                                \"name\": \"recursive-search\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n+                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\n+                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"All input FlowFiles that are part of a successful query execution go here.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"get\",\n-                            \"mongodb\",\n-                            \"read\"\n+                            \"drive\",\n+                            \"google\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.GetMongo\",\n-                        \"typeDescription\": \"Creates FlowFiles from documents in MongoDB loaded by a user-specified query.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\",\n+                        \"typeDescription\": \"Performs a listing of concrete files (shortcuts are ignored) in a Google Drive folder. If the 'Record Writer' property is set, a single Output FlowFile is created, and each file in the listing is written as a single record to the output file. Otherwise, for each file in the listing, an individual FlowFile is created, the metadata being written as FlowFile attributes. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. Please see Additional Details to set up access to Google Drive.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The database where the results came from.\",\n-                                \"name\": \"mongo.database.name\"\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"drive.id\"\n                             },\n                             {\n-                                \"description\": \"The collection where the results came from.\",\n-                                \"name\": \"mongo.collection.name\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME type of the file\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"drive.size\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n+                                \"name\": \"drive.timestamp\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -34462,1098 +31198,1123 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"description\": \"The number of elements to be returned from the server in one batch\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"chunked-upload-size\": {\n+                                \"defaultValue\": \"10 MB\",\n+                                \"description\": \"Defines the size of a chunk. Used when a FlowFile's size exceeds 'Chunked Upload Threshold' and content is uploaded in smaller chunks. Minimum allowed chunk size is 256 KB, maximum allowed chunk size is 1 GB.\",\n+                                \"displayName\": \"Chunked Upload Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Batch Size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"chunked-upload-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Limit\": {\n-                                \"description\": \"The maximum number of elements to return\",\n-                                \"displayName\": \"Limit\",\n+                            \"chunked-upload-threshold\": {\n+                                \"defaultValue\": \"100 MB\",\n+                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks.\",\n+                                \"displayName\": \"Chunked Upload Threshold\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Limit\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"chunked-upload-threshold\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n+                            \"conflict-resolution-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Handle file conflict as failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Ignore conflict, do not change the original file.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Replace existing file in case of conflict.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Google Drive folder.\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"conflict-resolution-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The name of the file to upload to the specified Google Drive folder.\",\n+                                \"displayName\": \"Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n+                                \"name\": \"file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Projection\": {\n-                                \"description\": \"The fields to be returned from the documents in the result set; must be a valid BSON document\",\n-                                \"displayName\": \"Projection\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Projection\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Query\": {\n-                                \"description\": \"The selection criteria to do the lookup. If the field is left blank, it will look for input from an incoming connection from another processor to provide the query as a valid JSON document inside of the FlowFile's body. If this field is left blank and a timer is enabled instead of an incoming connection, that will result in a full collection fetch using a \\\"{}\\\" query.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Sort\": {\n-                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n-                                \"displayName\": \"Sort\",\n+                            \"folder-id\": {\n+                                \"description\": \"The ID of the shared folder. Please see Additional Details to set up access to Google Drive and obtain Folder ID.\",\n+                                \"displayName\": \"Folder ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Sort\",\n-                                \"required\": false,\n+                                \"name\": \"folder-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"get-mongo-record-writer-factory\": {\n-                                \"description\": \"The record writer to use to write the result sets.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"get-mongo-record-writer-factory\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"mongo-query-attribute\": {\n-                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n-                                \"displayName\": \"Query Output Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongodb-schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"description\": \"The name of the schema in the configured schema registry to use for the query results.\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongodb-schema-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Uses the FlowFile's filename as the filename for the Google Drive object.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n+                            \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n+                                \"description\": \"Files that have been successfully written to Google Drive are transferred to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\n+                                \"description\": \"Files that could not be written to Google Drive for some reason are transferred to this relationship.\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"All input FlowFiles that are part of a successful query execution go here.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"get\",\n-                            \"json\",\n-                            \"mongo\",\n-                            \"mongodb\",\n-                            \"record\"\n+                            \"drive\",\n+                            \"google\",\n+                            \"put\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.GetMongoRecord\",\n-                        \"typeDescription\": \"A record-based version of GetMongo that uses the Record writers to write the MongoDB result set.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile as a file in Google Drive.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The database where the results came from.\",\n-                                \"name\": \"mongo.database.name\"\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"drive.id\"\n                             },\n                             {\n-                                \"description\": \"The collection where the results came from.\",\n-                                \"name\": \"mongo.collection.name\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME type of the file\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"drive.size\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n+                                \"name\": \"drive.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The error code returned by Google Drive\",\n+                                \"name\": \"error.code\"\n+                            },\n+                            {\n+                                \"description\": \"The error message returned by Google Drive\",\n+                                \"name\": \"error.message\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the data is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"insert\",\n-                                        \"value\": \"insert\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"update\",\n-                                        \"value\": \"update\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"insert\",\n-                                \"description\": \"Indicates whether the processor should insert or update content\",\n-                                \"displayName\": \"Mode\",\n+                            \"api-endpoint\": {\n+                                \"defaultValue\": \"pubsub.googleapis.com:443\",\n+                                \"description\": \"Override the gRPC endpoint in the form of [host:port]\",\n+                                \"displayName\": \"API Endpoint\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mode\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"api-endpoint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-project-id\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"gcp-pubsub-publish-batch-size\": {\n+                                \"defaultValue\": \"15\",\n+                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n+                                \"displayName\": \"Batch Size Threshold\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-pubsub-publish-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo URI\": {\n-                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n-                                \"displayName\": \"Mongo URI\",\n+                            \"gcp-pubsub-subscription\": {\n+                                \"description\": \"Name of the Google Cloud Pub/Sub Subscription\",\n+                                \"displayName\": \"Subscription\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Mongo URI\",\n-                                \"required\": false,\n+                                \"name\": \"gcp-pubsub-subscription\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Update Query Key\": {\n-                                \"description\": \"Key name used to build the update query criteria; this property is valid only when using update mode, otherwise it is ignored. Example: _id\",\n-                                \"displayName\": \"Update Query Key\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Update Query Key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"consume\",\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google-cloud\",\n+                            \"message\",\n+                            \"pubsub\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.ConsumeGCPubSub\",\n+                        \"typeDescription\": \"Consumes message from the configured Google Cloud PubSub subscription. If the 'Batch Size' is set, the configured number of messages will be pulled in a single request, else only one message will be pulled.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Acknowledgement Id of the consumed Google Cloud PubSub message\",\n+                                \"name\": \"gcp.pubsub.ackId\"\n+                            },\n+                            {\n+                                \"description\": \"Serialized size of the consumed Google Cloud PubSub message\",\n+                                \"name\": \"gcp.pubsub.messageSize\"\n+                            },\n+                            {\n+                                \"description\": \"Number of attributes the consumed PubSub message has, if any\",\n+                                \"name\": \"gcp.pubsub.attributesCount\"\n+                            },\n+                            {\n+                                \"description\": \"Timestamp value when the message was published\",\n+                                \"name\": \"gcp.pubsub.publishTime\"\n+                            },\n+                            {\n+                                \"description\": \"Other than the listed attributes, this processor may write zero or more attributes, if the original Google Cloud Publisher client added any attributes to the message while sending\",\n+                                \"name\": \"Dynamic Attributes\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Attributes to be set for the outgoing Google Cloud PubSub message\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Attribute name\",\n+                                \"value\": \"Value to be set to the attribute\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Input Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Maximum number of FlowFiles processed for each Processor invocation\",\n+                                \"displayName\": \"Input Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Input Batch Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Upsert\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Maximum Message Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"FLOWFILE_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n+                                        \"propertyName\": \"Message Derivation Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"When true, inserts a document if no document matches the update query criteria; this property is valid only when using update mode, otherwise it is ignored\",\n-                                \"displayName\": \"Upsert\",\n+                                \"description\": \"The maximum size of a Google PubSub message in bytes. Defaults to 1 MB (1048576 bytes)\",\n+                                \"displayName\": \"Maximum Message Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Upsert\",\n+                                \"name\": \"Maximum Message Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Write Concern\": {\n+                            \"Message Derivation Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ACKNOWLEDGED\",\n-                                        \"value\": \"ACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UNACKNOWLEDGED\",\n-                                        \"value\": \"UNACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FSYNCED\",\n-                                        \"value\": \"FSYNCED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JOURNALED\",\n-                                        \"value\": \"JOURNALED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n-                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MAJORITY\",\n-                                        \"value\": \"MAJORITY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W1\",\n-                                        \"value\": \"W1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W2\",\n-                                        \"value\": \"W2\"\n+                                        \"description\": \"Each incoming FlowFile is sent as a Google Cloud PubSub message\",\n+                                        \"displayName\": \"FlowFile Oriented\",\n+                                        \"value\": \"FLOWFILE_ORIENTED\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W3\",\n-                                        \"value\": \"W3\"\n+                                        \"description\": \"Each incoming FlowFile is parsed into NiFi records, which are each sent as a Google Cloud PubSub message\",\n+                                        \"displayName\": \"Record Oriented\",\n+                                        \"value\": \"RECORD_ORIENTED\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ACKNOWLEDGED\",\n-                                \"description\": \"The write concern to use\",\n-                                \"displayName\": \"Write Concern\",\n+                                \"defaultValue\": \"FLOWFILE_ORIENTED\",\n+                                \"description\": \"The strategy used to publish the incoming FlowFile to the Google Cloud PubSub endpoint.\",\n+                                \"displayName\": \"Message Derivation Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Write Concern\",\n+                                \"name\": \"Message Derivation Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Record Reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"RECORD_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n+                                        \"propertyName\": \"Message Derivation Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n+                                \"name\": \"Record Reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"put-mongo-update-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"With whole document\",\n-                                        \"value\": \"doc\"\n-                                    },\n+                            \"Record Writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"With operators enabled\",\n-                                        \"value\": \"operators\"\n+                                        \"dependentValues\": [\n+                                            \"RECORD_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n+                                        \"propertyName\": \"Message Derivation Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"doc\",\n-                                \"description\": \"Choose an update mode. You can either supply a JSON document to use as a direct replacement or specify a document that contains update operators like $set, $unset, and $inc. When Operators mode is enabled, the flowfile content is expected to be the operator part for example: {$set:{\\\"key\\\": \\\"value\\\"},$inc:{\\\"count\\\":1234}} and the update query will come from the configured Update Query property.\",\n-                                \"displayName\": \"Update Mode\",\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to GCPubSub endpoint\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-mongo-update-mode\",\n+                                \"name\": \"Record Writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"api-endpoint\": {\n+                                \"defaultValue\": \"pubsub.googleapis.com:443\",\n+                                \"description\": \"Override the gRPC endpoint in the form of [host:port]\",\n+                                \"displayName\": \"API Endpoint\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"api-endpoint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"putmongo-update-query\": {\n-                                \"description\": \"Specify a full MongoDB query to be used for the lookup query to do an update/upsert.\",\n-                                \"displayName\": \"Update Query\",\n+                            \"gcp-batch-bytes\": {\n+                                \"defaultValue\": \"3 MB\",\n+                                \"description\": \"Publish request gets triggered based on this Batch Bytes Threshold property and the Batch Size Threshold property, whichever condition is met first.\",\n+                                \"displayName\": \"Batch Bytes Threshold\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"putmongo-update-query\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-batch-bytes\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-client-auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                            \"gcp-pubsub-publish-batch-delay\": {\n+                                \"defaultValue\": \"100 millis\",\n+                                \"description\": \"Indicates the delay threshold to use for batching. After this amount of time has elapsed (counting from the first element added), the elements will be wrapped up in a batch and sent. This value should not be set too high, usually on the order of milliseconds. Otherwise, calls might appear to never complete.\",\n+                                \"displayName\": \"Batch Delay Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n-                                \"required\": false,\n+                                \"name\": \"gcp-pubsub-publish-batch-delay\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"gcp-pubsub-publish-batch-size\": {\n+                                \"defaultValue\": \"15\",\n+                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n+                                \"displayName\": \"Batch Size Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"gcp-pubsub-publish-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-pubsub-topic\": {\n+                                \"description\": \"Name of the Google Cloud PubSub Topic\",\n+                                \"displayName\": \"Topic Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-pubsub-topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.pubsub.ConsumeGCPubSub\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails but attempting the operation again may succeed.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"systemResourceConsiderations\": [\n                             {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"description\": \"The entirety of the FlowFile's content will be read into memory to be sent as a PubSub message.\",\n                                 \"resource\": \"MEMORY\"\n                             }\n                         ],\n                         \"tags\": [\n-                            \"insert\",\n-                            \"mongodb\",\n-                            \"put\",\n-                            \"update\",\n-                            \"write\"\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google-cloud\",\n+                            \"message\",\n+                            \"publish\",\n+                            \"pubsub\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongo\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to MongoDB\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\",\n+                        \"typeDescription\": \"Publishes the content of the incoming flowfile to the configured Google Cloud PubSub topic. The processor supports dynamic properties. If any dynamic properties are present, they will be sent along with the message in the form of 'attributes'.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.messageId\"\n+                            },\n+                            {\n+                                \"description\": \"Count of pubsub messages published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.count.records\"\n+                            },\n+                            {\n+                                \"description\": \"Name of the Google Cloud PubSub topic the message was published to\",\n+                                \"name\": \"gcp.pubsub.topic\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"gcp-bytes-outstanding\": {\n+                                \"defaultValue\": \"10 MB\",\n+                                \"description\": \"The number of quota bytes that may be outstanding to the client.\",\n+                                \"displayName\": \"Bytes Outstanding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-bytes-outstanding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo URI\": {\n-                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n-                                \"displayName\": \"Mongo URI\",\n+                            \"gcp-messages-outstanding\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The number of messages that may be outstanding to the client.\",\n+                                \"displayName\": \"Messages Outstanding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Mongo URI\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Write Concern\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ACKNOWLEDGED\",\n-                                        \"value\": \"ACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UNACKNOWLEDGED\",\n-                                        \"value\": \"UNACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FSYNCED\",\n-                                        \"value\": \"FSYNCED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JOURNALED\",\n-                                        \"value\": \"JOURNALED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n-                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MAJORITY\",\n-                                        \"value\": \"MAJORITY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W1\",\n-                                        \"value\": \"W1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W2\",\n-                                        \"value\": \"W2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W3\",\n-                                        \"value\": \"W3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ACKNOWLEDGED\",\n-                                \"description\": \"The write concern to use\",\n-                                \"displayName\": \"Write Concern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Write Concern\",\n+                                \"name\": \"gcp-messages-outstanding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bypass-validation\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"True\",\n-                                \"description\": \"Bypass schema validation during insert/upsert\",\n-                                \"displayName\": \"Bypass Validation\",\n+                            \"gcp-pubsub-subscription\": {\n+                                \"description\": \"Name of the Google Cloud Pub/Sub Subscription. Example: projects/8476107443/locations/europe-west1-d/subscriptions/my-lite-subscription\",\n+                                \"displayName\": \"Subscription\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bypass-validation\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-pubsub-subscription\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.pubsub.lite.PublishGCPubSubLite\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"consume\",\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google-cloud\",\n+                            \"lite\",\n+                            \"message\",\n+                            \"pubsub\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.lite.ConsumeGCPubSubLite\",\n+                        \"typeDescription\": \"Consumes message from the configured Google Cloud PubSub Lite subscription.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.messageId\"\n                             },\n-                            \"insert_count\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The number of records to group together for one single insert/upsert operation against MongoDB.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"insert_count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"If non-empty, identifies related messages for which publish order should be respected. If a 'Subscription' has 'enable_message_ordering' set to 'true', messages published with the same non-empty 'ordering_key' value will be delivered to subscribers in the order in which they are received by the Pub/Sub system. All 'PubsubMessage's published in a given 'PublishRequest' must specify the same 'ordering_key' value.\",\n+                                \"name\": \"gcp.pubsub.ordering.key\"\n                             },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n+                            {\n+                                \"description\": \"Number of attributes the consumed PubSub message has, if any\",\n+                                \"name\": \"gcp.pubsub.attributesCount\"\n+                            },\n+                            {\n+                                \"description\": \"Timestamp value when the message was published\",\n+                                \"name\": \"gcp.pubsub.publishTime\"\n+                            },\n+                            {\n+                                \"description\": \"Other than the listed attributes, this processor may write zero or more attributes, if the original Google Cloud Publisher client added any attributes to the message while sending\",\n+                                \"name\": \"Dynamic Attributes\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Attributes to be set for the outgoing Google Cloud PubSub Lite message\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Attribute name\",\n+                                \"value\": \"Value to be set to the attribute\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"ordered\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"False\",\n-                                \"description\": \"Perform ordered or unordered operations\",\n-                                \"displayName\": \"Ordered\",\n+                            \"gcp-batch-bytes\": {\n+                                \"defaultValue\": \"3 MB\",\n+                                \"description\": \"Publish request gets triggered based on this Batch Bytes Threshold property and the Batch Size Threshold property, whichever condition is met first.\",\n+                                \"displayName\": \"Batch Bytes Threshold\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ordered\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-batch-bytes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"ssl-client-auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                            \"gcp-ordering-key\": {\n+                                \"description\": \"Messages with the same ordering key will always get published to the same partition. When this property is not set, messages can get published to different partitions if more than one partition exists for the topic.\",\n+                                \"displayName\": \"Ordering Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gcp-ordering-key\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"gcp-pubsub-publish-batch-delay\": {\n+                                \"defaultValue\": \"100 millis\",\n+                                \"description\": \"Indicates the delay threshold to use for batching. After this amount of time has elapsed (counting from the first element added), the elements will be wrapped up in a batch and sent. This value should not be set too high, usually on the order of milliseconds. Otherwise, calls might appear to never complete.\",\n+                                \"displayName\": \"Batch Delay Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"gcp-pubsub-publish-batch-delay\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"update-key-fields\": {\n-                                \"description\": \"Comma separated list of fields based on which to identify documents that need to be updated. If this property is set NiFi will attempt an upsert operation on all documents. If this property is not set all documents will be inserted.\",\n-                                \"displayName\": \"Update Key Fields\",\n+                            \"gcp-pubsub-publish-batch-size\": {\n+                                \"defaultValue\": \"15\",\n+                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n+                                \"displayName\": \"Batch Size Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"update-key-fields\",\n-                                \"required\": false,\n+                                \"name\": \"gcp-pubsub-publish-batch-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"update-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Updates only the first document that matches the query.\",\n-                                        \"displayName\": \"Update One\",\n-                                        \"value\": \"one\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Updates every document that matches the query.\",\n-                                        \"displayName\": \"Update Many\",\n-                                        \"value\": \"many\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use the value of the 'mongodb.update.mode' attribute of the incoming flowfile. Acceptable values are 'one' and 'many'.\",\n-                                        \"displayName\": \"Use 'mongodb.update.mode' flowfile attribute.\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"one\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Update Key Fields\",\n-                                        \"propertyName\": \"update-key-fields\"\n-                                    }\n-                                ],\n-                                \"description\": \"Choose between updating a single document or multiple documents per incoming record.\",\n-                                \"displayName\": \"Update Mode\",\n+                            \"gcp-pubsub-topic\": {\n+                                \"description\": \"Name of the Google Cloud PubSub Topic. Example: projects/8476107443/locations/europe-west1-d/topics/my-lite-topic\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"update-mode\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-pubsub-topic\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Configurable parameter for controlling update mode on a per-flowfile basis. Acceptable values are 'one' and 'many' and controls whether a single incoming record should update a single or multiple Mongo documents.\",\n-                                \"name\": \"mongodb.update.mode\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.pubsub.lite.ConsumeGCPubSubLite\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The entirety of the FlowFile's content will be read into memory to be sent as a PubSub message.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"insert\",\n-                            \"mongodb\",\n-                            \"put\",\n-                            \"record\",\n-                            \"update\",\n-                            \"upsert\"\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google-cloud\",\n+                            \"lite\",\n+                            \"message\",\n+                            \"publish\",\n+                            \"pubsub\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongoRecord\",\n-                        \"typeDescription\": \"This processor is a record-aware processor for inserting/upserting data into MongoDB. It uses a configured record reader and schema to read an incoming record set from the body of a flowfile and then inserts/upserts batches of those records into a configured MongoDB collection. This processor does not support deletes. The number of documents to insert/upsert at a time is controlled by the \\\"Batch Size\\\" configuration property. This value should be set to a reasonable size to ensure that MongoDB is not overloaded with too many operations at once.\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.lite.PublishGCPubSubLite\",\n+                        \"typeDescription\": \"Publishes the content of the incoming FlowFile to the configured Google Cloud PubSub Lite topic. The processor supports dynamic properties. If any dynamic properties are present, they will be sent along with the message in the form of 'attributes'.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.messageId\"\n+                            },\n+                            {\n+                                \"description\": \"Name of the Google Cloud PubSub topic the message was published to\",\n+                                \"name\": \"gcp.pubsub.topic\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The number of elements returned from the server in one batch.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n+                            \"gcp-proxy-host\": {\n+                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n+                                \"displayName\": \"Proxy host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"gcp-proxy-port\": {\n+                                \"description\": \"Proxy port number\",\n+                                \"displayName\": \"Proxy port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo URI\": {\n-                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n-                                \"displayName\": \"Mongo URI\",\n+                            \"gcp-proxy-user-name\": {\n+                                \"description\": \"HTTP Proxy Username\",\n+                                \"displayName\": \"HTTP Proxy Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Mongo URI\",\n+                                \"name\": \"gcp-proxy-user-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"allow-disk-use\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Set this to true to enable writing data to temporary files to prevent exceeding the maximum memory use limit during aggregation pipeline staged when handling large datasets.\",\n-                                \"displayName\": \"Allow Disk Use\",\n+                            \"gcp-proxy-user-password\": {\n+                                \"description\": \"HTTP Proxy Password\",\n+                                \"displayName\": \"HTTP Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"allow-disk-use\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"json-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use MongoDB's \\\"extended JSON\\\". This is the JSON generated with toJson() on a MongoDB Document from the Java driver\",\n-                                        \"displayName\": \"Extended JSON\",\n-                                        \"value\": \"Extended\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generate a JSON document that conforms to typical JSON conventions instead of Mongo-specific conventions.\",\n-                                        \"displayName\": \"Standard JSON\",\n-                                        \"value\": \"Standard\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Extended\",\n-                                \"description\": \"By default, MongoDB's Java driver returns \\\"extended JSON\\\". Some of the features of this variant of JSON may cause problems for other JSON parsers that expect only standard JSON types and conventions. This configuration setting  controls whether to use extended JSON or provide a clean view that conforms to standard JSON.\",\n-                                \"displayName\": \"JSON Type\",\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"json-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-agg-query\": {\n-                                \"description\": \"The aggregation query to be executed.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-agg-query\",\n+                                \"name\": \"gcp-retry-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"gcs-bucket\": {\n+                                \"defaultValue\": \"${gcs.bucket}\",\n+                                \"description\": \"Bucket of the object.\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-charset\",\n+                                \"name\": \"gcs-bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"mongo-date-format\": {\n-                                \"defaultValue\": \"yyyy-MM-dd'T'HH:mm:ss'Z'\",\n-                                \"description\": \"The date format string to use for formatting Date fields that are returned from Mongo. It is only applied when the JSON output format is set to Standard JSON. Full documentation for format characters can be found here: https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html\",\n-                                \"displayName\": \"Date Format\",\n+                            \"gcs-generation\": {\n+                                \"description\": \"The generation of the object to be deleted. If null, will use latest version of the object.\",\n+                                \"displayName\": \"Generation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-date-format\",\n+                                \"name\": \"gcs-generation\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-query-attribute\": {\n-                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n-                                \"displayName\": \"Query Output Attribute\",\n+                            \"gcs-key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"Name of the object.\",\n+                                \"displayName\": \"Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"results-per-flowfile\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"How many results to put into a flowfile at once. The whole body will be treated as a JSON array of results.\",\n-                                \"displayName\": \"Results Per FlowFile\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"results-per-flowfile\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl-client-auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n-                                \"required\": false,\n+                                \"name\": \"gcs-key\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"storage-api-url\": {\n+                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n+                                \"displayName\": \"Storage API URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"storage-api-url\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n+                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The result set of the aggregation will be sent to this relationship.\",\n-                                \"name\": \"results\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query succeeds.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"aggregate\",\n-                            \"aggregation\",\n-                            \"mongo\"\n+                            \"delete\",\n+                            \"gcs\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.RunMongoAggregation\",\n-                        \"typeDescription\": \"A processor that runs an aggregation query whenever a flowfile is received.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n+                        \"typeDescription\": \"Deletes objects from a Google Cloud Bucket. If attempting to delete a file that does not exist, FlowFile is routed to success.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -35565,270 +32326,749 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"delete-gridfs-query\": {\n-                                \"description\": \"A valid MongoDB query to use to find and delete one or more files from GridFS.\",\n-                                \"displayName\": \"Query\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"delete-gridfs-query\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gridfs-bucket-name\": {\n-                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n-                                \"displayName\": \"Bucket Name\",\n+                            \"gcp-proxy-host\": {\n+                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n+                                \"displayName\": \"Proxy host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-bucket-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gridfs-client-service\": {\n-                                \"description\": \"The MongoDB client service to use for database connections.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"gcp-proxy-port\": {\n+                                \"description\": \"Proxy port number\",\n+                                \"displayName\": \"Proxy port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-user-name\": {\n+                                \"description\": \"HTTP Proxy Username\",\n+                                \"displayName\": \"HTTP Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-user-password\": {\n+                                \"description\": \"HTTP Proxy Password\",\n+                                \"displayName\": \"HTTP Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gridfs-client-service\",\n+                                \"name\": \"gcp-retry-count\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"gridfs-database-name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"gcs-bucket\": {\n+                                \"defaultValue\": \"${gcs.bucket}\",\n+                                \"description\": \"Bucket of the object.\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-database-name\",\n+                                \"name\": \"gcs-bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gridfs-file-name\": {\n-                                \"description\": \"The name of the file in the bucket that is the target of this processor. GridFS file names do not include path information because GridFS does not sort files into folders within a bucket.\",\n-                                \"displayName\": \"File Name\",\n+                            \"gcs-generation\": {\n+                                \"description\": \"The generation of the Object to download. If not set, the latest generation will be downloaded.\",\n+                                \"displayName\": \"Object Generation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-file-name\",\n+                                \"name\": \"gcs-generation\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-query-attribute\": {\n-                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n-                                \"displayName\": \"Query Output Attribute\",\n+                            \"gcs-key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"Name of the object.\",\n+                                \"displayName\": \"Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n+                                \"name\": \"gcs-key\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-object-range-length\": {\n+                                \"description\": \"The number of bytes to download from the object, starting from the Range Start. An empty value or a value that extends beyond the end of the object will read to the end of the object.\",\n+                                \"displayName\": \"Range Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gcs-object-range-length\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-object-range-start\": {\n+                                \"description\": \"The byte position at which to start reading from the object. An empty value or a value of zero will start reading at the beginning of the object.\",\n+                                \"displayName\": \"Range Start\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gcs-object-range-start\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-server-side-encryption-key\": {\n+                                \"description\": \"An AES256 Key (encoded in base64) which the object has been encrypted in.\",\n+                                \"displayName\": \"Server Side Encryption Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gcs-server-side-encryption-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"storage-api-url\": {\n+                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n+                                \"displayName\": \"Storage API URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"storage-api-url\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n+                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"delete\",\n-                            \"gridfs\",\n-                            \"mongodb\"\n+                            \"fetch\",\n+                            \"gcs\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.DeleteGridFS\",\n-                        \"typeDescription\": \"Deletes a file from GridFS using a file name or a query.\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n+                        \"typeDescription\": \"Fetches a file from a Google Cloud Bucket. Designed to be used in tandem with ListGCSBucket.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the file, parsed if possible from the Content-Disposition response header\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"Bucket of the object.\",\n+                                \"name\": \"gcs.bucket\"\n+                            },\n+                            {\n+                                \"description\": \"Name of the object.\",\n+                                \"name\": \"gcs.key\"\n+                            },\n+                            {\n+                                \"description\": \"Size of the object.\",\n+                                \"name\": \"gcs.size\"\n+                            },\n+                            {\n+                                \"description\": \"Data cache control of the object.\",\n+                                \"name\": \"gcs.cache.control\"\n+                            },\n+                            {\n+                                \"description\": \"The number of components which make up the object.\",\n+                                \"name\": \"gcs.component.count\"\n+                            },\n+                            {\n+                                \"description\": \"The data content disposition of the object.\",\n+                                \"name\": \"gcs.content.disposition\"\n+                            },\n+                            {\n+                                \"description\": \"The content encoding of the object.\",\n+                                \"name\": \"gcs.content.encoding\"\n+                            },\n+                            {\n+                                \"description\": \"The content language of the object.\",\n+                                \"name\": \"gcs.content.language\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME/Content-Type of the object\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n+                                \"name\": \"gcs.crc32c\"\n+                            },\n+                            {\n+                                \"description\": \"The creation time of the object (milliseconds)\",\n+                                \"name\": \"gcs.create.time\"\n+                            },\n+                            {\n+                                \"description\": \"The last modification time of the object (milliseconds)\",\n+                                \"name\": \"gcs.update.time\"\n+                            },\n+                            {\n+                                \"description\": \"The algorithm used to encrypt the object.\",\n+                                \"name\": \"gcs.encryption.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n+                                \"name\": \"gcs.encryption.sha256\"\n+                            },\n+                            {\n+                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n+                                \"name\": \"gcs.etag\"\n+                            },\n+                            {\n+                                \"description\": \"The service-generated for the object\",\n+                                \"name\": \"gcs.generated.id\"\n+                            },\n+                            {\n+                                \"description\": \"The data generation of the object.\",\n+                                \"name\": \"gcs.generation\"\n+                            },\n+                            {\n+                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n+                                \"name\": \"gcs.md5\"\n+                            },\n+                            {\n+                                \"description\": \"The media download link to the object.\",\n+                                \"name\": \"gcs.media.link\"\n+                            },\n+                            {\n+                                \"description\": \"The metageneration of the object.\",\n+                                \"name\": \"gcs.metageneration\"\n+                            },\n+                            {\n+                                \"description\": \"The owner (uploader) of the object.\",\n+                                \"name\": \"gcs.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The ACL entity type of the uploader of the object.\",\n+                                \"name\": \"gcs.owner.type\"\n+                            },\n+                            {\n+                                \"description\": \"The URI of the object as a string.\",\n+                                \"name\": \"gcs.uri\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"gridfs-bucket-name\": {\n-                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n-                                \"displayName\": \"Bucket Name\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-bucket-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gridfs-client-service\": {\n-                                \"description\": \"The MongoDB client service to use for database connections.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"et-state-cache\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gridfs-client-service\",\n+                                \"name\": \"et-state-cache\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"gridfs-database-name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"window\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Entity Tracking Initial Listing Target\",\n+                                        \"propertyName\": \"et-initial-listing-target\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-database-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gridfs-file-name\": {\n-                                \"description\": \"The name of the file in the bucket that is the target of this processor.\",\n-                                \"displayName\": \"File Name\",\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-file-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gridfs-query\": {\n-                                \"description\": \"A valid MongoDB query to use to fetch one or more files from GridFS.\",\n-                                \"displayName\": \"Query\",\n+                            \"gcp-proxy-host\": {\n+                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n+                                \"displayName\": \"Proxy host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-query\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-operation-mode\": {\n+                            \"gcp-proxy-port\": {\n+                                \"description\": \"Proxy port number\",\n+                                \"displayName\": \"Proxy port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-user-name\": {\n+                                \"description\": \"HTTP Proxy Username\",\n+                                \"displayName\": \"HTTP Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-user-password\": {\n+                                \"description\": \"HTTP Proxy Password\",\n+                                \"displayName\": \"HTTP Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-retry-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-bucket\": {\n+                                \"description\": \"Bucket of the object.\",\n+                                \"displayName\": \"Bucket\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcs-bucket\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-prefix\": {\n+                                \"description\": \"The prefix used to filter the object list. In most cases, it should end with a forward slash ('/').\",\n+                                \"displayName\": \"Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcs-prefix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-use-generations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fetch the entire query result and then make it available to downstream processors.\",\n-                                        \"displayName\": \"Full Query Fetch\",\n-                                        \"value\": \"all-at-once\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"As soon as the query start sending results to the downstream processors at regular intervals.\",\n-                                        \"displayName\": \"Stream Query Results\",\n-                                        \"value\": \"streaming\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all-at-once\",\n-                                \"description\": \"This option controls when results are made available to downstream processors. If Stream Query Results is enabled, provenance will not be tracked relative to the input flowfile if an input flowfile is received and starts the query. In Stream Query Results mode errors will be handled by sending a new flowfile with the original content and attributes of the input flowfile to the failure relationship. Streaming should only be used if there is reliable connectivity between MongoDB and NiFi.\",\n-                                \"displayName\": \"Operation Mode\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether to use GCS Generations, if applicable.  If false, only the latest version of each object will be returned.\",\n+                                \"displayName\": \"Use Generations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-operation-mode\",\n+                                \"name\": \"gcs-use-generations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-query-attribute\": {\n-                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n-                                \"displayName\": \"Query Output Attribute\",\n+                            \"listing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. This strategy will not pick up any newly added or modified entity if their timestamps are older than the tracked latest timestamp. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracing Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However an additional DistributedMapCache controller service is required and more JVM heap memory is used. For more information on how the 'Entity Tracking Time Window' property works, see the description.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists all entities without any tracking. The same entities will be listed each time this processor is scheduled. It is recommended to change the default run schedule value. Any property that relates to the persisting state will be ignored.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"storage-api-url\": {\n+                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n+                                \"displayName\": \"Storage API URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"storage-api-url\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n+                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of keys, the timestamp of the newest key is stored, along with the keys that share that same timestamp. This allows the Processor to list only keys that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original input flowfile goes to this relationship if the query does not cause an error\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"gridfs\",\n-                            \"mongo\"\n+                            \"gcs\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"list\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.FetchGridFS\",\n-                        \"typeDescription\": \"Retrieves one or more files from a GridFS bucket by file name or by a user-defined query.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n+                        \"typeDescription\": \"Retrieves a listing of objects from a GCS bucket. For each object that is listed, creates a FlowFile that represents the object so that it can be fetched in conjunction with FetchGCSObject. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The custom metadata stored with a file is attached to this property if it exists.\",\n-                                \"name\": \"gridfs.file.metadata\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"Bucket of the object.\",\n+                                \"name\": \"gcs.bucket\"\n+                            },\n+                            {\n+                                \"description\": \"Name of the object.\",\n+                                \"name\": \"gcs.key\"\n+                            },\n+                            {\n+                                \"description\": \"Size of the object.\",\n+                                \"name\": \"gcs.size\"\n+                            },\n+                            {\n+                                \"description\": \"Data cache control of the object.\",\n+                                \"name\": \"gcs.cache.control\"\n+                            },\n+                            {\n+                                \"description\": \"The number of components which make up the object.\",\n+                                \"name\": \"gcs.component.count\"\n+                            },\n+                            {\n+                                \"description\": \"The data content disposition of the object.\",\n+                                \"name\": \"gcs.content.disposition\"\n+                            },\n+                            {\n+                                \"description\": \"The content encoding of the object.\",\n+                                \"name\": \"gcs.content.encoding\"\n+                            },\n+                            {\n+                                \"description\": \"The content language of the object.\",\n+                                \"name\": \"gcs.content.language\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME/Content-Type of the object\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n+                                \"name\": \"gcs.crc32c\"\n+                            },\n+                            {\n+                                \"description\": \"The creation time of the object (milliseconds)\",\n+                                \"name\": \"gcs.create.time\"\n+                            },\n+                            {\n+                                \"description\": \"The last modification time of the object (milliseconds)\",\n+                                \"name\": \"gcs.update.time\"\n+                            },\n+                            {\n+                                \"description\": \"The algorithm used to encrypt the object.\",\n+                                \"name\": \"gcs.encryption.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n+                                \"name\": \"gcs.encryption.sha256\"\n+                            },\n+                            {\n+                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n+                                \"name\": \"gcs.etag\"\n+                            },\n+                            {\n+                                \"description\": \"The service-generated for the object\",\n+                                \"name\": \"gcs.generated.id\"\n+                            },\n+                            {\n+                                \"description\": \"The data generation of the object.\",\n+                                \"name\": \"gcs.generation\"\n+                            },\n+                            {\n+                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n+                                \"name\": \"gcs.md5\"\n+                            },\n+                            {\n+                                \"description\": \"The media download link to the object.\",\n+                                \"name\": \"gcs.media.link\"\n+                            },\n+                            {\n+                                \"description\": \"The metageneration of the object.\",\n+                                \"name\": \"gcs.metageneration\"\n+                            },\n+                            {\n+                                \"description\": \"The owner (uploader) of the object.\",\n+                                \"name\": \"gcs.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The ACL entity type of the uploader of the object.\",\n+                                \"name\": \"gcs.owner.type\"\n+                            },\n+                            {\n+                                \"description\": \"The URI of the object as a string.\",\n+                                \"name\": \"gcs.uri\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -35836,182 +33076,454 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Allows user-defined metadata to be added to the GCS object as key/value pairs\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a User-Defined Metadata field to add to the GCS Object\",\n+                                \"value\": \"The value of a User-Defined Metadata field to add to the GCS Object\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"gridfs-bucket-name\": {\n-                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n-                                \"displayName\": \"Bucket Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-bucket-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gridfs-client-service\": {\n-                                \"description\": \"The MongoDB client service to use for database connections.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gridfs-client-service\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"gridfs-database-name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-project-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-host\": {\n+                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n+                                \"displayName\": \"Proxy host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-port\": {\n+                                \"description\": \"Proxy port number\",\n+                                \"displayName\": \"Proxy port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-user-name\": {\n+                                \"description\": \"HTTP Proxy Username\",\n+                                \"displayName\": \"HTTP Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-user-password\": {\n+                                \"description\": \"HTTP Proxy Password\",\n+                                \"displayName\": \"HTTP Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-retry-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-bucket\": {\n+                                \"defaultValue\": \"${gcs.bucket}\",\n+                                \"description\": \"Bucket of the object.\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-database-name\",\n+                                \"name\": \"gcs-bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gridfs-file-name\": {\n-                                \"description\": \"The name of the file in the bucket that is the target of this processor. GridFS file names do not include path information because GridFS does not sort files into folders within a bucket.\",\n-                                \"displayName\": \"File Name\",\n+                            \"gcs-content-disposition-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Indicates that the object should be loaded and rendered within the browser.\",\n+                                        \"displayName\": \"Inline\",\n+                                        \"value\": \"inline\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Indicates that the object should be saved (using a Save As... dialog) rather than opened directly within the browser\",\n+                                        \"displayName\": \"Attachment\",\n+                                        \"value\": \"attachment\"\n+                                    }\n+                                ],\n+                                \"description\": \"Type of RFC-6266 Content Disposition to be attached to the object\",\n+                                \"displayName\": \"Content Disposition Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcs-content-disposition-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-content-type\": {\n+                                \"defaultValue\": \"${mime.type}\",\n+                                \"description\": \"Content Type for the file, i.e. text/plain\",\n+                                \"displayName\": \"Content Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-file-name\",\n-                                \"required\": true,\n+                                \"name\": \"gcs-content-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"putgridfs-chunk-size\": {\n-                                \"defaultValue\": \"256 KB\",\n-                                \"description\": \"Controls the maximum size of each chunk of a file uploaded into GridFS.\",\n-                                \"displayName\": \"Chunk Size\",\n+                            \"gcs-key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"Name of the object.\",\n+                                \"displayName\": \"Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"putgridfs-chunk-size\",\n+                                \"name\": \"gcs-key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"putgridfs-enforce-uniqueness\": {\n+                            \"gcs-object-acl\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No uniqueness will be enforced.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all authenticated Google account holders READER and WRITER permissions. All other permissions are removed.\",\n+                                        \"displayName\": \"All Authenticated Users\",\n+                                        \"value\": \"ALL_AUTHENTICATED_USERS\"\n                                     },\n                                     {\n-                                        \"description\": \"Both the filename and hash must be unique.\",\n-                                        \"displayName\": \"Both\",\n-                                        \"value\": \"both\"\n+                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all authenticated Google account holders READER permission. All other permissions are removed.\",\n+                                        \"displayName\": \"Authenticated Read\",\n+                                        \"value\": \"AUTHENTICATED_READ\"\n                                     },\n                                     {\n-                                        \"description\": \"Only the filename must be unique.\",\n-                                        \"displayName\": \"Name\",\n-                                        \"value\": \"name\"\n+                                        \"description\": \"Gives the object and bucket owners OWNER permission. All other permissions are removed.\",\n+                                        \"displayName\": \"Bucket Owner Full Control\",\n+                                        \"value\": \"BUCKET_OWNER_FULL_CONTROL\"\n                                     },\n                                     {\n-                                        \"description\": \"Only the file hash must be unique.\",\n-                                        \"displayName\": \"Hash\",\n-                                        \"value\": \"hash\"\n+                                        \"description\": \"Gives the object owner OWNER permission, and gives the bucket owner READER permission. All other permissions are removed.\",\n+                                        \"displayName\": \"Bucket Owner Read Only\",\n+                                        \"value\": \"BUCKET_OWNER_READ\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gives the bucket or object owner OWNER permission for a bucket or object, and removes all other access permissions.\",\n+                                        \"displayName\": \"Private\",\n+                                        \"value\": \"PRIVATE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gives permission to the project team based on their roles. Anyone who is part of the team has READER permission. Project owners and project editors have OWNER permission. This is the default ACL for newly created buckets. This is also the default ACL for newly created objects unless the default object ACL for that bucket has been changed.\",\n+                                        \"displayName\": \"Project Private\",\n+                                        \"value\": \"PROJECT_PRIVATE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all users, both authenticated and anonymous, READER permission. When you apply this to an object, anyone on the Internet can read the object without authenticating.\",\n+                                        \"displayName\": \"Public Read Only\",\n+                                        \"value\": \"PUBLIC_READ\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"When enabled, this option will ensure that uniqueness is enforced on the bucket. It will do so by creating a MongoDB index that matches your selection. It should ideally be configured once when the bucket is created for the first time because it could take a long time to build on an existing bucket wit a lot of data.\",\n-                                \"displayName\": \"Enforce Uniqueness\",\n+                                \"description\": \"Access Control to be attached to the object uploaded. Not providing this will revert to bucket defaults.\",\n+                                \"displayName\": \"Object ACL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"putgridfs-enforce-uniqueness\",\n-                                \"required\": true,\n+                                \"name\": \"gcs-object-acl\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"putgridfs-hash-attribute\": {\n-                                \"defaultValue\": \"hash.value\",\n-                                \"description\": \"If uniquness enforcement is enabled and the file hash is part of the constraint, this must be set to an attribute that exists on all incoming flowfiles.\",\n-                                \"displayName\": \"Hash Attribute\",\n+                            \"gcs-object-crc32c\": {\n+                                \"description\": \"CRC32C Checksum (encoded in Base64, big-Endian order) of the file for server-side validation.\",\n+                                \"displayName\": \"CRC32C Checksum\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"putgridfs-hash-attribute\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gcs-object-crc32c\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"putgridfs-properties-prefix\": {\n-                                \"description\": \"Attributes that have this prefix will be added to the file stored in GridFS as metadata.\",\n-                                \"displayName\": \"File Properties Prefix\",\n+                            \"gcs-object-md5\": {\n+                                \"description\": \"MD5 Hash (encoded in Base64) of the file for server-side validation.\",\n+                                \"displayName\": \"MD5 Hash\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"putgridfs-properties-prefix\",\n+                                \"name\": \"gcs-object-md5\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-overwrite-object\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If false, the upload to GCS will succeed only if the object does not exist.\",\n+                                \"displayName\": \"Overwrite Object\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcs-overwrite-object\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-server-side-encryption-key\": {\n+                                \"description\": \"An AES256 Encryption Key (encoded in base64) for server-side encryption of the object.\",\n+                                \"displayName\": \"Server Side Encryption Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gcs-server-side-encryption-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"gzip.content.enabled\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Signals to the GCS Blob Writer whether GZIP compression during transfer is desired. False means do not gzip and can boost performance in many cases.\",\n+                                \"displayName\": \"GZIP Compression Enabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gzip.content.enabled\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"storage-api-url\": {\n+                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n+                                \"displayName\": \"Storage API URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"storage-api-url\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Uses the FlowFile's filename as the filename for the GCS object\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"Uses the FlowFile's MIME type as the content-type for the GCS object\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Flowfiles that fail the duplicate check are sent to this relationship.\",\n-                                \"name\": \"duplicate\"\n-                            },\n-                            {\n-                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"file\",\n-                            \"gridfs\",\n-                            \"mongo\",\n-                            \"put\",\n-                            \"store\"\n+                            \"archive\",\n+                            \"gcs\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.PutGridFS\",\n-                        \"typeDescription\": \"Writes a file to a GridFS bucket.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-salesforce-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"type\": \"org.apache.nifi.processors.gcp.storage.PutGCSObject\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile as an object in a Google Cloud Storage.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Bucket of the object.\",\n+                                \"name\": \"gcs.bucket\"\n+                            },\n+                            {\n+                                \"description\": \"Name of the object.\",\n+                                \"name\": \"gcs.key\"\n+                            },\n+                            {\n+                                \"description\": \"Size of the object.\",\n+                                \"name\": \"gcs.size\"\n+                            },\n+                            {\n+                                \"description\": \"Data cache control of the object.\",\n+                                \"name\": \"gcs.cache.control\"\n+                            },\n+                            {\n+                                \"description\": \"The number of components which make up the object.\",\n+                                \"name\": \"gcs.component.count\"\n+                            },\n+                            {\n+                                \"description\": \"The data content disposition of the object.\",\n+                                \"name\": \"gcs.content.disposition\"\n+                            },\n+                            {\n+                                \"description\": \"The content encoding of the object.\",\n+                                \"name\": \"gcs.content.encoding\"\n+                            },\n+                            {\n+                                \"description\": \"The content language of the object.\",\n+                                \"name\": \"gcs.content.language\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME/Content-Type of the object\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n+                                \"name\": \"gcs.crc32c\"\n+                            },\n+                            {\n+                                \"description\": \"The creation time of the object (milliseconds)\",\n+                                \"name\": \"gcs.create.time\"\n+                            },\n+                            {\n+                                \"description\": \"The last modification time of the object (milliseconds)\",\n+                                \"name\": \"gcs.update.time\"\n+                            },\n+                            {\n+                                \"description\": \"The algorithm used to encrypt the object.\",\n+                                \"name\": \"gcs.encryption.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n+                                \"name\": \"gcs.encryption.sha256\"\n+                            },\n+                            {\n+                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n+                                \"name\": \"gcs.etag\"\n+                            },\n+                            {\n+                                \"description\": \"The service-generated for the object\",\n+                                \"name\": \"gcs.generated.id\"\n+                            },\n+                            {\n+                                \"description\": \"The data generation of the object.\",\n+                                \"name\": \"gcs.generation\"\n+                            },\n+                            {\n+                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n+                                \"name\": \"gcs.md5\"\n+                            },\n+                            {\n+                                \"description\": \"The media download link to the object.\",\n+                                \"name\": \"gcs.media.link\"\n+                            },\n+                            {\n+                                \"description\": \"The metageneration of the object.\",\n+                                \"name\": \"gcs.metageneration\"\n+                            },\n+                            {\n+                                \"description\": \"The owner (uploader) of the object.\",\n+                                \"name\": \"gcs.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The ACL entity type of the uploader of the object.\",\n+                                \"name\": \"gcs.owner.type\"\n+                            },\n+                            {\n+                                \"description\": \"The URI of the object as a string.\",\n+                                \"name\": \"gcs.uri\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-salesforce-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -36020,495 +33532,308 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"oauth2-access-token-provider\": {\n-                                \"description\": \"Service providing OAuth2 Access Tokens for authenticating using the HTTP Authorization Header\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"read-timeout\": {\n-                                \"defaultValue\": \"15 s\",\n-                                \"description\": \"Maximum time allowed for reading a response from the Salesforce REST API\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"operationKey\": {\n+                                \"defaultValue\": \"${operationKey}\",\n+                                \"description\": \"The unique identifier of the Vision operation.\",\n+                                \"displayName\": \"GCP Operation Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"read-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"operationKey\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"A unique identifier of the operation designated by the Vision server.\",\n+                                \"name\": \"operationKey\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateFilesOperation\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The job is currently still being processed\",\n+                                \"name\": \"running\"\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Cloud\",\n+                            \"Google\",\n+                            \"Machine Learning\",\n+                            \"Vision\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an Google Vision operation.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"salesforce-api-version\": {\n-                                \"defaultValue\": \"54.0\",\n-                                \"description\": \"The version number of the Salesforce REST API appended to the URL after the services/data path. See Salesforce documentation for supported versions\",\n-                                \"displayName\": \"API Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"salesforce-api-version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"salesforce-url\": {\n-                                \"description\": \"The URL of the Salesforce instance including the domain without additional path information, such as https://MyDomainName.my.salesforce.com\",\n-                                \"displayName\": \"Salesforce Instance URL\",\n+                            \"operationKey\": {\n+                                \"defaultValue\": \"${operationKey}\",\n+                                \"description\": \"The unique identifier of the Vision operation.\",\n+                                \"displayName\": \"GCP Operation Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"salesforce-url\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"operationKey\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"The Salesforce object type to upload records to. E.g. Account, Contact, Campaign.\",\n-                                \"name\": \"objectType\"\n+                                \"description\": \"A unique identifier of the operation designated by the Vision server.\",\n+                                \"name\": \"operationKey\"\n                             }\n                         ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.salesforce.QuerySalesforceObject\"\n+                            \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateImagesOperation\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful execution.\",\n+                                \"description\": \"The job is currently still being processed\",\n+                                \"name\": \"running\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"For FlowFiles created as a result of an execution error.\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"put\",\n-                            \"salesforce\",\n-                            \"sobject\"\n+                            \"Cloud\",\n+                            \"Google\",\n+                            \"Machine Learning\",\n+                            \"Vision\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.salesforce.PutSalesforceObject\",\n-                        \"typeDescription\": \"Creates new records for the specified Salesforce sObject. The type of the Salesforce object must be set in the input flowfile's 'objectType' attribute. This processor cannot update existing records.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The error message returned by Salesforce.\",\n-                                \"name\": \"error.message\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an Google Vision operation.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-salesforce-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"age-delay\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Age Field\",\n-                                        \"propertyName\": \"age-field\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35.\",\n-                                \"displayName\": \"Age Delay\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"age-delay\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"age-field\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of a TIMESTAMP field that will be used to filter records using a bounded time window.The processor will return only those records with a timestamp value newer than the timestamp recorded after the last processor run.\",\n-                                \"displayName\": \"Age Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"age-field\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"create-zero-record-files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether or not to create a FlowFile when the Salesforce REST API does not return any records\",\n-                                \"displayName\": \"Create Zero Record FlowFiles\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"create-zero-record-files\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"custom-soql-query\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specify the SOQL query to run.\",\n-                                \"displayName\": \"Custom SOQL Query\",\n+                            \"json-payload\": {\n+                                \"defaultValue\": \"{\\n    \\\"requests\\\": [\\n        {\\n            \\\"inputConfig\\\": {\\n                \\\"gcsSource\\\": {\\n                    \\\"uri\\\": \\\"gs://${gcs.bucket}/${filename}\\\"\\n                },\\n                \\\"mimeType\\\": \\\"application/pdf\\\"\\n            },\\n            \\\"features\\\": [{\\n                    \\\"type\\\": \\\"${vision-feature-type}\\\",\\n                    \\\"maxResults\\\": 4\\n                }],\\n            \\\"outputConfig\\\": {\\n                \\\"gcsDestination\\\": {\\n                    \\\"uri\\\": \\\"gs://${output-bucket}/${filename}/\\\"\\n                },\\n                \\\"batchSize\\\": 2\\n            }\\n        }]\\n}\",\n+                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n+                                \"displayName\": \"JSON Payload\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"custom-soql-query\",\n-                                \"required\": true,\n+                                \"name\": \"json-payload\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-where-condition\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"A custom expression to be added in the WHERE clause of the query\",\n-                                \"displayName\": \"Custom WHERE Condition\",\n+                            \"output-bucket\": {\n+                                \"description\": \"Name of the GCS bucket where the output of the Vision job will be persisted. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${output-bucket}\",\n+                                \"displayName\": \"Output Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"custom-where-condition\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"field-names\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Comma-separated list of field names requested from the sObject to be queried. When this field is left empty, all fields are queried.\",\n-                                \"displayName\": \"Field Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"field-names\",\n+                                \"name\": \"output-bucket\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"initial-age-filter\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Age Field\",\n-                                        \"propertyName\": \"age-field\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"This property specifies the start time that the processor applies when running the first query.\",\n-                                \"displayName\": \"Initial Age Start Time\",\n+                            \"vision-feature-type\": {\n+                                \"defaultValue\": \"TEXT_DETECTION\",\n+                                \"description\": \"Type of GCP Vision Feature. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${vision-feature-type}\",\n+                                \"displayName\": \"Vision Feature Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"initial-age-filter\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"vision-feature-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"oauth2-access-token-provider\": {\n-                                \"description\": \"Service providing OAuth2 Access Tokens for authenticating using the HTTP Authorization Header\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"query-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Provide query by properties.\",\n-                                        \"displayName\": \"Property Based Query\",\n-                                        \"value\": \"property-based-query\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provide custom SOQL query.\",\n-                                        \"displayName\": \"Custom Query\",\n-                                        \"value\": \"custom-query\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"property-based-query\",\n-                                \"description\": \"Choose to provide the query by parameters or a full custom query.\",\n-                                \"displayName\": \"Query Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"query-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"read-timeout\": {\n-                                \"defaultValue\": \"15 s\",\n-                                \"description\": \"Maximum time allowed for reading a response from the Salesforce REST API\",\n-                                \"displayName\": \"Read Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"read-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service used for writing records returned from the Salesforce REST API\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"salesforce-api-version\": {\n-                                \"defaultValue\": \"54.0\",\n-                                \"description\": \"The version number of the Salesforce REST API appended to the URL after the services/data path. See Salesforce documentation for supported versions\",\n-                                \"displayName\": \"API Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"salesforce-api-version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"salesforce-url\": {\n-                                \"description\": \"The URL of the Salesforce instance including the domain without additional path information, such as https://MyDomainName.my.salesforce.com\",\n-                                \"displayName\": \"Salesforce Instance URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"salesforce-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sobject-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Salesforce sObject to be queried\",\n-                                \"displayName\": \"sObject Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sobject-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.salesforce.PutSalesforceObject\"\n+                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\"\n                         ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"When 'Age Field' is set, after performing a query the time of execution is stored. Subsequent queries will be augmented with an additional condition so that only records that are newer than the stored execution time (adjusted with the optional value of 'Age Delay') will be retrieved. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query succeeds.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"query\",\n-                            \"salesforce\",\n-                            \"sobject\",\n-                            \"soql\"\n+                            \"Cloud\",\n+                            \"Google\",\n+                            \"Machine Learning\",\n+                            \"Vision\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.salesforce.QuerySalesforceObject\",\n-                        \"typeDescription\": \"Retrieves records from a Salesforce sObject. Users can add arbitrary filter conditions by setting the 'Custom WHERE Condition' property. The processor can also run a custom query, although record processing is not supported in that case. Supports incremental retrieval: users can define a field in the 'Age Field' property that will be used to determine when the record was created. When this property is set the processor will retrieve new records. Incremental loading and record-based processing are only supported in property-based queries. It's also possible to define an initial cutoff value for the age, filtering out all older records even for the first run. In case of 'Property Based Query' this processor should run on the Primary Node only. FlowFile attribute 'record.count' indicates how many records were retrieved and written to the output. The processor can accept an optional input FlowFile and reference the FlowFile attributes in the query.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateFilesOperation\",\n+                        \"typeDescription\": \"Trigger a Vision operation on file input. It should be followed by GetGcpVisionAnnotateFilesOperationStatus processor in order to monitor operation status.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the number of records in the FlowFile.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the total number of records in the FlowFile.\",\n-                                \"name\": \"total.record.count\"\n+                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n+                                \"name\": \"operationKey\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-ccda-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-ccda-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -36516,515 +33841,602 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"Parsing XML elements to FlowFile attributes is not recommend and should be replaced with record-oriented handling\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"skip-validation\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to validate CDA message values\",\n-                                \"displayName\": \"Skip Validation\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"skip-validation\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"json-payload\": {\n+                                \"defaultValue\": \"{\\n    \\\"requests\\\": [{\\n        \\\"image\\\": {\\n            \\\"source\\\": {\\n                \\\"imageUri\\\": \\\"gs://${gcs.bucket}/${filename}\\\"\\n            }\\n        },\\n        \\\"features\\\": [{\\n            \\\"type\\\": \\\"${vision-feature-type}\\\",\\n            \\\"maxResults\\\": 4\\n        }]\\n    }],\\n    \\\"outputConfig\\\": {\\n        \\\"gcsDestination\\\": {\\n            \\\"uri\\\": \\\"gs://${output-bucket}/${filename}/\\\"\\n        },\\n        \\\"batchSize\\\": 2\\n    }\\n}\",\n+                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n+                                \"displayName\": \"JSON Payload\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"json-payload\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"output-bucket\": {\n+                                \"description\": \"Name of the GCS bucket where the output of the Vision job will be persisted. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${output-bucket}\",\n+                                \"displayName\": \"Output Bucket\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"output-bucket\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"vision-feature-type\": {\n+                                \"defaultValue\": \"TEXT_DETECTION\",\n+                                \"description\": \"Type of GCP Vision Feature. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${vision-feature-type}\",\n+                                \"displayName\": \"Vision Feature Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"vision-feature-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it is properly parsed as CDA and its contents extracted as attributes.\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be parsed as CDA or its contents extracted as attributes.\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"CCDA\",\n-                            \"attributes\",\n-                            \"extract\",\n-                            \"healthcare\"\n+                            \"Cloud\",\n+                            \"Google\",\n+                            \"Machine Learning\",\n+                            \"Vision\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.ccda.ExtractCCDAAttributes\",\n-                        \"typeDescription\": \"Extracts information from an Consolidated CDA formatted FlowFile and provides individual attributes as FlowFile attributes. The attributes are named as <Parent> <dot> <Key>. If the Parent is repeating, the naming will be <Parent> <underscore> <Parent Index> <dot> <Key>. For example, section.act_07.observation.name=Essential hypertension\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateImagesOperation\",\n+                        \"typeDescription\": \"Trigger a Vision operation on image input. It should be followed by GetGcpVisionAnnotateImagesOperationStatus processor in order to monitor operation status.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n+                                \"name\": \"operationKey\"\n+                            }\n+                        ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-metrics-reporting-nar\",\n+            \"artifact\": \"nifi-couchbase-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-metrics-reporting-nar\",\n+                        \"artifact\": \"nifi-couchbase-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"deprecated\": true,\n-                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n+                        \"deprecationReason\": \"This component is deprecated and will be removed in NiFi 2.x.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Specify bucket password if necessary. Couchbase Server 5.0 or later should use 'User Name' and 'User Password' instead.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Bucket Password for BUCKET_NAME\",\n+                                \"value\": \"bucket password\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The charset used by the graphite server\",\n-                                \"displayName\": \"Charset\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"charset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"host\": {\n-                                \"description\": \"The hostname of the carbon listener\",\n-                                \"displayName\": \"Host\",\n+                            \"Connection String\": {\n+                                \"description\": \"The hostnames or ip addresses of the bootstraping nodes and optional parameters. Syntax) couchbase://node1,node2,nodeN?param1=value1&param2=value2&paramN=valueN\",\n+                                \"displayName\": \"Connection String\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"host\",\n+                                \"name\": \"Connection String\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"metric name prefix\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"A prefix that will be used for all metric names sent by reporters provided by this service.\",\n-                                \"displayName\": \"Metric Name Prefix\",\n+                            \"user-name\": {\n+                                \"description\": \"The user name to authenticate NiFi as a Couchbase client. This configuration can be used against Couchbase Server 5.0 or later supporting Roll-Based Access Control.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"metric name prefix\",\n-                                \"required\": true,\n+                                \"name\": \"user-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"port\": {\n-                                \"description\": \"The port on which carbon listens\",\n-                                \"displayName\": \"Port\",\n+                            \"user-password\": {\n+                                \"description\": \"The user password to authenticate NiFi as a Couchbase client. This configuration can be used against Couchbase Server 5.0 or later supporting Roll-Based Access Control.\",\n+                                \"displayName\": \"User Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"user-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-metrics-reporter-service-api-nar\",\n+                                \"artifact\": \"nifi-couchbase-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.metrics.reporting.reporter.service.MetricReporterService\",\n+                                \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"graphite\",\n-                            \"metrics\",\n-                            \"reporting\"\n+                            \"connection\",\n+                            \"couchbase\",\n+                            \"database\",\n+                            \"nosql\"\n                         ],\n-                        \"type\": \"org.apache.nifi.metrics.reporting.reporter.service.GraphiteMetricReporterService\",\n-                        \"typeDescription\": \"A controller service that provides metric reporters for graphite. Used by MetricsReportingTask.\",\n+                        \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterService\",\n+                        \"typeDescription\": \"Provides a centralized Couchbase connection and bucket passwords management. Bucket passwords can be specified via dynamic properties.\",\n                         \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-metrics-reporting-nar\",\n+                        \"artifact\": \"nifi-couchbase-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"deprecated\": true,\n-                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n+                        \"deprecationReason\": \"This component is deprecated and will be removed in NiFi 2.x.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"metric reporter service\": {\n-                                \"description\": \"The service that provides a reporter for the gathered metrics\",\n-                                \"displayName\": \"Metric Reporter Service\",\n+                            \"bucket-name\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"The name of bucket to access.\",\n+                                \"displayName\": \"Bucket Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bucket-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cluster-controller-service\": {\n+                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n+                                \"displayName\": \"Couchbase Cluster Controller Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"metric reporter service\",\n+                                \"name\": \"cluster-controller-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-metrics-reporter-service-api-nar\",\n+                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.metrics.reporting.reporter.service.MetricReporterService\",\n+                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"process group id\": {\n-                                \"description\": \"The id of the process group to report. If not specified, metrics of the root process groupare reported.\",\n-                                \"displayName\": \"Process Group ID\",\n+                            \"lookup-sub-doc-path\": {\n+                                \"description\": \"The Sub-Document lookup path within the target JSON document.\",\n+                                \"displayName\": \"Lookup Sub-Document Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"process group id\",\n+                                \"name\": \"lookup-sub-doc-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.27.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"metrics\",\n-                            \"reporting\"\n+                            \"couchbase\",\n+                            \"enrich\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"value\"\n                         ],\n-                        \"type\": \"org.apache.nifi.metrics.reporting.task.MetricsReportingTask\",\n-                        \"typeDescription\": \"This reporting task reports a set of metrics regarding the JVM and the NiFi instanceto a reporter. The reporter is provided by a MetricReporterService. It can be optionally used for a specificprocess group if a property with the group id is provided.\",\n+                        \"type\": \"org.apache.nifi.couchbase.CouchbaseKeyValueLookupService\",\n+                        \"typeDescription\": \"Lookup a string value from Couchbase Server associated with the specified key. The coordinates that are passed to the lookup must contain the key 'key'.\",\n                         \"version\": \"1.27.0\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-network-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-network-processors-nar\",\n+                        \"artifact\": \"nifi-couchbase-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"This component is deprecated and will be removed in NiFi 2.x.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"FIELDS_DESTINATION\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Parsed data routes as flowfile JSON content\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Parsed data routes as flowfile attributes\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the results of the parser are written to the FlowFile content or a FlowFile attribute; if using flowfile-attribute, fields will be populated as attributes. If set to flowfile-content, the netflowv5 field will be converted into a flat JSON object.\",\n-                                \"displayName\": \"Parsed fields destination\",\n+                            \"bucket-name\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"The name of bucket to access.\",\n+                                \"displayName\": \"Bucket Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bucket-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cluster-controller-service\": {\n+                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n+                                \"displayName\": \"Couchbase Cluster Controller Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FIELDS_DESTINATION\",\n+                                \"name\": \"cluster-controller-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Optionally read if packets are received from UDP datagrams.\",\n-                                \"name\": \"udp.port\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully parsed as a netflowv5 data will be transferred to this Relationship.\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Any FlowFile that could not be parsed as a netflowv5 message will be transferred to this Relationship without any attributes being added\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"version\": \"1.27.0\"\n                             },\n                             {\n-                                \"description\": \"The original raw content\",\n-                                \"name\": \"original\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"byte\",\n-                            \"datagram\",\n-                            \"netflow\",\n-                            \"network\",\n-                            \"packet\",\n-                            \"v5\"\n+                            \"cache\",\n+                            \"cluster\",\n+                            \"couchbase\",\n+                            \"distributed\",\n+                            \"map\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.network.ParseNetflowv5\",\n-                        \"typeDescription\": \"Parses netflowv5 byte ingest and add to NiFi flowfile as attributes or JSON content.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The key and value generated by the parsing of the header fields.\",\n-                                \"name\": \"netflowv5.header.*\"\n-                            },\n-                            {\n-                                \"description\": \"The key and value generated by the parsing of the record fields.\",\n-                                \"name\": \"netflowv5.record.*\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-zendesk-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        \"type\": \"org.apache.nifi.couchbase.CouchbaseMapCacheClient\",\n+                        \"typeDescription\": \"Provides the ability to communicate with a Couchbase Server cluster as a DistributedMapCacheServer. This can be used in order to share a Map between nodes in a NiFi cluster. Couchbase Server cluster can provide a high available and persistent cache storage.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-zendesk-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-couchbase-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"This component is deprecated and will be removed in NiFi 2.x.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"cache-expiration\": {\n-                                \"defaultValue\": \"1 hour\",\n-                                \"description\": \"Specifies how long a Zendesk ticket that is cached should remain in the cache.\",\n-                                \"displayName\": \"Cache Expiration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-expiration\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Zendesk ticket should be cached.\",\n-                                \"displayName\": \"Cache Size\",\n+                            \"bucket-name\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"The name of bucket to access.\",\n+                                \"displayName\": \"Bucket Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bucket-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"web-client-service-provider\": {\n-                                \"description\": \"Controller service for HTTP client operations.\",\n-                                \"displayName\": \"Web Client Service Provider\",\n+                            \"cluster-controller-service\": {\n+                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n+                                \"displayName\": \"Couchbase Cluster Controller Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n+                                \"name\": \"cluster-controller-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"zendesk-authentication-type-name\": {\n+                            \"document-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Password of Zendesk login user.\",\n-                                        \"displayName\": \"Password\",\n-                                        \"value\": \"password\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Json\",\n+                                        \"value\": \"Json\"\n                                     },\n                                     {\n-                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n-                                        \"displayName\": \"Token\",\n-                                        \"value\": \"token\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n                                     }\n                                 ],\n-                                \"description\": \"Type of authentication to Zendesk API.\",\n-                                \"displayName\": \"Authentication Type\",\n+                                \"defaultValue\": \"Json\",\n+                                \"description\": \"The type of contents.\",\n+                                \"displayName\": \"Document Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-authentication-type-name\",\n+                                \"name\": \"document-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-authentication-value-name\": {\n-                                \"description\": \"Password or authentication token for Zendesk login user.\",\n-                                \"displayName\": \"Authentication Credential\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for parsing fetched document from Couchbase Server.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-authentication-value-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n                             },\n-                            \"zendesk-comment-body\": {\n-                                \"description\": \"The content or the path to the comment body in the incoming record.\",\n-                                \"displayName\": \"Comment Body\",\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"couchbase\",\n+                            \"enrich\",\n+                            \"lookup\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.couchbase.CouchbaseRecordLookupService\",\n+                        \"typeDescription\": \"Lookup a record from Couchbase Server associated with the specified key. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-couchbase-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"This component is deprecated and will be removed in NiFi 2.x.\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"bucket-name\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"The name of bucket to access.\",\n+                                \"displayName\": \"Bucket Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-comment-body\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bucket-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-priority\": {\n-                                \"description\": \"The content or the path to the priority in the incoming record.\",\n-                                \"displayName\": \"Priority\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-priority\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"zendesk-subdomain\": {\n-                                \"description\": \"Name of the Zendesk subdomain.\",\n-                                \"displayName\": \"Subdomain Name\",\n+                            \"cluster-controller-service\": {\n+                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n+                                \"displayName\": \"Couchbase Cluster Controller Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-subdomain\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cluster-controller-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"zendesk-subject\": {\n-                                \"description\": \"The content or the path to the subject in the incoming record.\",\n-                                \"displayName\": \"Subject\",\n+                            \"document-id\": {\n+                                \"description\": \"A static, fixed Couchbase document id, or an expression to construct the Couchbase document id.\",\n+                                \"displayName\": \"Document Id\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-subject\",\n+                                \"name\": \"document-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-type\": {\n-                                \"description\": \"The content or the path to the type in the incoming record.\",\n-                                \"displayName\": \"Type\",\n+                            \"document-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Json\",\n+                                        \"value\": \"Json\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Json\",\n+                                \"description\": \"The type of contents.\",\n+                                \"displayName\": \"Document Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"document-type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-user\": {\n-                                \"description\": \"Login user to Zendesk subdomain.\",\n-                                \"displayName\": \"User Name\",\n+                            \"put-to-attribute\": {\n+                                \"description\": \"If set, the retrieved value will be put into an attribute of the FlowFile instead of a the content of the FlowFile. The attribute key to put to is determined by evaluating value of this property.\",\n+                                \"displayName\": \"Put Value to Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-user\",\n-                                \"required\": true,\n+                                \"name\": \"put-to-attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"All FlowFiles failed to fetch from Couchbase Server but can be retried are routed to this relationship.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"Values retrieved from Couchbase Server are written as outgoing FlowFiles content or put into an attribute of the incoming FlowFile and routed to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles failed to fetch from Couchbase Server and not retry-able are routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original input FlowFile is routed to this relationship when the value is retrieved from Couchbase Server and routed to 'success'.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"record\",\n-                            \"sink\",\n-                            \"zendesk\"\n+                            \"couchbase\",\n+                            \"database\",\n+                            \"get\",\n+                            \"nosql\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.zendesk.ZendeskRecordSink\",\n-                        \"typeDescription\": \"Create Zendesk tickets using the Zendesk API.The service requires a Zendesk account with configured access.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hadoop-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.couchbase.GetCouchbaseKey\",\n+                        \"typeDescription\": \"Get a document from Couchbase Server via Key/Value access. The ID of the document to fetch may be supplied by setting the <Document Id> property. NOTE: if the Document Id property is not set, the contents of the FlowFile will be read to determine the Document Id, which means that the contents of the entire FlowFile will be buffered in memory.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Cluster where the document was retrieved from.\",\n+                                \"name\": \"couchbase.cluster\"\n+                            },\n+                            {\n+                                \"description\": \"Bucket where the document was retrieved from.\",\n+                                \"name\": \"couchbase.bucket\"\n+                            },\n+                            {\n+                                \"description\": \"Id of the document.\",\n+                                \"name\": \"couchbase.doc.id\"\n+                            },\n+                            {\n+                                \"description\": \"CAS of the document.\",\n+                                \"name\": \"couchbase.doc.cas\"\n+                            },\n+                            {\n+                                \"description\": \"Expiration of the document.\",\n+                                \"name\": \"couchbase.doc.expiry\"\n+                            },\n+                            {\n+                                \"description\": \"If Couchbase related error occurs the CouchbaseException class name will be captured here.\",\n+                                \"name\": \"couchbase.exception\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-couchbase-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -37032,482 +34444,566 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"This component is deprecated and will be removed in NiFi 2.x.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n+                            \"bucket-name\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"The name of bucket to access.\",\n+                                \"displayName\": \"Bucket Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bucket-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cluster-controller-service\": {\n+                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n+                                \"displayName\": \"Couchbase Cluster Controller Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n+                                \"name\": \"cluster-controller-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"document-id\": {\n+                                \"description\": \"A static, fixed Couchbase document id, or an expression to construct the Couchbase document id.\",\n+                                \"displayName\": \"Document Id\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"document-id\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Compression codec\": {\n+                            \"document-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No compression\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Json\",\n+                                        \"value\": \"Json\"\n                                     },\n                                     {\n-                                        \"description\": \"Default ZLIB compression\",\n-                                        \"displayName\": \"DEFAULT\",\n-                                        \"value\": \"DEFAULT\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Json\",\n+                                \"description\": \"The type of contents.\",\n+                                \"displayName\": \"Document Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"document-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"persist-to\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"BZIP compression\",\n-                                        \"displayName\": \"BZIP\",\n-                                        \"value\": \"BZIP\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MASTER\",\n+                                        \"value\": \"MASTER\"\n                                     },\n                                     {\n-                                        \"description\": \"GZIP compression\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"LZ4 compression\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ONE\",\n+                                        \"value\": \"ONE\"\n                                     },\n                                     {\n-                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TWO\",\n+                                        \"value\": \"TWO\"\n                                     },\n                                     {\n-                                        \"description\": \"Snappy compression\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"THREE\",\n+                                        \"value\": \"THREE\"\n                                     },\n                                     {\n-                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n-                                        \"displayName\": \"AUTOMATIC\",\n-                                        \"value\": \"AUTOMATIC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FOUR\",\n+                                        \"value\": \"FOUR\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"NONE\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Compression codec\",\n+                                \"description\": \"Durability constraint about disk persistence.\",\n+                                \"displayName\": \"Persist To\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression codec\",\n+                                \"name\": \"persist-to\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"compression type\": {\n+                            \"replicate-to\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"NONE\",\n                                         \"value\": \"NONE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"RECORD\",\n-                                        \"value\": \"RECORD\"\n+                                        \"displayName\": \"ONE\",\n+                                        \"value\": \"ONE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BLOCK\",\n-                                        \"value\": \"BLOCK\"\n+                                        \"displayName\": \"TWO\",\n+                                        \"value\": \"TWO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"THREE\",\n+                                        \"value\": \"THREE\"\n                                     }\n                                 ],\n-                                \"description\": \"Type of compression to use when creating Sequence File\",\n-                                \"displayName\": \"Compression type\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Durability constraint about replication.\",\n+                                \"displayName\": \"Replicate To\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression type\",\n-                                \"required\": false,\n+                                \"name\": \"replicate-to\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Used as a document id if 'Document Id' is not specified\",\n+                                \"name\": \"uuid\"\n+                            }\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Generated Sequence Files are sent to this relationship\",\n+                                \"description\": \"All FlowFiles failed to be written to Couchbase Server but can be retried are routed to this relationship.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that are written to Couchbase Server are routed to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Incoming files that failed to generate a Sequence File are sent to this relationship\",\n+                                \"description\": \"All FlowFiles failed to be written to Couchbase Server and not retry-able are routed to this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"create\",\n-                            \"hadoop\",\n-                            \"sequence file\",\n-                            \"sequencefile\"\n+                            \"couchbase\",\n+                            \"database\",\n+                            \"nosql\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.CreateHadoopSequenceFile\",\n-                        \"typeDescription\": \"Creates Hadoop Sequence Files from incoming flow files\",\n-                        \"version\": \"1.27.0\"\n-                    },\n+                        \"type\": \"org.apache.nifi.processors.couchbase.PutCouchbaseKey\",\n+                        \"typeDescription\": \"Put a document to Couchbase Server via Key/Value access.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Cluster where the document was stored.\",\n+                                \"name\": \"couchbase.cluster\"\n+                            },\n+                            {\n+                                \"description\": \"Bucket where the document was stored.\",\n+                                \"name\": \"couchbase.bucket\"\n+                            },\n+                            {\n+                                \"description\": \"Id of the document.\",\n+                                \"name\": \"couchbase.doc.id\"\n+                            },\n+                            {\n+                                \"description\": \"CAS of the document.\",\n+                                \"name\": \"couchbase.doc.cas\"\n+                            },\n+                            {\n+                                \"description\": \"Expiration of the document.\",\n+                                \"name\": \"couchbase.doc.expiry\"\n+                            },\n+                            {\n+                                \"description\": \"If Couchbase related error occurs the CouchbaseException class name will be captured here.\",\n+                                \"name\": \"couchbase.exception\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kerberos-credentials-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n+                        \"artifact\": \"nifi-kerberos-credentials-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"explicitRestrictions\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"write distributed filesystem\"\n+                                \"explanation\": \"Allows user to define a Keytab and principal that can then be used by other components.\",\n+                                \"requiredPermission\": \"access keytab\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n                             \"Kerberos Keytab\": {\n                                 \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n                                 \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n+                                \"required\": true,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n                             \"Kerberos Principal\": {\n                                 \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n                                 \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"Kerberos Principal\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Authentication\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Keytab\",\n+                            \"Principal\",\n+                            \"Security\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.kerberos.KeytabCredentialsService\",\n+                        \"typeDescription\": \"Provides a mechanism for specifying a Keytab and a Principal that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it (as opposed to specifying the principal and keytab directly in the processor) an administrator is able to choose which users are allowed to use which keytabs and principals. This provides a more robust security model for multi-tenant use cases.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-grpc-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-grpc-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"No planned alternatives to be offered. Use custom processors instead.\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Always Output Response\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Will force a response FlowFile to be generated and routed to the 'Response' relationship regardless of what the server status code received is or if the processor is configured to put the server response body in the request attribute. In the later configuration a request FlowFile with the response body in the attribute and a typical response FlowFile will be emitted to their respective relationships.\",\n+                                \"displayName\": \"Always Output Response\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Always Output Response\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n+                            \"Max Message Size\": {\n+                                \"defaultValue\": \"4MB\",\n+                                \"description\": \"The maximum size of FlowFiles that this processor will allow to be received. The default is 4MB. If FlowFiles exceed this size, you should consider using another transport mechanism as gRPC isn't designed for heavy payloads.\",\n+                                \"displayName\": \"Max Message Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Message Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"file_or_directory\": {\n-                                \"description\": \"The HDFS file or directory to delete. A wildcard expression may be used to only delete certain files\",\n-                                \"displayName\": \"Path\",\n+                            \"Penalize on \\\"No Retry\\\"\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this property will penalize FlowFiles that are routed to the \\\"No Retry\\\" relationship.\",\n+                                \"displayName\": \"Penalize on \\\"No Retry\\\"\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file_or_directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Penalize on \\\"No Retry\\\"\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote gRPC service hostname\": {\n+                                \"description\": \"Remote host which will be connected to\",\n+                                \"displayName\": \"Remote gRPC service hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Remote gRPC service hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"Remote gRPC service port\": {\n+                                \"description\": \"Remote port which will be connected to\",\n+                                \"displayName\": \"Remote gRPC service port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Remote gRPC service port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"SSL Context Service\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Use TLS\",\n+                                        \"propertyName\": \"Use SSL/TLS\"\n+                                    }\n+                                ],\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS (https) connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"recursive\": {\n+                            \"Send FlowFile Content\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Remove contents of a non-empty directory recursively\",\n-                                \"displayName\": \"Recursive\",\n+                                \"description\": \"Whether or not to include the FlowFile content in the FlowFileRequest to the gRPC service.\",\n+                                \"displayName\": \"Send FlowFile Content\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recursive\",\n-                                \"required\": true,\n+                                \"name\": \"Send FlowFile Content\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Use SSL/TLS\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not to use TLS to send the contents of the gRPC messages.\",\n+                                \"displayName\": \"Use TLS\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Use SSL/TLS\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"When an incoming flowfile is used then if there are no errors invoking delete the flowfile will route here.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The original FlowFile will be routed upon success. It will have new attributes detailing the success of the request.\",\n+                                \"name\": \"Original\"\n                             },\n                             {\n-                                \"description\": \"When an incoming flowfile is used and there is a failure while deleting then the flowfile will route here.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The original FlowFile will be routed on any type of connection failure, timeout or general exception. It will have new attributes detailing the request.\",\n+                                \"name\": \"Failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile will be routed on any status code that can be retried. It will have new attributes detailing the request.\",\n+                                \"name\": \"Retry\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile will be routed on any status code that should NOT be retried.  It will have new attributes detailing the request.\",\n+                                \"name\": \"No Retry\"\n+                            },\n+                            {\n+                                \"description\": \"A Response FlowFile will be routed upon success. If the 'Output Response Regardless' property is true then the response will be sent to this relationship regardless of the status code received.\",\n+                                \"name\": \"Response\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"HCFS\",\n-                            \"HDFS\",\n-                            \"delete\",\n-                            \"filesystem\",\n-                            \"hadoop\",\n-                            \"remove\"\n+                            \"client\",\n+                            \"grpc\",\n+                            \"rpc\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.DeleteHDFS\",\n-                        \"typeDescription\": \"Deletes one or more files or directories from HDFS. The path can be provided as an attribute from an incoming FlowFile, or a statically set path that is periodically removed. If this processor has an incoming connection, itwill ignore running on a periodic basis and instead rely on incoming FlowFiles to trigger a delete. Note that you may use a wildcard character to match multiple files or directories. If there are no incoming connections no flowfiles will be transfered to any output relationships.  If there is an incoming flowfile then provided there are no detected failures it will be transferred to success otherwise it will be sent to false. If knowledge of globbed files deleted is necessary use ListHDFS first to produce a specific list of files to delete. \",\n+                        \"type\": \"org.apache.nifi.processors.grpc.InvokeGRPC\",\n+                        \"typeDescription\": \"Sends FlowFiles, optionally with content, to a configurable remote gRPC service endpoint. The remote gRPC service must abide by the service IDL defined in NiFi.  gRPC isn't intended to carry large payloads,  so this processor should be used only when FlowFile sizes are on the order of megabytes. The default maximum message size is 4MB.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"HDFS file to be deleted. If multiple files are deleted, then only the last filename is set.\",\n-                                \"name\": \"hdfs.filename\"\n+                                \"description\": \"The response code that is returned (0 = ERROR, 1 = SUCCESS, 2 = RETRY)\",\n+                                \"name\": \"invokegrpc.response.code\"\n                             },\n                             {\n-                                \"description\": \"HDFS Path specified in the delete request. If multiple paths are deleted, then only the last path is set.\",\n-                                \"name\": \"hdfs.path\"\n+                                \"description\": \"The response message that is returned\",\n+                                \"name\": \"invokegrpc.response.body\"\n                             },\n                             {\n-                                \"description\": \"The hadoop url for the file to be deleted.\",\n-                                \"name\": \"hadoop.file.url\"\n+                                \"description\": \"The remote gRPC service hostname\",\n+                                \"name\": \"invokegrpc.service.host\"\n                             },\n                             {\n-                                \"description\": \"HDFS error message related to the hdfs.error.code\",\n-                                \"name\": \"hdfs.error.message\"\n+                                \"description\": \"The remote gRPC service port\",\n+                                \"name\": \"invokegrpc.service.port\"\n+                            },\n+                            {\n+                                \"description\": \"The Java exception class raised when the processor fails\",\n+                                \"name\": \"invokegrpc.java.exception.class\"\n+                            },\n+                            {\n+                                \"description\": \"The Java exception message raised when the processor fails\",\n+                                \"name\": \"invokegrpc.java.exception.message\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n+                        \"artifact\": \"nifi-grpc-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -37515,485 +35011,329 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"read distributed filesystem\"\n-                            }\n-                        ],\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"No planned alternatives to be offered. Use custom processors instead.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Compression codec\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"No compression\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Default ZLIB compression\",\n-                                        \"displayName\": \"DEFAULT\",\n-                                        \"value\": \"DEFAULT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BZIP compression\",\n-                                        \"displayName\": \"BZIP\",\n-                                        \"value\": \"BZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"GZIP compression\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZ4 compression\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy compression\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n+                            \"Authorized DN Pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n-                                        \"displayName\": \"AUTOMATIC\",\n-                                        \"value\": \"AUTOMATIC\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Use TLS\",\n+                                        \"propertyName\": \"Use TLS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Compression codec\",\n+                                \"description\": \"A Regular Expression to apply against the Distinguished Name of incoming connections. If the Pattern does not match the DN, the connection will be refused. The property will only be used if client certificate authentication (Mutual TLS) has been configured on SSL Context Service, otherwise it will be ignored.\",\n+                                \"displayName\": \"Authorized DN Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression codec\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"HDFS Filename\": {\n-                                \"defaultValue\": \"${path}/${filename}\",\n-                                \"description\": \"The name of the HDFS file to retrieve\",\n-                                \"displayName\": \"HDFS Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"HDFS Filename\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"name\": \"Authorized DN Pattern\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"Flow Control Window\": {\n+                                \"defaultValue\": \"1MB\",\n+                                \"description\": \"The initial HTTP/2 flow control window for both new streams and overall connection. Flow-control schemes ensure that streams on the same connection do not destructively interfere with each other. The default is 1MB.\",\n+                                \"displayName\": \"Flow Control Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Flow Control Window\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"Local gRPC service port\": {\n+                                \"description\": \"The local port that the gRPC service will listen on.\",\n+                                \"displayName\": \"Local gRPC Service Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n+                                \"name\": \"Local gRPC service port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n+                            \"Max Message Size\": {\n+                                \"defaultValue\": \"4MB\",\n+                                \"description\": \"The maximum size of FlowFiles that this processor will allow to be received. The default is 4MB. If FlowFiles exceed this size, you should consider using another transport mechanism as gRPC isn't designed for heavy payloads.\",\n+                                \"displayName\": \"Maximum Message Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Message Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"SSL Context Service\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Use TLS\",\n+                                        \"propertyName\": \"Use TLS\"\n+                                    }\n+                                ],\n+                                \"description\": \"The SSL Context Service used to provide server certificate information for TLS (https) connections. Keystore must be configured on the service. If truststore is also configured, it will turn on and require client certificate authentication (Mutual TLS).\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"Use TLS\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not to use TLS to receive the contents of the gRPC messages.\",\n+                                \"displayName\": \"Use TLS\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"name\": \"Use TLS\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles will be routed to this relationship once they have been updated with the content of the HDFS file\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles will be routed to this relationship if the content of the HDFS file cannot be retrieve due to a communications failure. This generally indicates that the Fetch should be tried again.\",\n-                                \"name\": \"comms.failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles will be routed to this relationship if the content of the HDFS file cannot be retrieved and trying again will likely not be helpful. This would occur, for instance, if the file is not found or if there is a permissions issue\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The FlowFile was received successfully.\",\n+                                \"name\": \"Success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"get\",\n-                            \"hadoop\",\n-                            \"hcfs\",\n-                            \"hdfs\",\n+                            \"grpc\",\n                             \"ingest\",\n-                            \"source\"\n+                            \"listen\",\n+                            \"rpc\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n-                        \"typeDescription\": \"Retrieves a file from HDFS. The content of the incoming FlowFile is replaced by the content of the file in HDFS. The file in HDFS is left intact without any changes being made to it.\",\n+                        \"type\": \"org.apache.nifi.processors.grpc.ListenGRPC\",\n+                        \"typeDescription\": \"Starts a gRPC server and listens on the given port to transform the incoming messages into FlowFiles. The message format is defined by the standard gRPC protobuf IDL provided by NiFi. gRPC isn't intended to carry large payloads, so this processor should be used only when FlowFile sizes are on the order of megabytes. The default maximum message size is 4MB.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"When a FlowFile is routed to 'failure', this attribute is added indicating why the file could not be fetched from HDFS\",\n-                                \"name\": \"hdfs.failure.reason\"\n+                                \"description\": \"The DN of the user who sent the FlowFile to this NiFi\",\n+                                \"name\": \"listengrpc.remote.user.dn\"\n                             },\n                             {\n-                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n-                                \"name\": \"hadoop.file.url\"\n+                                \"description\": \"The IP of the client who sent the FlowFile to this NiFi\",\n+                                \"name\": \"listengrpc.remote.host\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hbase_2-client-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n+                        \"artifact\": \"nifi-hbase_2-client-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"read distributed filesystem\"\n-                            },\n-                            {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"write distributed filesystem\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n+                            \"HBase Cache Table Name\": {\n+                                \"description\": \"Name of the table on HBase to use for the cache.\",\n+                                \"displayName\": \"HBase Cache Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"HBase Cache Table Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of files to pull in each iteration, based on run schedule.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"HBase Client Service\": {\n+                                \"description\": \"Specifies the HBase Client Controller Service to use for accessing HBase.\",\n+                                \"displayName\": \"HBase Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"name\": \"HBase Client Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Compression codec\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"No compression\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Default ZLIB compression\",\n-                                        \"displayName\": \"DEFAULT\",\n-                                        \"value\": \"DEFAULT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BZIP compression\",\n-                                        \"displayName\": \"BZIP\",\n-                                        \"value\": \"BZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"GZIP compression\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZ4 compression\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy compression\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n-                                        \"displayName\": \"AUTOMATIC\",\n-                                        \"value\": \"AUTOMATIC\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Compression codec\",\n+                            \"HBase Column Family\": {\n+                                \"defaultValue\": \"f\",\n+                                \"description\": \"Name of the column family on HBase to use for the cache.\",\n+                                \"displayName\": \"HBase Column Family\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression codec\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"HBase Column Family\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Directory\": {\n-                                \"description\": \"The HDFS directory from which files should be read\",\n-                                \"displayName\": \"Directory\",\n+                            \"HBase Column Qualifier\": {\n+                                \"defaultValue\": \"q\",\n+                                \"description\": \"Name of the column qualifier on HBase to use for the cache\",\n+                                \"displayName\": \"HBase Column Qualifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"HBase Column Qualifier\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"A Java Regular Expression for filtering Filenames; if a filter is supplied then only files whose names match that Regular Expression will be fetched, otherwise all files will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n+                            \"hb-lu-authorizations\": {\n+                                \"description\": \"The list of authorization tokens to be used with cell visibility if it is enabled. These will be used to override the default authorization list for the user accessing HBase.\",\n+                                \"displayName\": \"Authorizations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n+                                \"name\": \"hb-lu-authorizations\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Filter Match Name Only\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true then File Filter Regex will match on just the filename, otherwise subdirectory names will be included with filename in the regex comparison\",\n-                                \"displayName\": \"Filter Match Name Only\",\n+                            \"hbase-cache-visibility-expression\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"The default visibility expression to apply to cells when visibility expression support is enabled.\",\n+                                \"displayName\": \"Visibility Expression\",\n                                 \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hbase-cache-visibility-expression\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"1.27.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.hbase.HBase_2_ClientService\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"cluster\",\n+                            \"distributed\",\n+                            \"hbase\",\n+                            \"map\",\n+                            \"state\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.hbase.HBase_2_ClientMapCacheService\",\n+                        \"typeDescription\": \"Provides the ability to use an HBase table as a cache, in place of a DistributedMapCache. Uses a HBase_2_ClientService controller to communicate with HBase.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hbase_2-client-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be set on the HBase configuration after loading any provided configuration files.\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Filter Match Name Only\",\n-                                \"required\": true,\n+                                \"name\": \"The name of an HBase configuration property.\",\n+                                \"value\": \"The value of the given HBase configuration property.\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Client JAR Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"HBase Client Retries\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of times the HBase client will retry connecting. Required if Hadoop Configuration Files are not provided.\",\n+                                \"displayName\": \"HBase Client Retries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"HBase Client Retries\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n+                            \"Hadoop Configuration Files\": {\n+                                \"description\": \"Comma-separated list of Hadoop Configuration files, such as hbase-site.xml and core-site.xml for kerberos, including full paths to the files.\",\n+                                \"displayName\": \"Hadoop Configuration Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"name\": \"Hadoop Configuration Files\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"IO Buffer Size\": {\n-                                \"description\": \"Amount of memory to use to buffer file contents during IO. This overrides the Hadoop Configuration\",\n-                                \"displayName\": \"IO Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"IO Buffer Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore Dotted Files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Keep Source File\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Determines whether to delete the file from HDFS after it has been successfully transferred. If true, the file will be fetched repeatedly. This is intended for testing only.\",\n-                                \"displayName\": \"Keep Source File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Source File\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n                             \"Kerberos Keytab\": {\n                                 \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n                                 \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"Kerberos Keytab\",\n@@ -38022,78 +35362,60 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"Kerberos Principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n+                            \"Phoenix Client JAR Location\": {\n+                                \"description\": \"The full path to the Phoenix client JAR. Required if Phoenix is installed on top of HBase.\",\n+                                \"displayName\": \"Phoenix Client JAR Location\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n+                                \"name\": \"Phoenix Client JAR Location\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (based on last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"ZooKeeper Client Port\": {\n+                                \"description\": \"The port on which ZooKeeper is accepting client connections. Required if Hadoop Configuration Files are not provided.\",\n+                                \"displayName\": \"ZooKeeper Client Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"ZooKeeper Client Port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (based on last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Polling Interval\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Indicates how long to wait between performing directory listings\",\n-                                \"displayName\": \"Polling Interval\",\n+                            \"ZooKeeper Quorum\": {\n+                                \"description\": \"Comma-separated list of ZooKeeper hosts for HBase. Required if Hadoop Configuration Files are not provided.\",\n+                                \"displayName\": \"ZooKeeper Quorum\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"ZooKeeper Quorum\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Recurse Subdirectories\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to pull files from subdirectories of the HDFS directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n+                            \"ZooKeeper ZNode Parent\": {\n+                                \"description\": \"The ZooKeeper ZNode Parent value for HBase (example: /hbase). Required if Hadoop Configuration Files are not provided.\",\n+                                \"displayName\": \"ZooKeeper ZNode Parent\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Recurse Subdirectories\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"ZooKeeper ZNode Parent\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"kerberos-credentials-service\": {\n                                 \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n                                 \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n@@ -38121,1230 +35443,880 @@\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All files retrieved from HDFS are transferred to this relationship\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"HCFS\",\n-                            \"HDFS\",\n-                            \"fetch\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"hadoop\",\n-                            \"ingest\",\n-                            \"source\"\n+                            \"client\",\n+                            \"hbase\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.GetHDFS\",\n-                        \"typeDescription\": \"Fetch files from Hadoop Distributed File System (HDFS) into FlowFiles. This Processor will delete the file from HDFS after fetching it.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file that was read from HDFS.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the relative path of the file's directory on HDFS. For example, if the Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"./\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"abc/1/2/3\\\".\",\n-                                \"name\": \"path\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.hbase.HBase_2_ClientService\",\n+                        \"typeDescription\": \"Implementation of HBaseClientService using the HBase 2.1.1 client. This service can be configured by providing a comma-separated list of configuration files, or by specifying values for the other properties. If configuration files are provided, they will be loaded first, and the values of the additional properties will override the values from the configuration files. In addition, any user defined properties on the processor will also be passed to the HBase configuration.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n+                        \"artifact\": \"nifi-hbase_2-client-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n+                            \"hb-lu-authorizations\": {\n+                                \"description\": \"The list of authorization tokens to be used with cell visibility if it is enabled. These will be used to override the default authorization list for the user accessing HBase.\",\n+                                \"displayName\": \"Authorizations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n+                                \"name\": \"hb-lu-authorizations\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n+                            \"hb-lu-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set used to decode bytes retrieved from HBase.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hb-lu-charset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"hb-lu-return-cols\": {\n+                                \"description\": \"A comma-separated list of \\\\\\\"<colFamily>:<colQualifier>\\\\\\\" pairs to return when scanning. To return all columns for a given family, leave off the qualifier such as \\\\\\\"<colFamily1>,<colFamily2>\\\\\\\".\",\n+                                \"displayName\": \"Columns\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hb-lu-return-cols\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"hb-lu-table-name\": {\n+                                \"description\": \"The name of the table where look ups will be run.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n+                                \"name\": \"hb-lu-table-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n+                            \"hbase-client-service\": {\n+                                \"description\": \"Specifies the HBase Client Controller Service to use for accessing HBase.\",\n+                                \"displayName\": \"HBase Client Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gethdfsfileinfo-batch-size\": {\n-                                \"description\": \"Number of records to put into an output flowfile when 'Destination' is set to 'Content' and 'Group Results' is set to 'None'\",\n-                                \"displayName\": \"Batch Size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hbase-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"hbase\",\n+                            \"lookup\",\n+                            \"record\",\n+                            \"service\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.hbase.HBase_2_RecordLookupService\",\n+                        \"typeDescription\": \"A lookup service that retrieves one or more columns from HBase and returns them as a record. The lookup coordinates must contain 'rowKey' which will be the HBase row id.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-smb-smbj-client-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-smbj-client-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"domain\": {\n+                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n+                                \"displayName\": \"Domain\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gethdfsfileinfo-batch-size\",\n+                                \"name\": \"domain\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gethdfsfileinfo-destination\": {\n+                            \"enable-dfs\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Details of given HDFS object will be stored in attributes of flowfile. WARNING: In case when scan finds thousands or millions of objects, having huge values in attribute could impact flow file repo and GC/heap usage. Use content destination for such cases.\",\n-                                        \"displayName\": \"Attributes\",\n-                                        \"value\": \"gethdfsfileinfo-dest-attr\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Details of given HDFS object will be stored in a content in JSON format\",\n-                                        \"displayName\": \"Content\",\n-                                        \"value\": \"gethdfsfileinfo-dest-content\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"gethdfsfileinfo-dest-content\",\n-                                \"description\": \"Sets the destination for the resutls. When set to 'Content', attributes of flowfile won't be used for storing results. \",\n-                                \"displayName\": \"Destination\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n+                                \"displayName\": \"Enable DFS\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gethdfsfileinfo-destination\",\n+                                \"name\": \"enable-dfs\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gethdfsfileinfo-dir-filter\": {\n-                                \"description\": \"Regex. Only directories whose names match the given regular expression will be picked up. If not provided, any filter would be apply (performance considerations).\",\n-                                \"displayName\": \"Directory Filter\",\n+                            \"hostname\": {\n+                                \"description\": \"The network host of the SMB file server.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gethdfsfileinfo-dir-filter\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hostname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gethdfsfileinfo-file-exclude-filter\": {\n-                                \"description\": \"Regex. Files whose names match the given regular expression will not be picked up. If not provided, any filter won't be apply (performance considerations).\",\n-                                \"displayName\": \"Exclude Files\",\n+                            \"password\": {\n+                                \"description\": \"The password used for authentication.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gethdfsfileinfo-file-exclude-filter\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"gethdfsfileinfo-file-filter\": {\n-                                \"description\": \"Regex. Only files whose names match the given regular expression will be picked up. If not provided, any filter would be apply (performance considerations).\",\n-                                \"displayName\": \"File Filter\",\n+                            \"port\": {\n+                                \"defaultValue\": \"445\",\n+                                \"description\": \"Port to use for connection.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gethdfsfileinfo-file-filter\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gethdfsfileinfo-full-path\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"A directory to start listing from, or a file's full path.\",\n-                                \"displayName\": \"Full path\",\n+                            \"share\": {\n+                                \"description\": \"The network share to which files should be listed from. This is the \\\"first folder\\\"after the hostname: smb://hostname:port/[share]/dir1/dir2\",\n+                                \"displayName\": \"Share\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gethdfsfileinfo-full-path\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"share\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gethdfsfileinfo-group\": {\n+                            \"smb-dialect\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Group all results into a single flowfile.\",\n-                                        \"displayName\": \"All\",\n-                                        \"value\": \"gethdfsfileinfo-group-all\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AUTO\",\n+                                        \"value\": \"AUTO\"\n                                     },\n                                     {\n-                                        \"description\": \"Group HDFS objects by their parent directories only. Processor will generate flowfile for each directory (if recursive). If 'Recurse Subdirectories' property set to 'false', then will have the same effect as 'All'\",\n-                                        \"displayName\": \"Parent Directory\",\n-                                        \"value\": \"gethdfsfileinfo-group-parent-dir\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 2.0.2\",\n+                                        \"value\": \"SMB_2_0_2\"\n                                     },\n                                     {\n-                                        \"description\": \"Don't group results. Generate flowfile per each HDFS object.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"gethdfsfileinfo-group-none\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 2.1\",\n+                                        \"value\": \"SMB_2_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.0\",\n+                                        \"value\": \"SMB_3_0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.0.2\",\n+                                        \"value\": \"SMB_3_0_2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.1.1\",\n+                                        \"value\": \"SMB_3_1_1\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"gethdfsfileinfo-group-all\",\n-                                \"description\": \"Groups HDFS objects\",\n-                                \"displayName\": \"Group Results\",\n+                                \"defaultValue\": \"AUTO\",\n+                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n+                                \"displayName\": \"SMB Dialect\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gethdfsfileinfo-group\",\n+                                \"name\": \"smb-dialect\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gethdfsfileinfo-ignore-dotted-dirs\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, directories whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Directories\",\n+                            \"timeout\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"Timeout for read and write operations.\",\n+                                \"displayName\": \"Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gethdfsfileinfo-ignore-dotted-dirs\",\n+                                \"name\": \"timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gethdfsfileinfo-ignore-dotted-files\": {\n+                            \"use-encryption\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n+                                \"displayName\": \"Use Encryption\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gethdfsfileinfo-ignore-dotted-files\",\n+                                \"name\": \"use-encryption\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gethdfsfileinfo-recurse-subdirs\": {\n+                            \"username\": {\n+                                \"defaultValue\": \"Guest\",\n+                                \"description\": \"The username used for authentication.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-smb-client-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"samba, smb, cifs, files\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.smb.SmbjClientProviderService\",\n+                        \"typeDescription\": \"Provides access to SMB Sessions with shared authentication credentials.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-redis-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-parquet-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"avro-read-compatibility\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subdirectories of the HDFS directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n+                                \"description\": \"Specifies the value for 'parquet.avro.compatible' in the underlying Parquet library\",\n+                                \"displayName\": \"Avro Read Compatibility\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gethdfsfileinfo-recurse-subdirs\",\n+                                \"name\": \"avro-read-compatibility\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully generated FlowFiles are transferred to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If no objects are found, original FlowFile are transferred to this relationship\",\n-                                \"name\": \"not found\"\n-                            },\n-                            {\n-                                \"description\": \"All failed attempts to access HDFS will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Original FlowFiles are transferred to this relationship\",\n-                                \"name\": \"original\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"HCFS\",\n-                            \"HDFS\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"hadoop\",\n-                            \"ingest\",\n-                            \"list\",\n-                            \"source\"\n+                            \"parquet\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"row\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.GetHDFSFileInfo\",\n-                        \"typeDescription\": \"Retrieves a listing of files and directories from HDFS. This processor creates a FlowFile(s) that represents the HDFS file/dir with relevant information. Main purpose of this processor to provide functionality similar to HDFS Client, i.e. count, du, ls, test, etc. Unlike ListHDFS, this processor is stateless, supports incoming connections and provides information on a dir level. \",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file/dir found on HDFS.\",\n-                                \"name\": \"hdfs.objectName\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the absolute path of the object's parent directory on HDFS. For example, if an object is a directory 'foo', under directory '/bar' then 'hdfs.objectName' will have value 'foo', and 'hdfs.path' will be '/bar'\",\n-                                \"name\": \"hdfs.path\"\n-                            },\n-                            {\n-                                \"description\": \"The type of an object. Possible values: directory, file, link\",\n-                                \"name\": \"hdfs.type\"\n-                            },\n-                            {\n-                                \"description\": \"The user that owns the object in HDFS\",\n-                                \"name\": \"hdfs.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The group that owns the object in HDFS\",\n-                                \"name\": \"hdfs.group\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the object in HDFS was last modified, as milliseconds since midnight Jan 1, 1970 UTC\",\n-                                \"name\": \"hdfs.lastModified\"\n-                            },\n-                            {\n-                                \"description\": \"In case of files: The number of bytes in the file in HDFS.  In case of dirs: Retuns storage space consumed by directory. \",\n-                                \"name\": \"hdfs.length\"\n-                            },\n-                            {\n-                                \"description\": \"In case of type='directory' will represent total count of files under this dir. Won't be populated to other types of HDFS objects. \",\n-                                \"name\": \"hdfs.count.files\"\n-                            },\n-                            {\n-                                \"description\": \"In case of type='directory' will represent total count of directories under this dir (including itself). Won't be populated to other types of HDFS objects. \",\n-                                \"name\": \"hdfs.count.dirs\"\n-                            },\n-                            {\n-                                \"description\": \"The number of HDFS replicas for the file\",\n-                                \"name\": \"hdfs.replication\"\n-                            },\n-                            {\n-                                \"description\": \"The permissions for the object in HDFS. This is formatted as 3 characters for the owner, 3 for the group, and 3 for other users. For example rw-rw-r--\",\n-                                \"name\": \"hdfs.permissions\"\n-                            },\n-                            {\n-                                \"description\": \"The status contains comma separated list of file/dir paths, which couldn't be listed/accessed. Status won't be set if no errors occured.\",\n-                                \"name\": \"hdfs.status\"\n-                            },\n-                            {\n-                                \"description\": \"When destination is 'attribute', will be populated with full tree of HDFS directory in JSON format.WARNING: In case when scan finds thousands or millions of objects, having huge values in attribute could impact flow file repo and GC/heap usage. Use content destination for such cases\",\n-                                \"name\": \"hdfs.full.tree\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.parquet.ParquetReader\",\n+                        \"typeDescription\": \"Parses Parquet data and returns each Parquet record as a separate Record object. The schema will come from the Parquet data itself.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n+                        \"artifact\": \"nifi-parquet-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"read distributed filesystem\"\n-                            },\n-                            {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"write distributed filesystem\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of files to pull in each iteration, based on run schedule.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Compression codec\": {\n+                            \"Schema Write Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No compression\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Default ZLIB compression\",\n-                                        \"displayName\": \"DEFAULT\",\n-                                        \"value\": \"DEFAULT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BZIP compression\",\n-                                        \"displayName\": \"BZIP\",\n-                                        \"value\": \"BZIP\"\n+                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n+                                        \"displayName\": \"Do Not Write Schema\",\n+                                        \"value\": \"no-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"GZIP compression\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n+                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n+                                        \"displayName\": \"Set 'schema.name' Attribute\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"LZ4 compression\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n+                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n+                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n+                                        \"value\": \"full-schema-attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n+                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n                                     },\n                                     {\n-                                        \"description\": \"Snappy compression\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n-                                        \"displayName\": \"AUTOMATIC\",\n-                                        \"value\": \"AUTOMATIC\"\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Schema Registry Reference\",\n+                                        \"value\": \"confluent-encoded\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Compression codec\",\n+                                \"defaultValue\": \"no-schema\",\n+                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n+                                \"displayName\": \"Schema Write Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression codec\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Directory\": {\n-                                \"description\": \"The HDFS directory from which files should be read\",\n-                                \"displayName\": \"Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n+                                \"name\": \"Schema Write Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"A Java Regular Expression for filtering Filenames; if a filter is supplied then only files whose names match that Regular Expression will be fetched, otherwise all files will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Filter Match Name Only\": {\n+                            \"avro-add-list-element-records\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"If true then File Filter Regex will match on just the filename, otherwise subdirectory names will be included with filename in the regex comparison\",\n-                                \"displayName\": \"Filter Match Name Only\",\n+                                \"description\": \"Specifies the value for 'parquet.avro.add-list-element-records' in the underlying Parquet library\",\n+                                \"displayName\": \"Avro Add List Element Records\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Filter Match Name Only\",\n+                                \"name\": \"avro-add-list-element-records\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Content\": {\n+                            \"avro-write-old-list-structure\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"VALUE ONLY\",\n-                                        \"value\": \"VALUE ONLY\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"KEY VALUE PAIR\",\n-                                        \"value\": \"KEY VALUE PAIR\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"VALUE ONLY\",\n-                                \"description\": \"Indicate if the content is to be both the key and value of the Sequence File, or just the value.\",\n-                                \"displayName\": \"FlowFile Content\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies the value for 'parquet.avro.write-old-list-structure' in the underlying Parquet library\",\n+                                \"displayName\": \"Avro Write Old List Structure\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Content\",\n+                                \"name\": \"avro-write-old-list-structure\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"IO Buffer Size\": {\n-                                \"description\": \"Amount of memory to use to buffer file contents during IO. This overrides the Hadoop Configuration\",\n-                                \"displayName\": \"IO Buffer Size\",\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"IO Buffer Size\",\n-                                \"required\": false,\n+                                \"name\": \"cache-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Dotted Files\": {\n+                            \"compression-type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"UNCOMPRESSED\",\n+                                        \"value\": \"UNCOMPRESSED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BROTLI\",\n+                                        \"value\": \"BROTLI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ZSTD\",\n+                                        \"value\": \"ZSTD\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZ4_RAW\",\n+                                        \"value\": \"LZ4_RAW\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n+                                \"defaultValue\": \"UNCOMPRESSED\",\n+                                \"description\": \"The type of compression for the file being written.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n+                                \"name\": \"compression-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Source File\": {\n+                            \"dictionary-page-size\": {\n+                                \"description\": \"The dictionary page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Dictionary Page Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dictionary-page-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"enable-dictionary-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Determines whether to delete the file from HDFS after it has been successfully transferred. If true, the file will be fetched repeatedly. This is intended for testing only.\",\n-                                \"displayName\": \"Keep Source File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Source File\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (based on last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                                \"description\": \"Specifies whether dictionary encoding should be enabled for the Parquet writer\",\n+                                \"displayName\": \"Enable Dictionary Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n+                                \"name\": \"enable-dictionary-encoding\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (based on last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Polling Interval\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Indicates how long to wait between performing directory listings\",\n-                                \"displayName\": \"Polling Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Recurse Subdirectories\": {\n+                            \"enable-validation\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to pull files from subdirectories of the HDFS directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Recurse Subdirectories\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                                \"description\": \"Specifies whether validation should be enabled for the Parquet writer\",\n+                                \"displayName\": \"Enable Validation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"name\": \"enable-validation\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All files retrieved from HDFS are transferred to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"HCFS\",\n-                            \"HDFS\",\n-                            \"fetch\",\n-                            \"get\",\n-                            \"hadoop\",\n-                            \"ingest\",\n-                            \"sequence file\",\n-                            \"source\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.GetHDFSSequenceFile\",\n-                        \"typeDescription\": \"Fetch sequence files from Hadoop Distributed File System (HDFS) into FlowFiles\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file that was read from HDFS.\",\n-                                \"name\": \"filename\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The path is set to the relative path of the file's directory on HDFS. For example, if the Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"./\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"abc/1/2/3\\\".\",\n-                                \"name\": \"path\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n-                        \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n+                            \"int96-fields\": {\n+                                \"description\": \"List of fields with full path that should be treated as INT96 timestamps.\",\n+                                \"displayName\": \"INT96 Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n+                                \"name\": \"int96-fields\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Directory\": {\n-                                \"description\": \"The HDFS directory from which files should be read\",\n-                                \"displayName\": \"Directory\",\n+                            \"max-padding-size\": {\n+                                \"description\": \"The maximum amount of padding that will be used to align row groups with blocks in the underlying filesystem. If the underlying filesystem is not a block filesystem like HDFS, this has no effect. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Max Padding Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"File Filter\": {\n-                                \"defaultValue\": \"[^\\\\.].*\",\n-                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n-                                \"displayName\": \"File Filter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n+                                \"name\": \"max-padding-size\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"page-size\": {\n+                                \"description\": \"The page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Page Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"page-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n+                            \"row-group-size\": {\n+                                \"description\": \"The row group size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Row Group Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"row-group-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Recurse Subdirectories\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n+                                        \"displayName\": \"Inherit Record Schema\",\n+                                        \"value\": \"inherit-record-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subdirectories of the HDFS directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n+                                \"defaultValue\": \"inherit-record-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Recurse Subdirectories\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-filter-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Filtering will be applied to the names of directories and files.  If Recurse Subdirectories is set to true, only subdirectories with a matching name will be searched for files that match the regular expression defined in File Filter.\",\n-                                        \"displayName\": \"Directories and Files\",\n-                                        \"value\": \"filter-mode-directories-and-files\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Filtering will only be applied to the names of files.  If Recurse Subdirectories is set to true, the entire subdirectory tree will be searched for files that match the regular expression defined in File Filter.\",\n-                                        \"displayName\": \"Files Only\",\n-                                        \"value\": \"filter-mode-files-only\"\n-                                    },\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Filtering will be applied by evaluating the regular expression defined in File Filter against the full path of files with and without the scheme and authority.  If Recurse Subdirectories is set to true, the entire subdirectory tree will be searched for files in which the full path of the file matches the regular expression defined in File Filter.  See 'Additional Details' for more information.\",\n-                                        \"displayName\": \"Full Path\",\n-                                        \"value\": \"filter-mode-full-path\"\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"filter-mode-directories-and-files\",\n-                                \"description\": \"Determines how the regular expression in  File Filter will be used when retrieving listings.\",\n-                                \"displayName\": \"File Filter Mode\",\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-filter-mode\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"schema-cache\": {\n+                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n+                                \"displayName\": \"Schema Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"name\": \"schema-cache\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-protocol-version\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n+                                        \"propertyName\": \"Schema Write Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n+                                \"displayName\": \"Schema Protocol Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-protocol-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"maximum-file-age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (based on last modification date) will be ignored. Minimum value is 100ms.\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maximum-file-age\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"minimum-file-age\": {\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (based on last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"minimum-file-age\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"writer-version\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PARQUET_1_0\",\n+                                        \"value\": \"PARQUET_1_0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PARQUET_2_0\",\n+                                        \"value\": \"PARQUET_2_0\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version used by Parquet writer\",\n+                                \"displayName\": \"Writer Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"writer-version\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of HDFS files, the latest timestamp of all the files listed is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run, without having to store all of the actual filenames/paths which could lead to performance problems. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles are transferred to this relationship\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"HCFS\",\n-                            \"HDFS\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"hadoop\",\n-                            \"ingest\",\n-                            \"list\",\n-                            \"source\"\n+                            \"parquet\",\n+                            \"record\",\n+                            \"recordset\",\n+                            \"result\",\n+                            \"row\",\n+                            \"serializer\",\n+                            \"set\",\n+                            \"writer\"\n                         ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.ListHDFS\",\n-                        \"typeDescription\": \"Retrieves a listing of files from HDFS. For each file that is listed in HDFS, this processor creates a FlowFile that represents the HDFS file to be fetched in conjunction with FetchHDFS. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. Unlike GetHDFS, this Processor does not delete any data from HDFS.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file that was read from HDFS.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the absolute path of the file's directory on HDFS. For example, if the Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"./\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"/tmp/abc/1/2/3\\\".\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The user that owns the file in HDFS\",\n-                                \"name\": \"hdfs.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The group that owns the file in HDFS\",\n-                                \"name\": \"hdfs.group\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file in HDFS was last modified, as milliseconds since midnight Jan 1, 1970 UTC\",\n-                                \"name\": \"hdfs.lastModified\"\n-                            },\n-                            {\n-                                \"description\": \"The number of bytes in the file in HDFS\",\n-                                \"name\": \"hdfs.length\"\n-                            },\n-                            {\n-                                \"description\": \"The number of HDFS replicas for hte file\",\n-                                \"name\": \"hdfs.replication\"\n-                            },\n-                            {\n-                                \"description\": \"The permissions for the file in HDFS. This is formatted as 3 characters for the owner, 3 for the group, and 3 for other users. For example rw-rw-r--\",\n-                                \"name\": \"hdfs.permissions\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.parquet.ParquetRecordSetWriter\",\n+                        \"typeDescription\": \"Writes the contents of a RecordSet in Parquet format.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n+                        \"artifact\": \"nifi-parquet-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -39352,330 +36324,115 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"read distributed filesystem\"\n-                            },\n-                            {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"write distributed filesystem\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Conflict Resolution Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Replaces the existing file if any.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Failed rename operation stops processing and routes to success.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Failing to rename a file routes to failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"A Java Regular Expression for filtering Filenames; if a filter is supplied then only files whose names match that Regular Expression will be fetched, otherwise all files will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"HDFS Operation\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"move\",\n-                                        \"value\": \"move\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"copy\",\n-                                        \"value\": \"copy\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"move\",\n-                                \"description\": \"The operation that will be performed on the source file\",\n-                                \"displayName\": \"HDFS Operation\",\n+                            \"Records Per Split\": {\n+                                \"description\": \"Specifies how many records should be covered in each FlowFile\",\n+                                \"displayName\": \"Records Per Split\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HDFS Operation\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Records Per Split\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore Dotted Files\": {\n+                            \"Zero Content Output\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Input Directory or File\": {\n-                                \"defaultValue\": \"${path}\",\n-                                \"description\": \"The HDFS directory from which files should be read, or a single file to read.\",\n-                                \"displayName\": \"Input Directory or File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Input Directory or File\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to do, or do not copy the content of input FlowFile.\",\n+                                \"displayName\": \"Zero Content Output\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Output Directory\": {\n-                                \"description\": \"The HDFS directory where the files will be moved to\",\n-                                \"displayName\": \"Output Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Output Directory\",\n+                                \"name\": \"Zero Content Output\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Remote Group\": {\n-                                \"description\": \"Changes the group of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change group\",\n-                                \"displayName\": \"Remote Group\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Group\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Owner\": {\n-                                \"description\": \"Changes the owner of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change owner\",\n-                                \"displayName\": \"Remote Owner\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Owner\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"The name of the file written to HDFS comes from the value of this attribute.\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"Gets the index of first record in the input.\",\n+                                \"name\": \"record.offset\"\n+                            },\n+                            {\n+                                \"description\": \"Gets the number of records in the input.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"Gets the start offset of the selected row group in the parquet file.\",\n+                                \"name\": \"parquet.file.range.startOffset\"\n+                            },\n+                            {\n+                                \"description\": \"Gets the end offset of the selected row group in the parquet file.\",\n+                                \"name\": \"parquet.file.range.endOffset\"\n                             }\n                         ],\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully renamed on HDFS are transferred to this relationship\",\n+                                \"description\": \"FlowFiles, with special attributes that represent a chunk of the input file.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that could not be renamed on HDFS are transferred to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"HCFS\",\n-                            \"HDFS\",\n-                            \"filesystem\",\n-                            \"hadoop\",\n-                            \"move\",\n-                            \"moveHDFS\",\n-                            \"put\"\n+                            \"break apart\",\n+                            \"cluster\",\n+                            \"efficient processing\",\n+                            \"load balance\",\n+                            \"parquet\",\n+                            \"partition\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.MoveHDFS\",\n-                        \"typeDescription\": \"Rename existing files or a directory of files (non-recursive) on Hadoop Distributed File System (HDFS).\",\n+                        \"type\": \"org.apache.nifi.processors.parquet.CalculateParquetOffsets\",\n+                        \"typeDescription\": \"The processor generates N flow files from the input, and adds attributes with the offsets required to read the group of rows in the FlowFile's content. Can be used to increase the overall efficiency of processing extremely large Parquet files.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file written to HDFS is stored in this attribute.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The absolute path to the file on HDFS is stored in this attribute.\",\n-                                \"name\": \"absolute.hdfs.path\"\n+                                \"description\": \"Sets the index of first record of the parquet file.\",\n+                                \"name\": \"record.offset\"\n                             },\n                             {\n-                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n-                                \"name\": \"hadoop.file.url\"\n+                                \"description\": \"Sets the number of records in the parquet file.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-parquet-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -39683,494 +36440,357 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"write distributed filesystem\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Append Mode\": {\n+                            \"Zero Content Output\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DEFAULT\",\n-                                        \"value\": \"DEFAULT\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AVRO\",\n-                                        \"value\": \"AVRO\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DEFAULT\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"append\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Conflict Resolution Strategy\",\n-                                        \"propertyName\": \"Conflict Resolution Strategy\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Defines the append strategy to use when the Conflict Resolution Strategy is set to 'append'.\",\n-                                \"displayName\": \"Append Mode\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to do, or do not copy the content of input FlowFile.\",\n+                                \"displayName\": \"Zero Content Output\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Append Mode\",\n+                                \"name\": \"Zero Content Output\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles, with special attributes that represent a chunk of the input file.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"break apart\",\n+                            \"cluster\",\n+                            \"efficient processing\",\n+                            \"load balance\",\n+                            \"parquet\",\n+                            \"partition\",\n+                            \"split\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.parquet.CalculateParquetRowGroupOffsets\",\n+                        \"typeDescription\": \"The processor generates one FlowFile from each Row Group of the input, and adds attributes with the offsets required to read the group of rows in the FlowFile's content. Can be used to increase the overall efficiency of processing extremely large Parquet files.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the start offset of the selected row group in the parquet file.\",\n+                                \"name\": \"parquet.file.range.startOffset\"\n                             },\n-                            \"Block Size\": {\n-                                \"description\": \"Size of each block as written to HDFS. This overrides the Hadoop Configuration\",\n-                                \"displayName\": \"Block Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Block Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Sets the end offset of the selected row group in the parquet file.\",\n+                                \"name\": \"parquet.file.range.endOffset\"\n                             },\n-                            \"Compression codec\": {\n+                            {\n+                                \"description\": \"Sets the count of records in the selected row group.\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"compression-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No compression\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Default ZLIB compression\",\n-                                        \"displayName\": \"DEFAULT\",\n-                                        \"value\": \"DEFAULT\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UNCOMPRESSED\",\n+                                        \"value\": \"UNCOMPRESSED\"\n                                     },\n                                     {\n-                                        \"description\": \"BZIP compression\",\n-                                        \"displayName\": \"BZIP\",\n-                                        \"value\": \"BZIP\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n                                     },\n                                     {\n-                                        \"description\": \"GZIP compression\",\n+                                        \"description\": \"\",\n                                         \"displayName\": \"GZIP\",\n                                         \"value\": \"GZIP\"\n                                     },\n                                     {\n-                                        \"description\": \"LZ4 compression\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n+                                        \"description\": \"\",\n                                         \"displayName\": \"LZO\",\n                                         \"value\": \"LZO\"\n                                     },\n                                     {\n-                                        \"description\": \"Snappy compression\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n-                                        \"displayName\": \"AUTOMATIC\",\n-                                        \"value\": \"AUTOMATIC\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Compression codec\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression codec\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Conflict Resolution Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Replaces the existing file if any.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BROTLI\",\n+                                        \"value\": \"BROTLI\"\n                                     },\n                                     {\n-                                        \"description\": \"Ignores the flow file and routes it to success.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n                                     },\n                                     {\n-                                        \"description\": \"Penalizes the flow file and routes it to failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ZSTD\",\n+                                        \"value\": \"ZSTD\"\n                                     },\n                                     {\n-                                        \"description\": \"Appends to the existing file if any, creates a new file otherwise.\",\n-                                        \"displayName\": \"append\",\n-                                        \"value\": \"append\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZ4_RAW\",\n+                                        \"value\": \"LZ4_RAW\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"UNCOMPRESSED\",\n+                                \"description\": \"The type of compression for the file being written.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution Strategy\",\n+                                \"name\": \"compression-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Directory\": {\n-                                \"description\": \"The parent HDFS directory to which files should be written. The directory will be created if it doesn't exist.\",\n-                                \"displayName\": \"Directory\",\n+                            \"dictionary-page-size\": {\n+                                \"description\": \"The dictionary page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Dictionary Page Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"IO Buffer Size\": {\n-                                \"description\": \"Amount of memory to use to buffer file contents during IO. This overrides the Hadoop Configuration\",\n-                                \"displayName\": \"IO Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"IO Buffer Size\",\n+                                \"name\": \"dictionary-page-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Locality\": {\n+                            \"enable-dictionary-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Directs the HDFS system to ignore locality rules so that data is distributed randomly throughout the cluster\",\n-                                \"displayName\": \"Ignore Locality\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Locality\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                                \"description\": \"Specifies whether dictionary encoding should be enabled for the Parquet writer\",\n+                                \"displayName\": \"Enable Dictionary Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n+                                \"name\": \"enable-dictionary-encoding\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Permissions umask\": {\n-                                \"description\": \"A umask represented as an octal number which determines the permissions of files written to HDFS. This overrides the Hadoop property \\\"fs.permissions.umask-mode\\\".  If this property and \\\"fs.permissions.umask-mode\\\" are undefined, the Hadoop default \\\"022\\\" will be used.  If the PutHDFS target folder has a default ACL defined, the umask property is ignored by HDFS.\",\n-                                \"displayName\": \"Permissions umask\",\n+                            \"enable-validation\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether validation should be enabled for the Parquet writer\",\n+                                \"displayName\": \"Enable Validation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Permissions umask\",\n+                                \"name\": \"enable-validation\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Group\": {\n-                                \"description\": \"Changes the group of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change group\",\n-                                \"displayName\": \"Remote Group\",\n+                            \"max-padding-size\": {\n+                                \"description\": \"The maximum amount of padding that will be used to align row groups with blocks in the underlying filesystem. If the underlying filesystem is not a block filesystem like HDFS, this has no effect. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Max Padding Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Group\",\n+                                \"name\": \"max-padding-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Owner\": {\n-                                \"description\": \"Changes the owner of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change owner\",\n-                                \"displayName\": \"Remote Owner\",\n+                            \"page-size\": {\n+                                \"description\": \"The page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Page Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Owner\",\n+                                \"name\": \"page-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Replication\": {\n-                                \"description\": \"Number of times that HDFS will replicate each file. This overrides the Hadoop Configuration\",\n-                                \"displayName\": \"Replication\",\n+                            \"row-group-size\": {\n+                                \"description\": \"The row group size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Row Group Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Replication\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"row-group-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"writing-strategy\": {\n+                            \"writer-version\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The processor writes FlowFile data into a temporary file and renames it after completion. This prevents other processes from reading partially written files.\",\n-                                        \"displayName\": \"Write and rename\",\n-                                        \"value\": \"writeAndRename\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PARQUET_1_0\",\n+                                        \"value\": \"PARQUET_1_0\"\n                                     },\n                                     {\n-                                        \"description\": \"The processor writes FlowFile data directly to the destination file. In some cases this might cause reading partially written files.\",\n-                                        \"displayName\": \"Simple write\",\n-                                        \"value\": \"simpleWrite\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PARQUET_2_0\",\n+                                        \"value\": \"PARQUET_2_0\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"writeAndRename\",\n-                                \"description\": \"Defines the approach for writing the FlowFile data.\",\n-                                \"displayName\": \"Writing Strategy\",\n+                                \"description\": \"Specifies the version used by Parquet writer\",\n+                                \"displayName\": \"Writer Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"writing-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"writer-version\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file written to HDFS comes from the value of this attribute.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.GetHDFS\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to HDFS are transferred to this relationship\",\n+                                \"description\": \"Parquet file that was converted successfully from Avro\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Files that could not be written to HDFS for some reason are transferred to this relationship\",\n+                                \"description\": \"Avro content that could not be processed\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"HCFS\",\n-                            \"HDFS\",\n-                            \"copy\",\n-                            \"filesystem\",\n-                            \"hadoop\",\n-                            \"put\"\n+                            \"avro\",\n+                            \"convert\",\n+                            \"parquet\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.PutHDFS\",\n-                        \"typeDescription\": \"Write FlowFile data to Hadoop Distributed File System (HDFS)\",\n+                        \"type\": \"org.apache.nifi.processors.parquet.ConvertAvroToParquet\",\n+                        \"typeDescription\": \"Converts Avro records into Parquet file format. The incoming FlowFile should be a valid avro file. If an incoming FlowFile does not contain any records, an empty parquet file is the output. NOTE: Many Avro datatypes (collections, primitives, and unions of primitives, e.g.) can be converted to parquet, but unions of collections and other complex datatypes may not be able to be converted to Parquet.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file written to HDFS is stored in this attribute.\",\n+                                \"description\": \"Sets the filename to the existing filename with the extension replaced by / added to by .parquet\",\n                                 \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The absolute path to the file on HDFS is stored in this attribute.\",\n-                                \"name\": \"absolute.hdfs.path\"\n-                            },\n-                            {\n-                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n-                                \"name\": \"hadoop.file.url\"\n-                            },\n-                            {\n-                                \"description\": \"The result(true/false) indicates if the folder is created by the processor.\",\n-                                \"name\": \"target.dir.created\"\n+                                \"description\": \"Sets the number of records in the parquet file.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n+                        \"artifact\": \"nifi-parquet-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"defaultYieldDuration\": \"100 ms\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"read distributed filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n                             \"Additional Classpath Resources\": {\n                                 \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n                                 \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Additional Classpath Resources\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Event Types to Filter On\": {\n-                                \"defaultValue\": \"append, close, create, metadata, rename, unlink\",\n-                                \"description\": \"A comma-separated list of event types to process. Valid event types are: append, close, create, metadata, rename, and unlink. Case does not matter.\",\n-                                \"displayName\": \"Event Types to Filter On\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Types to Filter On\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"HDFS Path to Watch\": {\n-                                \"description\": \"The HDFS path to get event notifications for. This property accepts both expression language and regular expressions. This will be evaluated during the OnScheduled phase.\",\n-                                \"displayName\": \"HDFS Path to Watch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"HDFS Path to Watch\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n                             \"Hadoop Configuration Resources\": {\n                                 \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n                                 \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"Hadoop Configuration Resources\",\n@@ -40179,48 +36799,14 @@\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"IOException Retries During Event Polling\": {\n-                                \"defaultValue\": \"3\",\n-                                \"description\": \"According to the HDFS admin API for event polling it is good to retry at least a few times. This number defines how many times the poll will be retried if it throws an IOException.\",\n-                                \"displayName\": \"IOException Retries During Event Polling\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"IOException Retries During Event Polling\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore Hidden Files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true and the final component of the path associated with a given event starts with a '.' then that event will not be processed.\",\n-                                \"displayName\": \"Ignore Hidden Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Hidden Files\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n                             \"Kerberos Keytab\": {\n                                 \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n                                 \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"Kerberos Keytab\",\n@@ -40260,22 +36846,22 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"Kerberos Relogin Period\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Poll Duration\": {\n-                                \"defaultValue\": \"1 second\",\n-                                \"description\": \"The time before the polling method returns with the next batch of events if they exist. It may exceed this amount of time by up to the time required for an RPC to the NameNode.\",\n-                                \"displayName\": \"Poll Duration\",\n+                            \"filename\": {\n+                                \"defaultValue\": \"${path}/${filename}\",\n+                                \"description\": \"The name of the file to retrieve\",\n+                                \"displayName\": \"Filename\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Poll Duration\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"filename\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"kerberos-credentials-service\": {\n                                 \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n                                 \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n@@ -40302,3606 +36888,627 @@\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"The service for writing records to the FlowFile content\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Gets the index of first record in the input.\",\n+                                \"name\": \"record.offset\"\n+                            },\n+                            {\n+                                \"description\": \"Gets the number of records in the input.\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n+                            \"org.apache.nifi.processors.parquet.PutParquet\"\n                         ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The last used transaction id is stored. This is used \",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A flow file with updated information about a specific event will be sent to this relationship.\",\n+                                \"description\": \"FlowFiles will be routed to this relationship if the content of the file cannot be retrieved, but might be able to be in the future if tried again. This generally indicates that the Fetch should be tried again.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles will be routed to this relationship once they have been updated with the content of the file\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles will be routed to this relationship if the content of the file cannot be retrieved and trying again will likely not be helpful. This would occur, for instance, if the file is not found or if there is a permissions issue\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"events\",\n-                            \"filesystem\",\n+                            \"HDFS\",\n+                            \"fetch\",\n+                            \"get\",\n                             \"hadoop\",\n-                            \"inotify\",\n-                            \"notifications\"\n+                            \"ingest\",\n+                            \"parquet\",\n+                            \"record\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.inotify.GetHDFSEvents\",\n-                        \"typeDescription\": \"This processor polls the notification events provided by the HdfsAdmin API. Since this uses the HdfsAdmin APIs it is required to run as an HDFS super user. Currently there are six types of events (append, close, create, metadata, rename, and unlink). Please see org.apache.hadoop.hdfs.inotify.Event documentation for full explanations of each event. This processor will poll for new events based on a defined duration. For each event received a new flow file will be created with the expected attributes and the event itself serialized to JSON and written to the flow file's content. For example, if event.type is APPEND then the content of the flow file will contain a JSON file containing the information about the append event. If successful the flow files are sent to the 'success' relationship. Be careful of where the generated flow files are stored. If the flow files are stored in one of processor's watch directories there will be a never ending flow of events. It is also important to be aware that this processor must consume all events. The filtering must happen within the processor. This is because the HDFS admin's event notifications API does not have filtering.\",\n+                        \"type\": \"org.apache.nifi.processors.parquet.FetchParquet\",\n+                        \"typeDescription\": \"Reads from a given Parquet file and writes records to the content of the flow file using the selected record writer. The original Parquet file will remain unchanged, and the content of the flow file will be replaced with records of the selected type. This processor can be used with ListHDFS or ListFile to obtain a listing of files to fetch.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This is always application/json.\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"When a FlowFile is routed to 'failure', this attribute is added indicating why the file could not be fetched from the given filesystem.\",\n+                                \"name\": \"fetch.failure.reason\"\n                             },\n                             {\n-                                \"description\": \"This will specify the specific HDFS notification event type. Currently there are six types of events (append, close, create, metadata, rename, and unlink).\",\n-                                \"name\": \"hdfs.inotify.event.type\"\n+                                \"description\": \"The number of records in the resulting flow file\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The specific path that the event is tied to.\",\n-                                \"name\": \"hdfs.inotify.event.path\"\n+                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n+                                \"name\": \"hadoop.file.url\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-splunk-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"artifact\": \"nifi-parquet-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"defaultYieldDuration\": \"100 ms\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to write any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"write distributed filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Application\": {\n-                                \"description\": \"The Splunk Application to query.\",\n-                                \"displayName\": \"Application\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for connection to the Splunk server.\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Earliest Time\": {\n-                                \"description\": \"The value to use for the earliest time when querying. Only used with a Time Range Strategy of Provided. See Splunk's documentation on Search Time Modifiers for guidance in populating this field.\",\n-                                \"displayName\": \"Earliest Time\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Earliest Time\",\n+                                \"name\": \"Additional Classpath Resources\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the Splunk server.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Directory\": {\n+                                \"description\": \"The parent directory to which files should be written. Will be created if it doesn't exist.\",\n+                                \"displayName\": \"Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Latest Time\": {\n-                                \"description\": \"The value to use for the latest time when querying. Only used with a Time Range Strategy of Provided. See Splunk's documentation on Search Time Modifiers for guidance in populating this field.\",\n-                                \"displayName\": \"Latest Time\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Latest Time\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Output Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ATOM\",\n-                                        \"value\": \"ATOM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CSV\",\n-                                        \"value\": \"CSV\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JSON\",\n-                                        \"value\": \"JSON\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JSON_COLS\",\n-                                        \"value\": \"JSON_COLS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JSON_ROWS\",\n-                                        \"value\": \"JSON_ROWS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"XML\",\n-                                        \"value\": \"XML\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"JSON\",\n-                                \"description\": \"The output mode for the results.\",\n-                                \"displayName\": \"Output Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Owner\": {\n-                                \"description\": \"The owner to pass to Splunk.\",\n-                                \"displayName\": \"Owner\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Owner\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password to authenticate to Splunk.\",\n-                                \"displayName\": \"Password\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"Kerberos Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8089\",\n-                                \"description\": \"The port of the Splunk server.\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Query\": {\n-                                \"defaultValue\": \"search * | head 100\",\n-                                \"description\": \"The query to execute. Typically beginning with a <search> command followed by a search clause, such as <search source=\\\"tcp:7689\\\"> to search for messages received on TCP port 7689.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Query\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Read Timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for response from the Splunk server.\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Read Timeout\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Scheme\": {\n+                            \"avro-add-list-element-records\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"https\",\n-                                        \"value\": \"https\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"http\",\n-                                        \"value\": \"http\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"https\",\n-                                \"description\": \"The scheme for connecting to Splunk.\",\n-                                \"displayName\": \"Scheme\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies the value for 'parquet.avro.add-list-element-records' in the underlying Parquet library\",\n+                                \"displayName\": \"Avro Add List Element Records\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Scheme\",\n+                                \"name\": \"avro-add-list-element-records\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Security Protocol\": {\n+                            \"avro-write-old-list-structure\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_2\",\n-                                        \"value\": \"TLSv1_2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_1\",\n-                                        \"value\": \"TLSv1_1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1\",\n-                                        \"value\": \"TLSv1\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SSLv3\",\n-                                        \"value\": \"SSLv3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"TLSv1_2\",\n-                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n-                                \"displayName\": \"Security Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Security Protocol\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Field Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Search based on the time of the event which may be different than when the event was indexed.\",\n-                                        \"displayName\": \"Event Time\",\n-                                        \"value\": \"Event Time\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Search based on the time the event was indexed in Splunk.\",\n-                                        \"displayName\": \"Index Time\",\n-                                        \"value\": \"Index Time\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Event Time\",\n-                                \"description\": \"Indicates whether to search by the time attached to the event, or by the time the event was indexed in Splunk.\",\n-                                \"displayName\": \"Time Field Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Field Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Range Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The processor will manage the date ranges of the query starting from the beginning of time.\",\n-                                        \"displayName\": \"Managed from Beginning\",\n-                                        \"value\": \"Managed from Beginning\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The processor will manage the date ranges of the query starting from the current time.\",\n-                                        \"displayName\": \"Managed from Current\",\n-                                        \"value\": \"Managed from Current\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The the time range provided through the Earliest Time and Latest Time properties will be used.\",\n-                                        \"displayName\": \"Provided\",\n-                                        \"value\": \"Provided\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Provided\",\n-                                \"description\": \"Indicates how to apply time ranges to each execution of the query. Selecting a managed option allows the processor to apply a time range from the last execution time to the current execution time. When using <Managed from Beginning>, an earliest time will not be applied on the first execution, and thus all records searched. When using <Managed from Current> the earliest time of the first execution will be the initial execution time. When using <Provided>, the time range will come from the Earliest Time and Latest Time properties, or no time range will be applied if these properties are left blank.\",\n-                                \"displayName\": \"Time Range Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies the value for 'parquet.avro.write-old-list-structure' in the underlying Parquet library\",\n+                                \"displayName\": \"Avro Write Old List Structure\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Range Strategy\",\n+                                \"name\": \"avro-write-old-list-structure\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Zone\": {\n+                            \"compression-type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Africa/Abidjan\",\n-                                        \"value\": \"Africa/Abidjan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Accra\",\n-                                        \"value\": \"Africa/Accra\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Addis_Ababa\",\n-                                        \"value\": \"Africa/Addis_Ababa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Algiers\",\n-                                        \"value\": \"Africa/Algiers\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Asmara\",\n-                                        \"value\": \"Africa/Asmara\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Asmera\",\n-                                        \"value\": \"Africa/Asmera\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Bamako\",\n-                                        \"value\": \"Africa/Bamako\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Bangui\",\n-                                        \"value\": \"Africa/Bangui\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Banjul\",\n-                                        \"value\": \"Africa/Banjul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Bissau\",\n-                                        \"value\": \"Africa/Bissau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Blantyre\",\n-                                        \"value\": \"Africa/Blantyre\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Brazzaville\",\n-                                        \"value\": \"Africa/Brazzaville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Bujumbura\",\n-                                        \"value\": \"Africa/Bujumbura\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Cairo\",\n-                                        \"value\": \"Africa/Cairo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Casablanca\",\n-                                        \"value\": \"Africa/Casablanca\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Ceuta\",\n-                                        \"value\": \"Africa/Ceuta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Conakry\",\n-                                        \"value\": \"Africa/Conakry\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Dakar\",\n-                                        \"value\": \"Africa/Dakar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Dar_es_Salaam\",\n-                                        \"value\": \"Africa/Dar_es_Salaam\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Djibouti\",\n-                                        \"value\": \"Africa/Djibouti\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Douala\",\n-                                        \"value\": \"Africa/Douala\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/El_Aaiun\",\n-                                        \"value\": \"Africa/El_Aaiun\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Freetown\",\n-                                        \"value\": \"Africa/Freetown\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Gaborone\",\n-                                        \"value\": \"Africa/Gaborone\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Harare\",\n-                                        \"value\": \"Africa/Harare\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Johannesburg\",\n-                                        \"value\": \"Africa/Johannesburg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Juba\",\n-                                        \"value\": \"Africa/Juba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Kampala\",\n-                                        \"value\": \"Africa/Kampala\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Khartoum\",\n-                                        \"value\": \"Africa/Khartoum\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Kigali\",\n-                                        \"value\": \"Africa/Kigali\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Kinshasa\",\n-                                        \"value\": \"Africa/Kinshasa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lagos\",\n-                                        \"value\": \"Africa/Lagos\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Libreville\",\n-                                        \"value\": \"Africa/Libreville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lome\",\n-                                        \"value\": \"Africa/Lome\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Luanda\",\n-                                        \"value\": \"Africa/Luanda\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lubumbashi\",\n-                                        \"value\": \"Africa/Lubumbashi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lusaka\",\n-                                        \"value\": \"Africa/Lusaka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Malabo\",\n-                                        \"value\": \"Africa/Malabo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Maputo\",\n-                                        \"value\": \"Africa/Maputo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Maseru\",\n-                                        \"value\": \"Africa/Maseru\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Mbabane\",\n-                                        \"value\": \"Africa/Mbabane\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Mogadishu\",\n-                                        \"value\": \"Africa/Mogadishu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Monrovia\",\n-                                        \"value\": \"Africa/Monrovia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Nairobi\",\n-                                        \"value\": \"Africa/Nairobi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Ndjamena\",\n-                                        \"value\": \"Africa/Ndjamena\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Niamey\",\n-                                        \"value\": \"Africa/Niamey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Nouakchott\",\n-                                        \"value\": \"Africa/Nouakchott\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Ouagadougou\",\n-                                        \"value\": \"Africa/Ouagadougou\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Porto-Novo\",\n-                                        \"value\": \"Africa/Porto-Novo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Sao_Tome\",\n-                                        \"value\": \"Africa/Sao_Tome\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Timbuktu\",\n-                                        \"value\": \"Africa/Timbuktu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Tripoli\",\n-                                        \"value\": \"Africa/Tripoli\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Tunis\",\n-                                        \"value\": \"Africa/Tunis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Windhoek\",\n-                                        \"value\": \"Africa/Windhoek\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Adak\",\n-                                        \"value\": \"America/Adak\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Anchorage\",\n-                                        \"value\": \"America/Anchorage\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Anguilla\",\n-                                        \"value\": \"America/Anguilla\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Antigua\",\n-                                        \"value\": \"America/Antigua\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Araguaina\",\n-                                        \"value\": \"America/Araguaina\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Buenos_Aires\",\n-                                        \"value\": \"America/Argentina/Buenos_Aires\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Catamarca\",\n-                                        \"value\": \"America/Argentina/Catamarca\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/ComodRivadavia\",\n-                                        \"value\": \"America/Argentina/ComodRivadavia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Cordoba\",\n-                                        \"value\": \"America/Argentina/Cordoba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Jujuy\",\n-                                        \"value\": \"America/Argentina/Jujuy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/La_Rioja\",\n-                                        \"value\": \"America/Argentina/La_Rioja\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Mendoza\",\n-                                        \"value\": \"America/Argentina/Mendoza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Rio_Gallegos\",\n-                                        \"value\": \"America/Argentina/Rio_Gallegos\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Salta\",\n-                                        \"value\": \"America/Argentina/Salta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/San_Juan\",\n-                                        \"value\": \"America/Argentina/San_Juan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/San_Luis\",\n-                                        \"value\": \"America/Argentina/San_Luis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Tucuman\",\n-                                        \"value\": \"America/Argentina/Tucuman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Ushuaia\",\n-                                        \"value\": \"America/Argentina/Ushuaia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Aruba\",\n-                                        \"value\": \"America/Aruba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Asuncion\",\n-                                        \"value\": \"America/Asuncion\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Atikokan\",\n-                                        \"value\": \"America/Atikokan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Atka\",\n-                                        \"value\": \"America/Atka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Bahia\",\n-                                        \"value\": \"America/Bahia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Bahia_Banderas\",\n-                                        \"value\": \"America/Bahia_Banderas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Barbados\",\n-                                        \"value\": \"America/Barbados\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Belem\",\n-                                        \"value\": \"America/Belem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Belize\",\n-                                        \"value\": \"America/Belize\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Blanc-Sablon\",\n-                                        \"value\": \"America/Blanc-Sablon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Boa_Vista\",\n-                                        \"value\": \"America/Boa_Vista\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Bogota\",\n-                                        \"value\": \"America/Bogota\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Boise\",\n-                                        \"value\": \"America/Boise\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Buenos_Aires\",\n-                                        \"value\": \"America/Buenos_Aires\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cambridge_Bay\",\n-                                        \"value\": \"America/Cambridge_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Campo_Grande\",\n-                                        \"value\": \"America/Campo_Grande\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cancun\",\n-                                        \"value\": \"America/Cancun\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Caracas\",\n-                                        \"value\": \"America/Caracas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Catamarca\",\n-                                        \"value\": \"America/Catamarca\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cayenne\",\n-                                        \"value\": \"America/Cayenne\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cayman\",\n-                                        \"value\": \"America/Cayman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Chicago\",\n-                                        \"value\": \"America/Chicago\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Chihuahua\",\n-                                        \"value\": \"America/Chihuahua\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Coral_Harbour\",\n-                                        \"value\": \"America/Coral_Harbour\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cordoba\",\n-                                        \"value\": \"America/Cordoba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Costa_Rica\",\n-                                        \"value\": \"America/Costa_Rica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Creston\",\n-                                        \"value\": \"America/Creston\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cuiaba\",\n-                                        \"value\": \"America/Cuiaba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Curacao\",\n-                                        \"value\": \"America/Curacao\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Danmarkshavn\",\n-                                        \"value\": \"America/Danmarkshavn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Dawson\",\n-                                        \"value\": \"America/Dawson\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Dawson_Creek\",\n-                                        \"value\": \"America/Dawson_Creek\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Denver\",\n-                                        \"value\": \"America/Denver\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Detroit\",\n-                                        \"value\": \"America/Detroit\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Dominica\",\n-                                        \"value\": \"America/Dominica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Edmonton\",\n-                                        \"value\": \"America/Edmonton\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Eirunepe\",\n-                                        \"value\": \"America/Eirunepe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/El_Salvador\",\n-                                        \"value\": \"America/El_Salvador\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Ensenada\",\n-                                        \"value\": \"America/Ensenada\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Fort_Nelson\",\n-                                        \"value\": \"America/Fort_Nelson\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Fort_Wayne\",\n-                                        \"value\": \"America/Fort_Wayne\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Fortaleza\",\n-                                        \"value\": \"America/Fortaleza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Glace_Bay\",\n-                                        \"value\": \"America/Glace_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Godthab\",\n-                                        \"value\": \"America/Godthab\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Goose_Bay\",\n-                                        \"value\": \"America/Goose_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Grand_Turk\",\n-                                        \"value\": \"America/Grand_Turk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Grenada\",\n-                                        \"value\": \"America/Grenada\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guadeloupe\",\n-                                        \"value\": \"America/Guadeloupe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guatemala\",\n-                                        \"value\": \"America/Guatemala\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guayaquil\",\n-                                        \"value\": \"America/Guayaquil\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guyana\",\n-                                        \"value\": \"America/Guyana\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Halifax\",\n-                                        \"value\": \"America/Halifax\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Havana\",\n-                                        \"value\": \"America/Havana\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Hermosillo\",\n-                                        \"value\": \"America/Hermosillo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Indianapolis\",\n-                                        \"value\": \"America/Indiana/Indianapolis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Knox\",\n-                                        \"value\": \"America/Indiana/Knox\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Marengo\",\n-                                        \"value\": \"America/Indiana/Marengo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Petersburg\",\n-                                        \"value\": \"America/Indiana/Petersburg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Tell_City\",\n-                                        \"value\": \"America/Indiana/Tell_City\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Vevay\",\n-                                        \"value\": \"America/Indiana/Vevay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Vincennes\",\n-                                        \"value\": \"America/Indiana/Vincennes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Winamac\",\n-                                        \"value\": \"America/Indiana/Winamac\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indianapolis\",\n-                                        \"value\": \"America/Indianapolis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Inuvik\",\n-                                        \"value\": \"America/Inuvik\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Iqaluit\",\n-                                        \"value\": \"America/Iqaluit\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Jamaica\",\n-                                        \"value\": \"America/Jamaica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Jujuy\",\n-                                        \"value\": \"America/Jujuy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Juneau\",\n-                                        \"value\": \"America/Juneau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Kentucky/Louisville\",\n-                                        \"value\": \"America/Kentucky/Louisville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Kentucky/Monticello\",\n-                                        \"value\": \"America/Kentucky/Monticello\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Knox_IN\",\n-                                        \"value\": \"America/Knox_IN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Kralendijk\",\n-                                        \"value\": \"America/Kralendijk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/La_Paz\",\n-                                        \"value\": \"America/La_Paz\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Lima\",\n-                                        \"value\": \"America/Lima\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Los_Angeles\",\n-                                        \"value\": \"America/Los_Angeles\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Louisville\",\n-                                        \"value\": \"America/Louisville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Lower_Princes\",\n-                                        \"value\": \"America/Lower_Princes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Maceio\",\n-                                        \"value\": \"America/Maceio\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Managua\",\n-                                        \"value\": \"America/Managua\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Manaus\",\n-                                        \"value\": \"America/Manaus\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Marigot\",\n-                                        \"value\": \"America/Marigot\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Martinique\",\n-                                        \"value\": \"America/Martinique\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Matamoros\",\n-                                        \"value\": \"America/Matamoros\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Mazatlan\",\n-                                        \"value\": \"America/Mazatlan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Mendoza\",\n-                                        \"value\": \"America/Mendoza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Menominee\",\n-                                        \"value\": \"America/Menominee\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Merida\",\n-                                        \"value\": \"America/Merida\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Metlakatla\",\n-                                        \"value\": \"America/Metlakatla\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Mexico_City\",\n-                                        \"value\": \"America/Mexico_City\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Miquelon\",\n-                                        \"value\": \"America/Miquelon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Moncton\",\n-                                        \"value\": \"America/Moncton\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Monterrey\",\n-                                        \"value\": \"America/Monterrey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Montevideo\",\n-                                        \"value\": \"America/Montevideo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Montreal\",\n-                                        \"value\": \"America/Montreal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Montserrat\",\n-                                        \"value\": \"America/Montserrat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nassau\",\n-                                        \"value\": \"America/Nassau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/New_York\",\n-                                        \"value\": \"America/New_York\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nipigon\",\n-                                        \"value\": \"America/Nipigon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nome\",\n-                                        \"value\": \"America/Nome\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Noronha\",\n-                                        \"value\": \"America/Noronha\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/North_Dakota/Beulah\",\n-                                        \"value\": \"America/North_Dakota/Beulah\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/North_Dakota/Center\",\n-                                        \"value\": \"America/North_Dakota/Center\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/North_Dakota/New_Salem\",\n-                                        \"value\": \"America/North_Dakota/New_Salem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nuuk\",\n-                                        \"value\": \"America/Nuuk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Ojinaga\",\n-                                        \"value\": \"America/Ojinaga\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Panama\",\n-                                        \"value\": \"America/Panama\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Pangnirtung\",\n-                                        \"value\": \"America/Pangnirtung\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Paramaribo\",\n-                                        \"value\": \"America/Paramaribo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Phoenix\",\n-                                        \"value\": \"America/Phoenix\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Port-au-Prince\",\n-                                        \"value\": \"America/Port-au-Prince\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Port_of_Spain\",\n-                                        \"value\": \"America/Port_of_Spain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Porto_Acre\",\n-                                        \"value\": \"America/Porto_Acre\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Porto_Velho\",\n-                                        \"value\": \"America/Porto_Velho\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Puerto_Rico\",\n-                                        \"value\": \"America/Puerto_Rico\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Punta_Arenas\",\n-                                        \"value\": \"America/Punta_Arenas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rainy_River\",\n-                                        \"value\": \"America/Rainy_River\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rankin_Inlet\",\n-                                        \"value\": \"America/Rankin_Inlet\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Recife\",\n-                                        \"value\": \"America/Recife\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Regina\",\n-                                        \"value\": \"America/Regina\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Resolute\",\n-                                        \"value\": \"America/Resolute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rio_Branco\",\n-                                        \"value\": \"America/Rio_Branco\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rosario\",\n-                                        \"value\": \"America/Rosario\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santa_Isabel\",\n-                                        \"value\": \"America/Santa_Isabel\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santarem\",\n-                                        \"value\": \"America/Santarem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santiago\",\n-                                        \"value\": \"America/Santiago\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santo_Domingo\",\n-                                        \"value\": \"America/Santo_Domingo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Sao_Paulo\",\n-                                        \"value\": \"America/Sao_Paulo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Scoresbysund\",\n-                                        \"value\": \"America/Scoresbysund\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Shiprock\",\n-                                        \"value\": \"America/Shiprock\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Sitka\",\n-                                        \"value\": \"America/Sitka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Barthelemy\",\n-                                        \"value\": \"America/St_Barthelemy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Johns\",\n-                                        \"value\": \"America/St_Johns\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Kitts\",\n-                                        \"value\": \"America/St_Kitts\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Lucia\",\n-                                        \"value\": \"America/St_Lucia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Thomas\",\n-                                        \"value\": \"America/St_Thomas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Vincent\",\n-                                        \"value\": \"America/St_Vincent\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Swift_Current\",\n-                                        \"value\": \"America/Swift_Current\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Tegucigalpa\",\n-                                        \"value\": \"America/Tegucigalpa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Thule\",\n-                                        \"value\": \"America/Thule\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Thunder_Bay\",\n-                                        \"value\": \"America/Thunder_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Tijuana\",\n-                                        \"value\": \"America/Tijuana\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Toronto\",\n-                                        \"value\": \"America/Toronto\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Tortola\",\n-                                        \"value\": \"America/Tortola\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Vancouver\",\n-                                        \"value\": \"America/Vancouver\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Virgin\",\n-                                        \"value\": \"America/Virgin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Whitehorse\",\n-                                        \"value\": \"America/Whitehorse\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Winnipeg\",\n-                                        \"value\": \"America/Winnipeg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Yakutat\",\n-                                        \"value\": \"America/Yakutat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Yellowknife\",\n-                                        \"value\": \"America/Yellowknife\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Casey\",\n-                                        \"value\": \"Antarctica/Casey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Davis\",\n-                                        \"value\": \"Antarctica/Davis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/DumontDUrville\",\n-                                        \"value\": \"Antarctica/DumontDUrville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Macquarie\",\n-                                        \"value\": \"Antarctica/Macquarie\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Mawson\",\n-                                        \"value\": \"Antarctica/Mawson\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/McMurdo\",\n-                                        \"value\": \"Antarctica/McMurdo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Palmer\",\n-                                        \"value\": \"Antarctica/Palmer\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Rothera\",\n-                                        \"value\": \"Antarctica/Rothera\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/South_Pole\",\n-                                        \"value\": \"Antarctica/South_Pole\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Syowa\",\n-                                        \"value\": \"Antarctica/Syowa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Troll\",\n-                                        \"value\": \"Antarctica/Troll\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Vostok\",\n-                                        \"value\": \"Antarctica/Vostok\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Arctic/Longyearbyen\",\n-                                        \"value\": \"Arctic/Longyearbyen\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Aden\",\n-                                        \"value\": \"Asia/Aden\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Almaty\",\n-                                        \"value\": \"Asia/Almaty\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Amman\",\n-                                        \"value\": \"Asia/Amman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Anadyr\",\n-                                        \"value\": \"Asia/Anadyr\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Aqtau\",\n-                                        \"value\": \"Asia/Aqtau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Aqtobe\",\n-                                        \"value\": \"Asia/Aqtobe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ashgabat\",\n-                                        \"value\": \"Asia/Ashgabat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ashkhabad\",\n-                                        \"value\": \"Asia/Ashkhabad\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Atyrau\",\n-                                        \"value\": \"Asia/Atyrau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Baghdad\",\n-                                        \"value\": \"Asia/Baghdad\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Bahrain\",\n-                                        \"value\": \"Asia/Bahrain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Baku\",\n-                                        \"value\": \"Asia/Baku\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Bangkok\",\n-                                        \"value\": \"Asia/Bangkok\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Barnaul\",\n-                                        \"value\": \"Asia/Barnaul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Beirut\",\n-                                        \"value\": \"Asia/Beirut\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Bishkek\",\n-                                        \"value\": \"Asia/Bishkek\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Brunei\",\n-                                        \"value\": \"Asia/Brunei\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Calcutta\",\n-                                        \"value\": \"Asia/Calcutta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Chita\",\n-                                        \"value\": \"Asia/Chita\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Choibalsan\",\n-                                        \"value\": \"Asia/Choibalsan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Chongqing\",\n-                                        \"value\": \"Asia/Chongqing\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Chungking\",\n-                                        \"value\": \"Asia/Chungking\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Colombo\",\n-                                        \"value\": \"Asia/Colombo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dacca\",\n-                                        \"value\": \"Asia/Dacca\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Damascus\",\n-                                        \"value\": \"Asia/Damascus\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dhaka\",\n-                                        \"value\": \"Asia/Dhaka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dili\",\n-                                        \"value\": \"Asia/Dili\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dubai\",\n-                                        \"value\": \"Asia/Dubai\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dushanbe\",\n-                                        \"value\": \"Asia/Dushanbe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Famagusta\",\n-                                        \"value\": \"Asia/Famagusta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Gaza\",\n-                                        \"value\": \"Asia/Gaza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Harbin\",\n-                                        \"value\": \"Asia/Harbin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Hebron\",\n-                                        \"value\": \"Asia/Hebron\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ho_Chi_Minh\",\n-                                        \"value\": \"Asia/Ho_Chi_Minh\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Hong_Kong\",\n-                                        \"value\": \"Asia/Hong_Kong\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Hovd\",\n-                                        \"value\": \"Asia/Hovd\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Irkutsk\",\n-                                        \"value\": \"Asia/Irkutsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Istanbul\",\n-                                        \"value\": \"Asia/Istanbul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Jakarta\",\n-                                        \"value\": \"Asia/Jakarta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Jayapura\",\n-                                        \"value\": \"Asia/Jayapura\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Jerusalem\",\n-                                        \"value\": \"Asia/Jerusalem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kabul\",\n-                                        \"value\": \"Asia/Kabul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kamchatka\",\n-                                        \"value\": \"Asia/Kamchatka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Karachi\",\n-                                        \"value\": \"Asia/Karachi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kashgar\",\n-                                        \"value\": \"Asia/Kashgar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kathmandu\",\n-                                        \"value\": \"Asia/Kathmandu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Katmandu\",\n-                                        \"value\": \"Asia/Katmandu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Khandyga\",\n-                                        \"value\": \"Asia/Khandyga\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kolkata\",\n-                                        \"value\": \"Asia/Kolkata\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Krasnoyarsk\",\n-                                        \"value\": \"Asia/Krasnoyarsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kuala_Lumpur\",\n-                                        \"value\": \"Asia/Kuala_Lumpur\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kuching\",\n-                                        \"value\": \"Asia/Kuching\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kuwait\",\n-                                        \"value\": \"Asia/Kuwait\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Macao\",\n-                                        \"value\": \"Asia/Macao\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Macau\",\n-                                        \"value\": \"Asia/Macau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Magadan\",\n-                                        \"value\": \"Asia/Magadan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Makassar\",\n-                                        \"value\": \"Asia/Makassar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Manila\",\n-                                        \"value\": \"Asia/Manila\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Muscat\",\n-                                        \"value\": \"Asia/Muscat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Nicosia\",\n-                                        \"value\": \"Asia/Nicosia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Novokuznetsk\",\n-                                        \"value\": \"Asia/Novokuznetsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Novosibirsk\",\n-                                        \"value\": \"Asia/Novosibirsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Omsk\",\n-                                        \"value\": \"Asia/Omsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Oral\",\n-                                        \"value\": \"Asia/Oral\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Phnom_Penh\",\n-                                        \"value\": \"Asia/Phnom_Penh\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Pontianak\",\n-                                        \"value\": \"Asia/Pontianak\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Pyongyang\",\n-                                        \"value\": \"Asia/Pyongyang\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Qatar\",\n-                                        \"value\": \"Asia/Qatar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Qostanay\",\n-                                        \"value\": \"Asia/Qostanay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Qyzylorda\",\n-                                        \"value\": \"Asia/Qyzylorda\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Rangoon\",\n-                                        \"value\": \"Asia/Rangoon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Riyadh\",\n-                                        \"value\": \"Asia/Riyadh\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Saigon\",\n-                                        \"value\": \"Asia/Saigon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Sakhalin\",\n-                                        \"value\": \"Asia/Sakhalin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Samarkand\",\n-                                        \"value\": \"Asia/Samarkand\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Seoul\",\n-                                        \"value\": \"Asia/Seoul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Shanghai\",\n-                                        \"value\": \"Asia/Shanghai\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Singapore\",\n-                                        \"value\": \"Asia/Singapore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Srednekolymsk\",\n-                                        \"value\": \"Asia/Srednekolymsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Taipei\",\n-                                        \"value\": \"Asia/Taipei\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tashkent\",\n-                                        \"value\": \"Asia/Tashkent\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tbilisi\",\n-                                        \"value\": \"Asia/Tbilisi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tehran\",\n-                                        \"value\": \"Asia/Tehran\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tel_Aviv\",\n-                                        \"value\": \"Asia/Tel_Aviv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Thimbu\",\n-                                        \"value\": \"Asia/Thimbu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Thimphu\",\n-                                        \"value\": \"Asia/Thimphu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tokyo\",\n-                                        \"value\": \"Asia/Tokyo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tomsk\",\n-                                        \"value\": \"Asia/Tomsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ujung_Pandang\",\n-                                        \"value\": \"Asia/Ujung_Pandang\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ulaanbaatar\",\n-                                        \"value\": \"Asia/Ulaanbaatar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ulan_Bator\",\n-                                        \"value\": \"Asia/Ulan_Bator\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Urumqi\",\n-                                        \"value\": \"Asia/Urumqi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ust-Nera\",\n-                                        \"value\": \"Asia/Ust-Nera\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Vientiane\",\n-                                        \"value\": \"Asia/Vientiane\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Vladivostok\",\n-                                        \"value\": \"Asia/Vladivostok\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yakutsk\",\n-                                        \"value\": \"Asia/Yakutsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yangon\",\n-                                        \"value\": \"Asia/Yangon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yekaterinburg\",\n-                                        \"value\": \"Asia/Yekaterinburg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yerevan\",\n-                                        \"value\": \"Asia/Yerevan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Azores\",\n-                                        \"value\": \"Atlantic/Azores\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Bermuda\",\n-                                        \"value\": \"Atlantic/Bermuda\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Canary\",\n-                                        \"value\": \"Atlantic/Canary\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Cape_Verde\",\n-                                        \"value\": \"Atlantic/Cape_Verde\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Faeroe\",\n-                                        \"value\": \"Atlantic/Faeroe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Faroe\",\n-                                        \"value\": \"Atlantic/Faroe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Jan_Mayen\",\n-                                        \"value\": \"Atlantic/Jan_Mayen\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Madeira\",\n-                                        \"value\": \"Atlantic/Madeira\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Reykjavik\",\n-                                        \"value\": \"Atlantic/Reykjavik\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/South_Georgia\",\n-                                        \"value\": \"Atlantic/South_Georgia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/St_Helena\",\n-                                        \"value\": \"Atlantic/St_Helena\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Stanley\",\n-                                        \"value\": \"Atlantic/Stanley\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/ACT\",\n-                                        \"value\": \"Australia/ACT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Adelaide\",\n-                                        \"value\": \"Australia/Adelaide\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Brisbane\",\n-                                        \"value\": \"Australia/Brisbane\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Broken_Hill\",\n-                                        \"value\": \"Australia/Broken_Hill\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Canberra\",\n-                                        \"value\": \"Australia/Canberra\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Currie\",\n-                                        \"value\": \"Australia/Currie\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Darwin\",\n-                                        \"value\": \"Australia/Darwin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Eucla\",\n-                                        \"value\": \"Australia/Eucla\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Hobart\",\n-                                        \"value\": \"Australia/Hobart\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/LHI\",\n-                                        \"value\": \"Australia/LHI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Lindeman\",\n-                                        \"value\": \"Australia/Lindeman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Lord_Howe\",\n-                                        \"value\": \"Australia/Lord_Howe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Melbourne\",\n-                                        \"value\": \"Australia/Melbourne\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/NSW\",\n-                                        \"value\": \"Australia/NSW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/North\",\n-                                        \"value\": \"Australia/North\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Perth\",\n-                                        \"value\": \"Australia/Perth\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Queensland\",\n-                                        \"value\": \"Australia/Queensland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/South\",\n-                                        \"value\": \"Australia/South\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Sydney\",\n-                                        \"value\": \"Australia/Sydney\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Tasmania\",\n-                                        \"value\": \"Australia/Tasmania\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Victoria\",\n-                                        \"value\": \"Australia/Victoria\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/West\",\n-                                        \"value\": \"Australia/West\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Yancowinna\",\n-                                        \"value\": \"Australia/Yancowinna\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/Acre\",\n-                                        \"value\": \"Brazil/Acre\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/DeNoronha\",\n-                                        \"value\": \"Brazil/DeNoronha\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/East\",\n-                                        \"value\": \"Brazil/East\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/West\",\n-                                        \"value\": \"Brazil/West\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CET\",\n-                                        \"value\": \"CET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CST6CDT\",\n-                                        \"value\": \"CST6CDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Atlantic\",\n-                                        \"value\": \"Canada/Atlantic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Central\",\n-                                        \"value\": \"Canada/Central\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Eastern\",\n-                                        \"value\": \"Canada/Eastern\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Mountain\",\n-                                        \"value\": \"Canada/Mountain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Newfoundland\",\n-                                        \"value\": \"Canada/Newfoundland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Pacific\",\n-                                        \"value\": \"Canada/Pacific\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Saskatchewan\",\n-                                        \"value\": \"Canada/Saskatchewan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Yukon\",\n-                                        \"value\": \"Canada/Yukon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Chile/Continental\",\n-                                        \"value\": \"Chile/Continental\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Chile/EasterIsland\",\n-                                        \"value\": \"Chile/EasterIsland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Cuba\",\n-                                        \"value\": \"Cuba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EET\",\n-                                        \"value\": \"EET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EST5EDT\",\n-                                        \"value\": \"EST5EDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Egypt\",\n-                                        \"value\": \"Egypt\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Eire\",\n-                                        \"value\": \"Eire\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT\",\n-                                        \"value\": \"Etc/GMT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+0\",\n-                                        \"value\": \"Etc/GMT+0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+1\",\n-                                        \"value\": \"Etc/GMT+1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+10\",\n-                                        \"value\": \"Etc/GMT+10\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+11\",\n-                                        \"value\": \"Etc/GMT+11\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+12\",\n-                                        \"value\": \"Etc/GMT+12\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+2\",\n-                                        \"value\": \"Etc/GMT+2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+3\",\n-                                        \"value\": \"Etc/GMT+3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+4\",\n-                                        \"value\": \"Etc/GMT+4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+5\",\n-                                        \"value\": \"Etc/GMT+5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+6\",\n-                                        \"value\": \"Etc/GMT+6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+7\",\n-                                        \"value\": \"Etc/GMT+7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+8\",\n-                                        \"value\": \"Etc/GMT+8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+9\",\n-                                        \"value\": \"Etc/GMT+9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-0\",\n-                                        \"value\": \"Etc/GMT-0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-1\",\n-                                        \"value\": \"Etc/GMT-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-10\",\n-                                        \"value\": \"Etc/GMT-10\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-11\",\n-                                        \"value\": \"Etc/GMT-11\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-12\",\n-                                        \"value\": \"Etc/GMT-12\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-13\",\n-                                        \"value\": \"Etc/GMT-13\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-14\",\n-                                        \"value\": \"Etc/GMT-14\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-2\",\n-                                        \"value\": \"Etc/GMT-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-3\",\n-                                        \"value\": \"Etc/GMT-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-4\",\n-                                        \"value\": \"Etc/GMT-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-5\",\n-                                        \"value\": \"Etc/GMT-5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-6\",\n-                                        \"value\": \"Etc/GMT-6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-7\",\n-                                        \"value\": \"Etc/GMT-7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-8\",\n-                                        \"value\": \"Etc/GMT-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-9\",\n-                                        \"value\": \"Etc/GMT-9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT0\",\n-                                        \"value\": \"Etc/GMT0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/Greenwich\",\n-                                        \"value\": \"Etc/Greenwich\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/UCT\",\n-                                        \"value\": \"Etc/UCT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/UTC\",\n-                                        \"value\": \"Etc/UTC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/Universal\",\n-                                        \"value\": \"Etc/Universal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/Zulu\",\n-                                        \"value\": \"Etc/Zulu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Amsterdam\",\n-                                        \"value\": \"Europe/Amsterdam\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Andorra\",\n-                                        \"value\": \"Europe/Andorra\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Astrakhan\",\n-                                        \"value\": \"Europe/Astrakhan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Athens\",\n-                                        \"value\": \"Europe/Athens\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Belfast\",\n-                                        \"value\": \"Europe/Belfast\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Belgrade\",\n-                                        \"value\": \"Europe/Belgrade\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Berlin\",\n-                                        \"value\": \"Europe/Berlin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Bratislava\",\n-                                        \"value\": \"Europe/Bratislava\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Brussels\",\n-                                        \"value\": \"Europe/Brussels\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Bucharest\",\n-                                        \"value\": \"Europe/Bucharest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Budapest\",\n-                                        \"value\": \"Europe/Budapest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Busingen\",\n-                                        \"value\": \"Europe/Busingen\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Chisinau\",\n-                                        \"value\": \"Europe/Chisinau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Copenhagen\",\n-                                        \"value\": \"Europe/Copenhagen\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Dublin\",\n-                                        \"value\": \"Europe/Dublin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Gibraltar\",\n-                                        \"value\": \"Europe/Gibraltar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Guernsey\",\n-                                        \"value\": \"Europe/Guernsey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Helsinki\",\n-                                        \"value\": \"Europe/Helsinki\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Isle_of_Man\",\n-                                        \"value\": \"Europe/Isle_of_Man\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Istanbul\",\n-                                        \"value\": \"Europe/Istanbul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Jersey\",\n-                                        \"value\": \"Europe/Jersey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Kaliningrad\",\n-                                        \"value\": \"Europe/Kaliningrad\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Kiev\",\n-                                        \"value\": \"Europe/Kiev\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Kirov\",\n-                                        \"value\": \"Europe/Kirov\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Lisbon\",\n-                                        \"value\": \"Europe/Lisbon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Ljubljana\",\n-                                        \"value\": \"Europe/Ljubljana\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/London\",\n-                                        \"value\": \"Europe/London\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Luxembourg\",\n-                                        \"value\": \"Europe/Luxembourg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Madrid\",\n-                                        \"value\": \"Europe/Madrid\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Malta\",\n-                                        \"value\": \"Europe/Malta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Mariehamn\",\n-                                        \"value\": \"Europe/Mariehamn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Minsk\",\n-                                        \"value\": \"Europe/Minsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Monaco\",\n-                                        \"value\": \"Europe/Monaco\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Moscow\",\n-                                        \"value\": \"Europe/Moscow\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Nicosia\",\n-                                        \"value\": \"Europe/Nicosia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Oslo\",\n-                                        \"value\": \"Europe/Oslo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Paris\",\n-                                        \"value\": \"Europe/Paris\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Podgorica\",\n-                                        \"value\": \"Europe/Podgorica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Prague\",\n-                                        \"value\": \"Europe/Prague\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Riga\",\n-                                        \"value\": \"Europe/Riga\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Rome\",\n-                                        \"value\": \"Europe/Rome\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Samara\",\n-                                        \"value\": \"Europe/Samara\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/San_Marino\",\n-                                        \"value\": \"Europe/San_Marino\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Sarajevo\",\n-                                        \"value\": \"Europe/Sarajevo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Saratov\",\n-                                        \"value\": \"Europe/Saratov\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Simferopol\",\n-                                        \"value\": \"Europe/Simferopol\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Skopje\",\n-                                        \"value\": \"Europe/Skopje\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Sofia\",\n-                                        \"value\": \"Europe/Sofia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Stockholm\",\n-                                        \"value\": \"Europe/Stockholm\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Tallinn\",\n-                                        \"value\": \"Europe/Tallinn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Tirane\",\n-                                        \"value\": \"Europe/Tirane\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Tiraspol\",\n-                                        \"value\": \"Europe/Tiraspol\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Ulyanovsk\",\n-                                        \"value\": \"Europe/Ulyanovsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Uzhgorod\",\n-                                        \"value\": \"Europe/Uzhgorod\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Vaduz\",\n-                                        \"value\": \"Europe/Vaduz\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Vatican\",\n-                                        \"value\": \"Europe/Vatican\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Vienna\",\n-                                        \"value\": \"Europe/Vienna\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Vilnius\",\n-                                        \"value\": \"Europe/Vilnius\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Volgograd\",\n-                                        \"value\": \"Europe/Volgograd\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Warsaw\",\n-                                        \"value\": \"Europe/Warsaw\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Zagreb\",\n-                                        \"value\": \"Europe/Zagreb\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Zaporozhye\",\n-                                        \"value\": \"Europe/Zaporozhye\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Zurich\",\n-                                        \"value\": \"Europe/Zurich\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GB\",\n-                                        \"value\": \"GB\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GB-Eire\",\n-                                        \"value\": \"GB-Eire\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GMT\",\n-                                        \"value\": \"GMT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GMT0\",\n-                                        \"value\": \"GMT0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Greenwich\",\n-                                        \"value\": \"Greenwich\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Hongkong\",\n-                                        \"value\": \"Hongkong\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Iceland\",\n-                                        \"value\": \"Iceland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Antananarivo\",\n-                                        \"value\": \"Indian/Antananarivo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Chagos\",\n-                                        \"value\": \"Indian/Chagos\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Christmas\",\n-                                        \"value\": \"Indian/Christmas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Cocos\",\n-                                        \"value\": \"Indian/Cocos\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Comoro\",\n-                                        \"value\": \"Indian/Comoro\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Kerguelen\",\n-                                        \"value\": \"Indian/Kerguelen\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Mahe\",\n-                                        \"value\": \"Indian/Mahe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Maldives\",\n-                                        \"value\": \"Indian/Maldives\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Mauritius\",\n-                                        \"value\": \"Indian/Mauritius\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Mayotte\",\n-                                        \"value\": \"Indian/Mayotte\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Reunion\",\n-                                        \"value\": \"Indian/Reunion\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Iran\",\n-                                        \"value\": \"Iran\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Israel\",\n-                                        \"value\": \"Israel\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Jamaica\",\n-                                        \"value\": \"Jamaica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Japan\",\n-                                        \"value\": \"Japan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Kwajalein\",\n-                                        \"value\": \"Kwajalein\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Libya\",\n-                                        \"value\": \"Libya\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MET\",\n-                                        \"value\": \"MET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MST7MDT\",\n-                                        \"value\": \"MST7MDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Mexico/BajaNorte\",\n-                                        \"value\": \"Mexico/BajaNorte\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Mexico/BajaSur\",\n-                                        \"value\": \"Mexico/BajaSur\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Mexico/General\",\n-                                        \"value\": \"Mexico/General\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NZ\",\n-                                        \"value\": \"NZ\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NZ-CHAT\",\n-                                        \"value\": \"NZ-CHAT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Navajo\",\n-                                        \"value\": \"Navajo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PRC\",\n-                                        \"value\": \"PRC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PST8PDT\",\n-                                        \"value\": \"PST8PDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Apia\",\n-                                        \"value\": \"Pacific/Apia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Auckland\",\n-                                        \"value\": \"Pacific/Auckland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Bougainville\",\n-                                        \"value\": \"Pacific/Bougainville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Chatham\",\n-                                        \"value\": \"Pacific/Chatham\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Chuuk\",\n-                                        \"value\": \"Pacific/Chuuk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Easter\",\n-                                        \"value\": \"Pacific/Easter\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Efate\",\n-                                        \"value\": \"Pacific/Efate\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Enderbury\",\n-                                        \"value\": \"Pacific/Enderbury\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Fakaofo\",\n-                                        \"value\": \"Pacific/Fakaofo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Fiji\",\n-                                        \"value\": \"Pacific/Fiji\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Funafuti\",\n-                                        \"value\": \"Pacific/Funafuti\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Galapagos\",\n-                                        \"value\": \"Pacific/Galapagos\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Gambier\",\n-                                        \"value\": \"Pacific/Gambier\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Guadalcanal\",\n-                                        \"value\": \"Pacific/Guadalcanal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Guam\",\n-                                        \"value\": \"Pacific/Guam\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Honolulu\",\n-                                        \"value\": \"Pacific/Honolulu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Johnston\",\n-                                        \"value\": \"Pacific/Johnston\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Kiritimati\",\n-                                        \"value\": \"Pacific/Kiritimati\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Kosrae\",\n-                                        \"value\": \"Pacific/Kosrae\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Kwajalein\",\n-                                        \"value\": \"Pacific/Kwajalein\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Majuro\",\n-                                        \"value\": \"Pacific/Majuro\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Marquesas\",\n-                                        \"value\": \"Pacific/Marquesas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Midway\",\n-                                        \"value\": \"Pacific/Midway\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Nauru\",\n-                                        \"value\": \"Pacific/Nauru\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Niue\",\n-                                        \"value\": \"Pacific/Niue\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Norfolk\",\n-                                        \"value\": \"Pacific/Norfolk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Noumea\",\n-                                        \"value\": \"Pacific/Noumea\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Pago_Pago\",\n-                                        \"value\": \"Pacific/Pago_Pago\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Palau\",\n-                                        \"value\": \"Pacific/Palau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Pitcairn\",\n-                                        \"value\": \"Pacific/Pitcairn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Pohnpei\",\n-                                        \"value\": \"Pacific/Pohnpei\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Ponape\",\n-                                        \"value\": \"Pacific/Ponape\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Port_Moresby\",\n-                                        \"value\": \"Pacific/Port_Moresby\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Rarotonga\",\n-                                        \"value\": \"Pacific/Rarotonga\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Saipan\",\n-                                        \"value\": \"Pacific/Saipan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Samoa\",\n-                                        \"value\": \"Pacific/Samoa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Tahiti\",\n-                                        \"value\": \"Pacific/Tahiti\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Tarawa\",\n-                                        \"value\": \"Pacific/Tarawa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Tongatapu\",\n-                                        \"value\": \"Pacific/Tongatapu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Truk\",\n-                                        \"value\": \"Pacific/Truk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Wake\",\n-                                        \"value\": \"Pacific/Wake\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Wallis\",\n-                                        \"value\": \"Pacific/Wallis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Yap\",\n-                                        \"value\": \"Pacific/Yap\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Poland\",\n-                                        \"value\": \"Poland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Portugal\",\n-                                        \"value\": \"Portugal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ROK\",\n-                                        \"value\": \"ROK\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Singapore\",\n-                                        \"value\": \"Singapore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/AST4\",\n-                                        \"value\": \"SystemV/AST4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/AST4ADT\",\n-                                        \"value\": \"SystemV/AST4ADT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/CST6\",\n-                                        \"value\": \"SystemV/CST6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/CST6CDT\",\n-                                        \"value\": \"SystemV/CST6CDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/EST5\",\n-                                        \"value\": \"SystemV/EST5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/EST5EDT\",\n-                                        \"value\": \"SystemV/EST5EDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/HST10\",\n-                                        \"value\": \"SystemV/HST10\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/MST7\",\n-                                        \"value\": \"SystemV/MST7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/MST7MDT\",\n-                                        \"value\": \"SystemV/MST7MDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/PST8\",\n-                                        \"value\": \"SystemV/PST8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/PST8PDT\",\n-                                        \"value\": \"SystemV/PST8PDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/YST9\",\n-                                        \"value\": \"SystemV/YST9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/YST9YDT\",\n-                                        \"value\": \"SystemV/YST9YDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Turkey\",\n-                                        \"value\": \"Turkey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UCT\",\n-                                        \"value\": \"UCT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Alaska\",\n-                                        \"value\": \"US/Alaska\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Aleutian\",\n-                                        \"value\": \"US/Aleutian\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Arizona\",\n-                                        \"value\": \"US/Arizona\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Central\",\n-                                        \"value\": \"US/Central\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/East-Indiana\",\n-                                        \"value\": \"US/East-Indiana\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Eastern\",\n-                                        \"value\": \"US/Eastern\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Hawaii\",\n-                                        \"value\": \"US/Hawaii\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Indiana-Starke\",\n-                                        \"value\": \"US/Indiana-Starke\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Michigan\",\n-                                        \"value\": \"US/Michigan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Mountain\",\n-                                        \"value\": \"US/Mountain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Pacific\",\n-                                        \"value\": \"US/Pacific\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Samoa\",\n-                                        \"value\": \"US/Samoa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTC\",\n-                                        \"value\": \"UTC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Universal\",\n-                                        \"value\": \"Universal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W-SU\",\n-                                        \"value\": \"W-SU\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WET\",\n-                                        \"value\": \"WET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Zulu\",\n-                                        \"value\": \"Zulu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EST\",\n-                                        \"value\": \"EST\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HST\",\n-                                        \"value\": \"HST\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MST\",\n-                                        \"value\": \"MST\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ACT\",\n-                                        \"value\": \"ACT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AET\",\n-                                        \"value\": \"AET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AGT\",\n-                                        \"value\": \"AGT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ART\",\n-                                        \"value\": \"ART\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AST\",\n-                                        \"value\": \"AST\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BET\",\n-                                        \"value\": \"BET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BST\",\n-                                        \"value\": \"BST\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CAT\",\n-                                        \"value\": \"CAT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CNT\",\n-                                        \"value\": \"CNT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CST\",\n-                                        \"value\": \"CST\"\n+                                        \"displayName\": \"UNCOMPRESSED\",\n+                                        \"value\": \"UNCOMPRESSED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CTT\",\n-                                        \"value\": \"CTT\"\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"EAT\",\n-                                        \"value\": \"EAT\"\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ECT\",\n-                                        \"value\": \"ECT\"\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"IET\",\n-                                        \"value\": \"IET\"\n+                                        \"displayName\": \"BROTLI\",\n+                                        \"value\": \"BROTLI\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"IST\",\n-                                        \"value\": \"IST\"\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"JST\",\n-                                        \"value\": \"JST\"\n+                                        \"displayName\": \"ZSTD\",\n+                                        \"value\": \"ZSTD\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"MIT\",\n-                                        \"value\": \"MIT\"\n-                                    },\n+                                        \"displayName\": \"LZ4_RAW\",\n+                                        \"value\": \"LZ4_RAW\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UNCOMPRESSED\",\n+                                \"description\": \"The type of compression for the file being written.\",\n+                                \"displayName\": \"Compression Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"compression-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dictionary-page-size\": {\n+                                \"description\": \"The dictionary page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Dictionary Page Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dictionary-page-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"enable-dictionary-encoding\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NET\",\n-                                        \"value\": \"NET\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NST\",\n-                                        \"value\": \"NST\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether dictionary encoding should be enabled for the Parquet writer\",\n+                                \"displayName\": \"Enable Dictionary Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"enable-dictionary-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"enable-validation\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLT\",\n-                                        \"value\": \"PLT\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PNT\",\n-                                        \"value\": \"PNT\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether validation should be enabled for the Parquet writer\",\n+                                \"displayName\": \"Enable Validation\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"enable-validation\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"max-padding-size\": {\n+                                \"description\": \"The maximum amount of padding that will be used to align row groups with blocks in the underlying filesystem. If the underlying filesystem is not a block filesystem like HDFS, this has no effect. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Max Padding Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"max-padding-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"overwrite\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PRT\",\n-                                        \"value\": \"PRT\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PST\",\n-                                        \"value\": \"PST\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not to overwrite existing files in the same directory with the same name. When set to false, flow files will be routed to failure when a file exists in the same directory with the same name.\",\n+                                \"displayName\": \"Overwrite Files\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"overwrite\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"page-size\": {\n+                                \"description\": \"The page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Page Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"page-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"permissions-umask\": {\n+                                \"description\": \"A umask represented as an octal number which determines the permissions of files written to HDFS. This overrides the Hadoop Configuration dfs.umaskmode\",\n+                                \"displayName\": \"Permissions umask\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"permissions-umask\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The service for reading records from incoming flow files.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"remote-group\": {\n+                                \"description\": \"Changes the group of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change group\",\n+                                \"displayName\": \"Remote Group\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"remote-group\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"remote-owner\": {\n+                                \"description\": \"Changes the owner of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change owner\",\n+                                \"displayName\": \"Remote Owner\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"remote-owner\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"remove-crc-files\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SST\",\n-                                        \"value\": \"SST\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"VST\",\n-                                        \"value\": \"VST\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UTC\",\n-                                \"description\": \"The Time Zone to use for formatting dates when performing a search. Only used with Managed time strategies.\",\n-                                \"displayName\": \"Time Zone\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether the corresponding CRC file should be deleted upon successfully writing a Parquet file\",\n+                                \"displayName\": \"Remove CRC Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Zone\",\n-                                \"required\": true,\n+                                \"name\": \"remove-crc-files\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Token\": {\n-                                \"description\": \"The token to pass to Splunk.\",\n-                                \"displayName\": \"Token\",\n+                            \"row-group-size\": {\n+                                \"description\": \"The row group size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Row Group Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Token\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"row-group-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to authenticate to Splunk.\",\n-                                \"displayName\": \"Username\",\n+                            \"writer-version\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PARQUET_1_0\",\n+                                        \"value\": \"PARQUET_1_0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PARQUET_2_0\",\n+                                        \"value\": \"PARQUET_2_0\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version used by Parquet writer\",\n+                                \"displayName\": \"Writer Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"writer-version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The name of the file to write comes from the value of this attribute.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"If using one of the managed Time Range Strategies, this processor will store the values of the latest and earliest times from the previous execution so that the next execution of the can pick up where the last execution left off. The state will be cleared and start over if the query is changed.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Results retrieved from Splunk are sent out this relationship.\",\n+                                \"description\": \"Flow Files that could not be processed due to issues that can be retried are transferred to this relationship\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"Flow Files that have been successfully processed are transferred to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Flow Files that could not be processed due to issue that cannot be retried are transferred to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"get\",\n-                            \"logs\",\n-                            \"splunk\"\n+                            \"HDFS\",\n+                            \"filesystem\",\n+                            \"hadoop\",\n+                            \"parquet\",\n+                            \"put\",\n+                            \"record\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.splunk.GetSplunk\",\n-                        \"typeDescription\": \"Retrieves data from Splunk Enterprise.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.parquet.PutParquet\",\n+                        \"typeDescription\": \"Reads records from an incoming FlowFile using the provided Record Reader, and writes those records to a Parquet file. The schema for the Parquet file must be provided in the processor properties. This processor will first write a temporary dot file and upon successfully writing every record to the dot file, it will rename the dot file to it's final name. If the dot file cannot be renamed, the rename operation will be attempted up to 10 times, and if still not successful, the dot file will be deleted and the flow file will be routed to failure.  If any error occurs while reading records from the input, or writing records to the output, the entire dot file will be removed and the flow file will be routed to failure or retry, depending on the error.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The query that performed to produce the FlowFile.\",\n-                                \"name\": \"splunk.query\"\n+                                \"description\": \"The name of the file is stored in this attribute.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The value of the earliest time that was used when performing the query.\",\n-                                \"name\": \"splunk.earliest.time\"\n+                                \"description\": \"The absolute path to the file is stored in this attribute.\",\n+                                \"name\": \"absolute.hdfs.path\"\n                             },\n                             {\n-                                \"description\": \"The value of the latest time that was used when performing the query.\",\n-                                \"name\": \"splunk.latest.time\"\n+                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n+                                \"name\": \"hadoop.file.url\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records written to the Parquet file\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-html-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"artifact\": \"nifi-html-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -43909,169 +37516,193 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the data being sent.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Append Element Value\": {\n+                                \"description\": \"Appends the specified value to the resulting Element\",\n+                                \"displayName\": \"Append Element Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Append Element Value\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Destination hostname or IP address\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Attribute Name\": {\n+                                \"description\": \"When getting the value of a HTML element attribute this value is used as the key to determine which attribute on the selected element should be retrieved. This value is used when the \\\"Output Type\\\" is set to \\\"Attribute\\\". If this value is prefixed with 'abs:', then the extracted attribute value will be converted into an absolute URL form using the specified base URL.\",\n+                                \"displayName\": \"Attribute Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Attribute Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Idle Connection Expiration\": {\n-                                \"defaultValue\": \"15 seconds\",\n-                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n-                                \"displayName\": \"Idle Connection Expiration\",\n+                            \"CSS Selector\": {\n+                                \"description\": \"CSS selector syntax string used to extract the desired HTML element(s).\",\n+                                \"displayName\": \"CSS Selector\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Idle Connection Expiration\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"CSS Selector\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Send Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                            \"Destination\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-attribute\",\n+                                \"description\": \"Control if element extracted is written as a flowfile attribute or as flowfile content.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Send Buffer\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Delimiter\": {\n-                                \"description\": \"Specifies the delimiter to use for splitting apart multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate message. Note that if messages are delimited and some messages for a given FlowFile are transferred successfully while others are not, the messages will be split into individual FlowFiles, such that those messages that were successfully sent are routed to the 'success' relationship while other messages are sent to the 'failure' relationship.\",\n-                                \"displayName\": \"Message Delimiter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message Delimiter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"description\": \"Destination port number\",\n-                                \"displayName\": \"Port\",\n+                            \"HTML Character Encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Character encoding of the input HTML\",\n+                                \"displayName\": \"HTML Character Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"HTML Character Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Protocol\": {\n+                            \"Output Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TCP\",\n-                                        \"value\": \"TCP\"\n+                                        \"displayName\": \"HTML\",\n+                                        \"value\": \"HTML\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UDP\",\n-                                        \"value\": \"UDP\"\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Attribute\",\n+                                        \"value\": \"Attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Data\",\n+                                        \"value\": \"Data\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"TCP\",\n-                                \"description\": \"The protocol for communication.\",\n-                                \"displayName\": \"Protocol\",\n+                                \"defaultValue\": \"HTML\",\n+                                \"description\": \"Controls the type of DOM value that is retrieved from the HTML element.\",\n+                                \"displayName\": \"Output Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protocol\",\n+                                \"name\": \"Output Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies the SSL Context Service to enable TLS socket communication\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Prepend Element Value\": {\n+                                \"description\": \"Prepends the specified value to the resulting Element\",\n+                                \"displayName\": \"Prepend Element Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Prepend Element Value\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n-                                \"displayName\": \"Timeout\",\n+                            \"URL\": {\n+                                \"description\": \"Base URL for the HTML page being parsed. This URL will be used to resolve an absolute URL when an attribute value is extracted from a HTML element.\",\n+                                \"displayName\": \"URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Timeout\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"URL\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.ModifyHTMLElement\",\n+                            \"org.apache.nifi.PutHTMLElement\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n+                                \"description\": \"Element could not be found in the HTML document. The original HTML input will remain in the FlowFile content unchanged. Relationship 'original' will not be invoked in this scenario.\",\n+                                \"name\": \"element not found\"\n+                            },\n+                            {\n+                                \"description\": \"Successfully parsed HTML element\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The original HTML input\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The input HTML syntax is invalid\",\n+                                \"name\": \"invalid html\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"logs\",\n-                            \"splunk\",\n-                            \"tcp\",\n-                            \"udp\"\n+                            \"css\",\n+                            \"dom\",\n+                            \"element\",\n+                            \"get\",\n+                            \"html\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.splunk.PutSplunk\",\n-                        \"typeDescription\": \"Sends logs to Splunk Enterprise over TCP, TCP + TLS/SSL, or UDP. If a Message Delimiter is provided, then this processor will read messages from the incoming FlowFile based on the delimiter, and send each message to Splunk. If a Message Delimiter is not provided then the content of the FlowFile will be sent directly to Splunk as if it were a single message.\",\n-                        \"version\": \"1.27.0\"\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.GetHTMLElement\",\n+                        \"typeDescription\": \"Extracts HTML element values from the incoming flowfile's content using a CSS selector. The incoming HTML is first converted into a HTML Document Object Model so that HTML elements may be selected in the similar manner that CSS selectors are used to apply styles to HTML. The resulting HTML DOM is then \\\"queried\\\" using the user defined CSS selector string. The result of \\\"querying\\\" the HTML DOM may produce 0-N results. If no results are found the flowfile will be transferred to the \\\"element not found\\\" relationship to indicate so to the end user. If N results are found a new flowfile will be created and emitted for each result. The query result will either be placed in the content of the new flowfile or as an attribute of the new flowfile. By default the result is written to an attribute. This can be controlled by the \\\"Destination\\\" property. Resulting query values may also have data prepended or appended to them by setting the value of property \\\"Prepend Element Value\\\" or \\\"Append Element Value\\\". Prepended and appended values are treated as string values and concatenated to the result retrieved from the HTML DOM query operation. A more thorough reference for the CSS selector syntax can be found at \\\"http://jsoup.org/apidocs/org/jsoup/select/Selector.html\\\"\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Flowfile attribute where the element result parsed from the HTML using the CSS selector syntax are placed if the destination is a flowfile attribute.\",\n+                                \"name\": \"HTMLElement\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-html-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -44079,268 +37710,570 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the Splunk server.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Attribute Name\": {\n+                                \"description\": \"When modifying the value of an element attribute this value is used as the key to determine which attribute on the selected element will be modified with the new value.\",\n+                                \"displayName\": \"Attribute Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Attribute Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Owner\": {\n-                                \"description\": \"The owner to pass to Splunk.\",\n-                                \"displayName\": \"Owner\",\n+                            \"CSS Selector\": {\n+                                \"description\": \"CSS selector syntax string used to extract the desired HTML element(s).\",\n+                                \"displayName\": \"CSS Selector\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Owner\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"CSS Selector\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password to authenticate to Splunk.\",\n-                                \"displayName\": \"Password\",\n+                            \"HTML Character Encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Character encoding of the input HTML\",\n+                                \"displayName\": \"HTML Character Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"HTML Character Encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8088\",\n-                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n-                                \"displayName\": \"HTTP Event Collector Port\",\n+                            \"Modified Value\": {\n+                                \"description\": \"Value to update the found HTML elements with\",\n+                                \"displayName\": \"Modified Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Modified Value\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Scheme\": {\n+                            \"Output Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"https\",\n-                                        \"value\": \"https\"\n+                                        \"displayName\": \"HTML\",\n+                                        \"value\": \"HTML\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"http\",\n-                                        \"value\": \"http\"\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Attribute\",\n+                                        \"value\": \"Attribute\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"https\",\n-                                \"description\": \"The scheme for connecting to Splunk.\",\n-                                \"displayName\": \"Scheme\",\n+                                \"defaultValue\": \"HTML\",\n+                                \"description\": \"Controls whether the HTML element is output as HTML,Text or Data\",\n+                                \"displayName\": \"Output Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Scheme\",\n+                                \"name\": \"Output Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.GetHTMLElement\",\n+                            \"org.apache.nifi.PutHTMLElement\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Element could not be found in the HTML document. The original HTML input will remain in the FlowFile content unchanged. Relationship 'original' will not be invoked in this scenario.\",\n+                                \"name\": \"element not found\"\n                             },\n-                            \"Security Protocol\": {\n+                            {\n+                                \"description\": \"Successfully parsed HTML element\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"The original HTML input\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The input HTML syntax is invalid\",\n+                                \"name\": \"invalid html\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"css\",\n+                            \"dom\",\n+                            \"element\",\n+                            \"html\",\n+                            \"modify\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.ModifyHTMLElement\",\n+                        \"typeDescription\": \"Modifies the value of an existing HTML element. The desired element to be modified is located by using CSS selector syntax. The incoming HTML is first converted into a HTML Document Object Model so that HTML elements may be selected in the similar manner that CSS selectors are used to apply styles to HTML. The resulting HTML DOM is then \\\"queried\\\" using the user defined CSS selector string to find the element the user desires to modify. If the HTML element is found the element's value is updated in the DOM using the value specified \\\"Modified Value\\\" property. All DOM elements that match the CSS selector will be updated. Once all of the DOM elements have been updated the DOM is rendered to HTML and the result replaces the flowfile content with the updated HTML. A more thorough reference for the CSS selector syntax can be found at \\\"http://jsoup.org/apidocs/org/jsoup/select/Selector.html\\\"\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Total number of HTML element modifications made\",\n+                                \"name\": \"NumElementsModified\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-html-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"CSS Selector\": {\n+                                \"description\": \"CSS selector syntax string used to extract the desired HTML element(s).\",\n+                                \"displayName\": \"CSS Selector\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"CSS Selector\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Element Insert Location Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_2\",\n-                                        \"value\": \"TLSv1_2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_1\",\n-                                        \"value\": \"TLSv1_1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1\",\n-                                        \"value\": \"TLSv1\"\n+                                        \"displayName\": \"append-html\",\n+                                        \"value\": \"append-html\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SSLv3\",\n-                                        \"value\": \"SSLv3\"\n+                                        \"displayName\": \"prepend-html\",\n+                                        \"value\": \"prepend-html\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"TLSv1_2\",\n-                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"defaultValue\": \"append-html\",\n+                                \"description\": \"Controls whether the new element is prepended or appended to the children of the Element located by the CSS selector. EX: prepended value '<b>Hi</b>' inside of Element (using CSS Selector 'p') '<p>There</p>' would result in '<p><b>Hi</b>There</p>'. Appending the value would result in '<p>There<b>Hi</b></p>'\",\n+                                \"displayName\": \"Element Insert Location Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Security Protocol\",\n-                                \"required\": false,\n+                                \"name\": \"Element Insert Location Type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Token\": {\n-                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n-                                \"displayName\": \"HTTP Event Collector Token\",\n+                            \"HTML Character Encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Character encoding of the input HTML\",\n+                                \"displayName\": \"HTML Character Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Token\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"HTML Character Encoding\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to authenticate to Splunk.\",\n-                                \"displayName\": \"Username\",\n+                            \"Put Value\": {\n+                                \"description\": \"Value used when creating the new Element. Value should be a valid HTML element. The text should be supplied unencoded: characters like '<', '>', etc will be properly HTML encoded in the resulting output.\",\n+                                \"displayName\": \"Put Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Put Value\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.GetHTMLElement\",\n+                            \"org.apache.nifi.ModifyHTMLElement\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Element could not be found in the HTML document. The original HTML input will remain in the FlowFile content unchanged. Relationship 'original' will not be invoked in this scenario.\",\n+                                \"name\": \"element not found\"\n+                            },\n+                            {\n+                                \"description\": \"Successfully parsed HTML element\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"The original HTML input\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The input HTML syntax is invalid\",\n+                                \"name\": \"invalid html\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"css\",\n+                            \"dom\",\n+                            \"element\",\n+                            \"html\",\n+                            \"put\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.PutHTMLElement\",\n+                        \"typeDescription\": \"Places a new HTML element in the existing HTML DOM. The desired position for the new HTML element is specified by using CSS selector syntax. The incoming HTML is first converted into a HTML Document Object Model so that HTML DOM location may be located in a similar manner that CSS selectors are used to apply styles to HTML. The resulting HTML DOM is then \\\"queried\\\" using the user defined CSS selector string to find the position where the user desires to add the new HTML element. Once the new HTML element is added to the DOM it is rendered to HTML and the result replaces the flowfile content with the updated HTML. A more thorough reference for the CSS selector syntax can be found at \\\"http://jsoup.org/apidocs/org/jsoup/select/Selector.html\\\"\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-groovyx-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-groovyx-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value. Use `CTL.` to access any controller services, `SQL.` to access any DBCPServices, `RecordReader.` to access RecordReaderFactory instances, or `RecordWriter.` to access any RecordSetWriterFactory instances.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"A script engine property to update\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"groovyx-additional-classpath\": {\n+                                \"description\": \"Classpath list separated by semicolon or comma. You can use masks like `*`, `*.jar` in file name.\",\n+                                \"displayName\": \"Additional classpath\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"groovyx-additional-classpath\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The name of the character set.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"groovyx-failure-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"rollback\",\n+                                        \"value\": \"rollback\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"transfer to failure\",\n+                                        \"value\": \"transfer to failure\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"rollback\",\n+                                \"description\": \"What to do with unhandled exceptions. If you want to manage exception by code then keep the default value `rollback`. If `transfer to failure` selected and unhandled exception occurred then all flowFiles received from incoming queues in this session will be transferred to `failure` relationship with additional attributes set: ERROR_MESSAGE and ERROR_STACKTRACE. If `rollback` selected and unhandled exception occurred then all flowFiles received from incoming queues will be penalized and returned. If the processor has no incoming connections then this parameter has no effect.\",\n+                                \"displayName\": \"Failure strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"character-set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"groovyx-failure-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"content-type\": {\n-                                \"description\": \"The media type of the event sent to Splunk. If not set, \\\"mime.type\\\" flow file attribute will be used. In case of neither of them is specified, this information will not be sent to the server.\",\n-                                \"displayName\": \"Content Type\",\n+                            \"groovyx-script-body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"content-type\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"groovyx-script-body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"host\": {\n-                                \"description\": \"Specify with the host query string parameter. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Host\",\n+                            \"groovyx-script-file\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"host\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"groovyx-script-file\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.script.ExecuteScript\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that were successfully processed\",\n+                                \"name\": \"success\"\n                             },\n-                            \"index\": {\n-                                \"description\": \"Index name. Specify with the index query string parameter. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Index\",\n+                            {\n+                                \"description\": \"FlowFiles that failed to be processed\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"groovyx\",\n+                            \"script\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.groovyx.ExecuteGroovyScript\",\n+                        \"typeDescription\": \"Experimental Extended Groovy script processor. The script is responsible for handling the incoming flow file (transfer to SUCCESS or remove, e.g.) as well as any flow files created by the script. If the handling is incomplete or incorrect, the session will be rolled back.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jetty-bundle\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-salesforce-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-salesforce-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"oauth2-access-token-provider\": {\n+                                \"description\": \"Service providing OAuth2 Access Tokens for authenticating using the HTTP Authorization Header\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"index\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"oauth2-access-token-provider\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"request-channel\": {\n-                                \"description\": \"Identifier of the used request channel.\",\n-                                \"displayName\": \"Splunk Request Channel\",\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"15 s\",\n+                                \"description\": \"Maximum time allowed for reading a response from the Salesforce REST API\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"request-channel\",\n+                                \"name\": \"read-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"source\": {\n-                                \"description\": \"User-defined event source. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Source\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"source\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"salesforce-api-version\": {\n+                                \"defaultValue\": \"54.0\",\n+                                \"description\": \"The version number of the Salesforce REST API appended to the URL after the services/data path. See Salesforce documentation for supported versions\",\n+                                \"displayName\": \"API Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"salesforce-api-version\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"source-type\": {\n-                                \"description\": \"User-defined event sourcetype. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Source Type\",\n+                            \"salesforce-url\": {\n+                                \"description\": \"The URL of the Salesforce instance including the domain without additional path information, such as https://MyDomainName.my.salesforce.com\",\n+                                \"displayName\": \"Salesforce Instance URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"source-type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"salesforce-url\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"Uses as value for HTTP Content-Type header if set.\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The Salesforce object type to upload records to. E.g. Account, Contact, Campaign.\",\n+                                \"name\": \"objectType\"\n                             }\n                         ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.splunk.QuerySplunkIndexingStatus\"\n+                            \"org.apache.nifi.processors.salesforce.QuerySalesforceObject\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are sent to this relationship.\",\n+                                \"description\": \"For FlowFiles created as a result of a successful execution.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are sent to this relationship.\",\n+                                \"description\": \"For FlowFiles created as a result of an execution error.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"http\",\n-                            \"logs\",\n-                            \"splunk\"\n+                            \"put\",\n+                            \"salesforce\",\n+                            \"sobject\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.splunk.PutSplunkHTTP\",\n-                        \"typeDescription\": \"Sends flow file content to the specified Splunk server over HTTP or HTTPS. Supports HEC Index Acknowledgement.\",\n+                        \"type\": \"org.apache.nifi.processors.salesforce.PutSalesforceObject\",\n+                        \"typeDescription\": \"Creates new records for the specified Salesforce sObject. The type of the Salesforce object must be set in the input flowfile's 'objectType' attribute. This processor cannot update existing records.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The indexing acknowledgement id provided by Splunk.\",\n-                                \"name\": \"splunk.acknowledgement.id\"\n-                            },\n-                            {\n-                                \"description\": \"The time of the response of put request for Splunk.\",\n-                                \"name\": \"splunk.responded.at\"\n+                                \"description\": \"The error message returned by Salesforce.\",\n+                                \"name\": \"error.message\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"artifact\": \"nifi-salesforce-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -44349,485 +38282,813 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the Splunk server.\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Owner\": {\n-                                \"description\": \"The owner to pass to Splunk.\",\n-                                \"displayName\": \"Owner\",\n+                            \"age-delay\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Age Field\",\n+                                        \"propertyName\": \"age-field\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35.\",\n+                                \"displayName\": \"Age Delay\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Owner\",\n+                                \"name\": \"age-delay\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password to authenticate to Splunk.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8088\",\n-                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n-                                \"displayName\": \"HTTP Event Collector Port\",\n+                            \"age-field\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The name of a TIMESTAMP field that will be used to filter records using a bounded time window.The processor will return only those records with a timestamp value newer than the timestamp recorded after the last processor run.\",\n+                                \"displayName\": \"Age Field\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"name\": \"age-field\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Scheme\": {\n+                            \"create-zero-record-files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"https\",\n-                                        \"value\": \"https\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"http\",\n-                                        \"value\": \"http\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"https\",\n-                                \"description\": \"The scheme for connecting to Splunk.\",\n-                                \"displayName\": \"Scheme\",\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether or not to create a FlowFile when the Salesforce REST API does not return any records\",\n+                                \"displayName\": \"Create Zero Record FlowFiles\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Scheme\",\n+                                \"name\": \"create-zero-record-files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Security Protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_2\",\n-                                        \"value\": \"TLSv1_2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_1\",\n-                                        \"value\": \"TLSv1_1\"\n-                                    },\n+                            \"custom-soql-query\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1\",\n-                                        \"value\": \"TLSv1\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"custom-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify the SOQL query to run.\",\n+                                \"displayName\": \"Custom SOQL Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"custom-soql-query\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"custom-where-condition\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSLv3\",\n-                                        \"value\": \"SSLv3\"\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"TLSv1_2\",\n-                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"description\": \"A custom expression to be added in the WHERE clause of the query\",\n+                                \"displayName\": \"Custom WHERE Condition\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Security Protocol\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"custom-where-condition\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Token\": {\n-                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n-                                \"displayName\": \"HTTP Event Collector Token\",\n+                            \"field-names\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Comma-separated list of field names requested from the sObject to be queried. When this field is left empty, all fields are queried.\",\n+                                \"displayName\": \"Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Token\",\n+                                \"name\": \"field-names\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to authenticate to Splunk.\",\n-                                \"displayName\": \"Username\",\n+                            \"initial-age-filter\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Age Field\",\n+                                        \"propertyName\": \"age-field\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"This property specifies the start time that the processor applies when running the first query.\",\n+                                \"displayName\": \"Initial Age Start Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"initial-age-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-query-size\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum number of acknowledgement identifiers the outgoing query contains in one batch. It is recommended not to set it too low in order to reduce network communication.\",\n-                                \"displayName\": \"Maximum Query Size\",\n+                            \"oauth2-access-token-provider\": {\n+                                \"description\": \"Service providing OAuth2 Access Tokens for authenticating using the HTTP Authorization Header\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-query-size\",\n+                                \"name\": \"oauth2-access-token-provider\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"query-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Provide query by properties.\",\n+                                        \"displayName\": \"Property Based Query\",\n+                                        \"value\": \"property-based-query\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provide custom SOQL query.\",\n+                                        \"displayName\": \"Custom Query\",\n+                                        \"value\": \"custom-query\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"property-based-query\",\n+                                \"description\": \"Choose to provide the query by parameters or a full custom query.\",\n+                                \"displayName\": \"Query Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"query-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"request-channel\": {\n-                                \"description\": \"Identifier of the used request channel.\",\n-                                \"displayName\": \"Splunk Request Channel\",\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"15 s\",\n+                                \"description\": \"Maximum time allowed for reading a response from the Salesforce REST API\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"request-channel\",\n+                                \"name\": \"read-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ttl\": {\n-                                \"defaultValue\": \"1 hour\",\n-                                \"description\": \"The maximum time the processor tries to acquire acknowledgement confirmation for an index, from the point of registration. After the given amount of time, the processor considers the index as not acknowledged and transfers the FlowFile to the \\\"unacknowledged\\\" relationship.\",\n-                                \"displayName\": \"Maximum Waiting Time\",\n+                            \"record-writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service used for writing records returned from the Salesforce REST API\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ttl\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"salesforce-api-version\": {\n+                                \"defaultValue\": \"54.0\",\n+                                \"description\": \"The version number of the Salesforce REST API appended to the URL after the services/data path. See Salesforce documentation for supported versions\",\n+                                \"displayName\": \"API Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"salesforce-api-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The indexing acknowledgement id provided by Splunk.\",\n-                                \"name\": \"splunk.acknowledgement.id\"\n                             },\n-                            {\n-                                \"description\": \"The time of the response of put request for Splunk.\",\n-                                \"name\": \"splunk.responded.at\"\n+                            \"salesforce-url\": {\n+                                \"description\": \"The URL of the Salesforce instance including the domain without additional path information, such as https://MyDomainName.my.salesforce.com\",\n+                                \"displayName\": \"Salesforce Instance URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"salesforce-url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"sobject-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Salesforce sObject to be queried\",\n+                                \"displayName\": \"sObject Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sobject-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n-                        ],\n+                        },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.splunk.PutSplunkHTTP\"\n+                            \"org.apache.nifi.processors.salesforce.PutSalesforceObject\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"When 'Age Field' is set, after performing a query the time of execution is stored. Subsequent queries will be augmented with an additional condition so that only records that are newer than the stored execution time (adjusted with the optional value of 'Age Delay') will be retrieved. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was successful.\",\n+                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful. This can happen when the acknowledgement did not happened within the time period set for Maximum Waiting Time. FlowFiles with acknowledgement id unknown for the Splunk server will be transferred to this relationship after the Maximum Waiting Time is reached.\",\n-                                \"name\": \"unacknowledged\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement state is not determined. FlowFiles transferred to this relationship might be penalized. This happens when Splunk returns with HTTP 200 but with false response for the acknowledgement id in the flow file attribute.\",\n-                                \"name\": \"undetermined\"\n+                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful due to errors during the communication. FlowFiles are timing out or unknown by the Splunk server will transferred to \\\"undetermined\\\" relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The input flowfile gets sent to this relationship when the query succeeds.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"acknowledgement\",\n-                            \"http\",\n-                            \"logs\",\n-                            \"splunk\"\n+                            \"query\",\n+                            \"salesforce\",\n+                            \"sobject\",\n+                            \"soql\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.splunk.QuerySplunkIndexingStatus\",\n-                        \"typeDescription\": \"Queries Splunk server in order to acquire the status of indexing acknowledgement.\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.salesforce.QuerySalesforceObject\",\n+                        \"typeDescription\": \"Retrieves records from a Salesforce sObject. Users can add arbitrary filter conditions by setting the 'Custom WHERE Condition' property. The processor can also run a custom query, although record processing is not supported in that case. Supports incremental retrieval: users can define a field in the 'Age Field' property that will be used to determine when the record was created. When this property is set the processor will retrieve new records. Incremental loading and record-based processing are only supported in property-based queries. It's also possible to define an initial cutoff value for the age, filtering out all older records even for the first run. In case of 'Property Based Query' this processor should run on the Primary Node only. FlowFile attribute 'record.count' indicates how many records were retrieved and written to the output. The processor can accept an optional input FlowFile and reference the FlowFile attributes in the query.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the number of records in the FlowFile.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the total number of records in the FlowFile.\",\n+                                \"name\": \"total.record.count\"\n+                            }\n+                        ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-aws-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-box-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-geohash-nar\",\n+            \"artifact\": \"nifi-windows-event-log-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-geohash-nar\",\n+                        \"artifact\": \"nifi-windows-event-log-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"geohash-format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BASE32\",\n-                                        \"value\": \"BASE32\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BINARY\",\n-                                        \"value\": \"BINARY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LONG\",\n-                                        \"value\": \"LONG\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"BASE32\",\n-                                \"description\": \"In the ENCODE mode, this property specifies the desired format for encoding geohash; in the DECODE mode, this property specifies the format of geohash provided\",\n-                                \"displayName\": \"Geohash Format\",\n+                            \"channel\": {\n+                                \"defaultValue\": \"System\",\n+                                \"description\": \"The Windows Event Log Channel to listen to.\",\n+                                \"displayName\": \"Channel\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"geohash-format\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"channel\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"geohash-level\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"ENCODE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Mode\",\n-                                        \"propertyName\": \"mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"The integer precision level(1-12) desired for encoding geohash\",\n-                                \"displayName\": \"Geohash Level\",\n+                            \"inactiveDurationToReconnect\": {\n+                                \"defaultValue\": \"10 mins\",\n+                                \"description\": \"If no new event logs are processed for the specified time period, this processor will try reconnecting to recover from a state where any further messages cannot be consumed. Such situation can happen if Windows Event Log service is restarted, or ERROR_EVT_QUERY_RESULT_STALE (15011) is returned. Setting no duration, e.g. '0 ms' disables auto-reconnection.\",\n+                                \"displayName\": \"Inactive duration to reconnect\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geohash-level\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"inactiveDurationToReconnect\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"geohash-record-path\": {\n-                                \"description\": \"In the ENCODE mode, this property specifies the record path to put the geohash value; in the DECODE mode, this property specifies the record path to retrieve the geohash value\",\n-                                \"displayName\": \"Geohash Record Path\",\n+                            \"maxBuffer\": {\n+                                \"defaultValue\": \"1048576\",\n+                                \"description\": \"The individual Event Log XMLs are rendered to a buffer.  This specifies the maximum size in bytes that the buffer will be allowed to grow to. (Limiting the maximum size of an individual Event XML.)\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geohash-record-path\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"maxBuffer\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"latitude-record-path\": {\n-                                \"description\": \"In the ENCODE mode, this property specifies the record path to retrieve the latitude values. Latitude values should be in the range of [-90, 90]; invalid values will be logged at warn level. In the DECODE mode, this property specifies the record path to put the latitude value\",\n-                                \"displayName\": \"Latitude Record Path\",\n+                            \"maxQueue\": {\n+                                \"defaultValue\": \"1024\",\n+                                \"description\": \"Events are received asynchronously and must be output as FlowFiles when the processor is triggered.  This specifies the maximum number of events to queue for transformation into FlowFiles.\",\n+                                \"displayName\": \"Maximum queue size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"latitude-record-path\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"maxQueue\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"longitude-record-path\": {\n-                                \"description\": \"In the ENCODE mode, this property specifies the record path to retrieve the longitude values; Longitude values should be in the range of [-180, 180]; invalid values will be logged at warn level. In the DECODE mode, this property specifies the record path to put the longitude value\",\n-                                \"displayName\": \"Longitude Record Path\",\n+                            \"query\": {\n+                                \"defaultValue\": \"*\",\n+                                \"description\": \"XPath Query to filter events. (See https://msdn.microsoft.com/en-us/library/windows/desktop/dd996910(v=vs.85).aspx for examples.)\",\n+                                \"displayName\": \"XPath Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"longitude-record-path\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"query\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Relationship for successfully consumed events.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"event\",\n+                            \"ingest\",\n+                            \"windows\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.windows.event.log.ConsumeWindowsEventLog\",\n+                        \"typeDescription\": \"Registers a Windows Event Log Subscribe Callback to receive FlowFiles from Events on Windows.  These can be filtered via channel and XPath.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Will set a MIME type value of application/xml.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-mongodb-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mongodb-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Database User\": {\n+                                \"description\": \"Database user name\",\n+                                \"displayName\": \"Database User\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Database User\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password for the database user\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"mongo-uri\": {\n+                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n+                                \"displayName\": \"Mongo URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"mongo-uri\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mode\": {\n+                            \"ssl-client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ENCODE\",\n-                                        \"value\": \"ENCODE\"\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DECODE\",\n-                                        \"value\": \"DECODE\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ENCODE\",\n-                                \"description\": \"Specifies whether to encode latitude/longitude to geohash or decode geohash to latitude/longitude\",\n-                                \"displayName\": \"Mode\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mode\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-client-auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the record reader service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"mongo\",\n+                            \"mongodb\",\n+                            \"service\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.mongodb.MongoDBControllerService\",\n+                        \"typeDescription\": \"Provides a controller service that configures a connection to MongoDB and provides access to that connection to other Mongo-related components.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mongodb-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"mongo-collection-name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-collection-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the record writer service to use for writing data\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"mongo-db-name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-db-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"mongo-lookup-client-service\": {\n+                                \"description\": \"A MongoDB controller service to use with this lookup service.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"mongo-lookup-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"routing-strategy\": {\n+                            \"mongo-lookup-projection\": {\n+                                \"description\": \"Specifies a projection for limiting which fields will be returned.\",\n+                                \"displayName\": \"Projection\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mongo-lookup-projection\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"mongo-lookup-value-field\": {\n+                                \"description\": \"The field whose value will be returned when the lookup key(s) match a record. If not specified then the entire MongoDB result document minus the _id field will be returned as a record.\",\n+                                \"displayName\": \"Lookup Value Field\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mongo-lookup-value-field\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKIP\",\n-                                        \"value\": \"SKIP\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SPLIT\",\n-                                        \"value\": \"SPLIT\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"REQUIRE\",\n-                                        \"value\": \"REQUIRE\"\n+                                        \"displayName\": \"Infer from Result\",\n+                                        \"value\": \"infer\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SKIP\",\n-                                \"description\": \"Specifies how to route flowfiles after encoding or decoding being performed. SKIP will enrich those records that can be enriched and skip the rest. The SKIP strategy will route a flowfile to failure only if unable to parse the data. Otherwise, it will route the enriched flowfile to success, and the original input to original. SPLIT will separate the records that have been enriched from those that have not and send them to matched, while unenriched records will be sent to unmatched; the original input flowfile will be sent to original. The SPLIT strategy will route a flowfile to failure only if unable to parse the data. REQUIRE will route a flowfile to success only if all of its records are enriched, and the original input will be sent to original. The REQUIRE strategy will route the original input flowfile to failure if any of its records cannot be enriched or unable to be parsed\",\n-                                \"displayName\": \"Routing Strategy\",\n+                                \"defaultValue\": \"infer\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"routing-strategy\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Flowfiles that are successfully encoded or decoded will be routed to success\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"Flowfiles that cannot be encoded or decoded will be routed to failure\",\n-                                \"name\": \"failure\"\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The original input flowfile will be sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"geo\",\n-                            \"geohash\",\n+                            \"lookup\",\n+                            \"mongo\",\n+                            \"mongodb\",\n                             \"record\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.geohash.GeohashRecord\",\n-                        \"typeDescription\": \"A record-based processor that encodes and decodes Geohashes from and to latitude/longitude coordinates.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The MIME type indicated by the record writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the resulting flow file\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.mongodb.MongoDBLookupService\",\n+                        \"typeDescription\": \"Provides a lookup service based around MongoDB. Each key that is specified \\nwill be added to a query as-is. For example, if you specify the two keys, \\nuser and email, the resulting query will be { \\\"user\\\": \\\"tester\\\", \\\"email\\\": \\\"tester@test.com\\\" }.\\nThe query is limited to the first result (findOne in the Mongo documentation). If no \\\"Lookup Value Field\\\" is specified then the entire MongoDB result document minus the _id field will be returned as a record.\",\n+                        \"version\": \"1.27.0\"\n                     }\n                 ],\n+                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n             \"artifact\": \"nifi-site-to-site-reporting-nar\",\n@@ -46136,987 +40397,3521 @@\n                     }\n                 ]\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-db-schema-registry-service-nar\",\n+            \"artifact\": \"nifi-spring-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-spring-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"Alternative event-handling solutions should be used\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Application Context class path\": {\n+                                \"description\": \"Path to the directory with resources (i.e., JARs, configuration files etc.) required to be on the classpath of the ApplicationContext.\",\n+                                \"displayName\": \"Application Context class path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Application Context class path\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Application Context config path\": {\n+                                \"description\": \"The path to the Spring Application Context configuration file relative to the classpath\",\n+                                \"displayName\": \"Application Context config path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Application Context config path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Receive Timeout\": {\n+                                \"description\": \"Timeout for receiving date from Spring context. Defaults to 0.\",\n+                                \"displayName\": \"Receive Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Send Timeout\": {\n+                                \"description\": \"Timeout for sending data to Spring Application Context. Defaults to 0.\",\n+                                \"displayName\": \"Send Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Send Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that are successfully received from Spring Application Context are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be sent to Spring Application Context are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Get\",\n+                            \"Integration\",\n+                            \"Message\",\n+                            \"Put\",\n+                            \"Spring\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.spring.SpringContextProcessor\",\n+                        \"typeDescription\": \"A Processor that supports sending and receiving data from application defined in Spring Application Context via predefined in/out MessageChannels.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-network-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-network-processors-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"FIELDS_DESTINATION\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Parsed data routes as flowfile JSON content\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Parsed data routes as flowfile attributes\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the parser are written to the FlowFile content or a FlowFile attribute; if using flowfile-attribute, fields will be populated as attributes. If set to flowfile-content, the netflowv5 field will be converted into a flat JSON object.\",\n+                                \"displayName\": \"Parsed fields destination\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"FIELDS_DESTINATION\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Optionally read if packets are received from UDP datagrams.\",\n+                                \"name\": \"udp.port\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Any FlowFile that is successfully parsed as a netflowv5 data will be transferred to this Relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be parsed as a netflowv5 message will be transferred to this Relationship without any attributes being added\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original raw content\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"attributes\",\n+                            \"byte\",\n+                            \"datagram\",\n+                            \"netflow\",\n+                            \"network\",\n+                            \"packet\",\n+                            \"v5\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.network.ParseNetflowv5\",\n+                        \"typeDescription\": \"Parses netflowv5 byte ingest and add to NiFi flowfile as attributes or JSON content.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The key and value generated by the parsing of the header fields.\",\n+                                \"name\": \"netflowv5.header.*\"\n+                            },\n+                            {\n+                                \"description\": \"The key and value generated by the parsing of the record fields.\",\n+                                \"name\": \"netflowv5.record.*\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-web-client-provider-service-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-db-schema-registry-service-nar\",\n+                        \"artifact\": \"nifi-web-client-provider-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Catalog Name\": {\n-                                \"description\": \"The name of the catalog used to locate the desired table. This may not apply for the database that you are querying. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n-                                \"displayName\": \"Catalog Name\",\n+                            \"connect-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"Maximum amount of time to wait before failing during initial socket connection\",\n+                                \"displayName\": \"Connect Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Catalog Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"connect-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"Maximum amount of time to wait before failing while reading socket responses\",\n+                                \"displayName\": \"Read Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"read-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database for retrieving table information.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"redirect-handling-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FOLLOWED\",\n+                                        \"value\": \"FOLLOWED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IGNORED\",\n+                                        \"value\": \"IGNORED\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FOLLOWED\",\n+                                \"description\": \"Handling strategy for responding to HTTP 301 or 302 redirects received with a Location header\",\n+                                \"displayName\": \"Redirect Handling Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Database Connection Pooling Service\",\n+                                \"name\": \"redirect-handling-strategy\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl-context-service\": {\n+                                \"description\": \"SSL Context Service overrides system default TLS settings for HTTPS communication\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Schema Name\": {\n-                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly. Also notice that if the same table name exists in multiple schemas and Schema Name is not specified, the service will find those tables and give an error if the different tables have the same column name(s).\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"write-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"Maximum amount of time to wait before failing while writing socket requests\",\n+                                \"displayName\": \"Write Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Schema Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"write-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"registry\",\n-                            \"schema\",\n-                            \"table\"\n+                            \"Client\",\n+                            \"HTTP\",\n+                            \"Web\"\n                         ],\n-                        \"type\": \"org.apache.nifi.db.schemaregistry.DatabaseTableSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a service for generating a record schema from a database table definition. The service is configured to use a table name and a database connection fetches the table metadata (i.e. table definition) such as column names, data types, nullability, etc.\",\n+                        \"type\": \"org.apache.nifi.web.client.provider.service.StandardWebClientServiceProvider\",\n+                        \"typeDescription\": \"Web Client Service Provider with support for configuring standard HTTP connection properties\",\n                         \"version\": \"1.27.0\"\n                     }\n                 ],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-ldap-iaa-providers-nar\",\n+            \"artifact\": \"nifi-update-attribute-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-update-attribute-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a FlowFile attribute specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"A FlowFile attribute to update\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Delete Attributes Expression\": {\n+                                \"description\": \"Regular expression for attributes to be deleted from FlowFiles.  Existing attributes that match will be deleted regardless of whether they are updated by this processor.\",\n+                                \"displayName\": \"Delete Attributes Expression\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Delete Attributes Expression\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Stateful Variables Initial Value\": {\n+                                \"description\": \"If using state to set/reference variables then this value is used to set the initial value of the stateful variable. This will only be used in the @OnScheduled method when state does not contain a value for the variable. This is required if running statefully but can be empty if needed.\",\n+                                \"displayName\": \"Stateful Variables Initial Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Stateful Variables Initial Value\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Store State\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Do not store state\",\n+                                        \"value\": \"Do not store state\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Store state locally\",\n+                                        \"value\": \"Store state locally\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Do not store state\",\n+                                \"description\": \"Select whether or not state will be stored. Selecting 'Stateless' will offer the default functionality of purely updating the attributes on a FlowFile in a stateless manner. Selecting a stateful option will not only store the attributes on the FlowFile but also in the Processors state. See the 'Stateful Usage' topic of the 'Additional Details' section of this processor's documentation for more information\",\n+                                \"displayName\": \"Store State\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Store State\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"canonical-value-lookup-cache-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies how many canonical lookup values should be stored in the cache\",\n+                                \"displayName\": \"Cache Value Lookup Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"canonical-value-lookup-cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"stateful\": {\n+                            \"description\": \"Gives the option to store values not only on the FlowFile but as stateful variables to be referenced in a recursive manner.\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All successful FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Attribute Expression Language\",\n+                            \"attributes\",\n+                            \"delete\",\n+                            \"modification\",\n+                            \"state\",\n+                            \"update\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.attributes.UpdateAttribute\",\n+                        \"typeDescription\": \"Updates the Attributes for a FlowFile by using the Attribute Expression Language and/or deletes the attributes based on a regular expression\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This processor may write or remove zero or more attributes as described in additional details\",\n+                                \"name\": \"See additional details\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-framework-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-hashicorp-vault-nar\",\n+            \"artifact\": \"nifi-kafka-2-6-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ack.wait.time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"acks\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted successfully' after successfully writing the content to a Kafka node, without waiting for a response. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted successfully' if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes.\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted unsuccessfully' unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration.\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"acks\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression.type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"compression.type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max.block.ms\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.request.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-sink-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"kafka\",\n+                            \"record\",\n+                            \"sink\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\",\n+                        \"typeDescription\": \"Provides a service to write records to a Kafka 2.6+ topic.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [\n+                    {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hashicorp-vault-nar\",\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Allows any Spring Vault property keys to be specified, as described in (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration). See Additional Details for more information.\",\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration.\",\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A Spring Vault configuration property name\",\n-                                \"value\": \"The property value\"\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"configuration-strategy\": {\n+                            \"Commit Offsets\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use properties, including dynamic properties, configured directly in the Controller Service to configure the client\",\n-                                        \"displayName\": \"Direct Properties\",\n-                                        \"value\": \"direct-properties\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Use one or more '.properties' files to configure the client\",\n-                                        \"displayName\": \"Properties Files\",\n-                                        \"value\": \"properties-files\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not this Processor should commit the offsets to Kafka after receiving messages. This value should be false when a PublishKafkaRecord processor is expected to commit the offsets using Exactly Once semantics, and should be reserved for dataflows that are designed to run within Stateless NiFi. See Processor's Usage / Additional Details for more information. Note that setting this value to false can lead to significant data duplication or potentially even data loss if the dataflow is not properly configured.\",\n+                                \"displayName\": \"Commit Offsets\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Commit Offsets\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"auto.offset.reset\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n+                                \"displayName\": \"Offset Reset\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"auto.offset.reset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"group.id\": {\n+                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n+                                \"displayName\": \"Group ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"group.id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"header-name-regex\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"output-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n+                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"header-name-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"honor-transactions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n+                                \"displayName\": \"Honor Transactions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"honor-transactions\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"key-attribute-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"output-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"If the <Separate By Key> property is set to true, FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-attribute-encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"key-format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a UTF-8 string.\",\n+                                        \"displayName\": \"String\",\n+                                        \"value\": \"string\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a byte array.\",\n+                                        \"displayName\": \"Byte Array\",\n+                                        \"value\": \"byte-array\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a record.\",\n+                                        \"displayName\": \"Record\",\n+                                        \"value\": \"record\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"byte-array\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"output-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies how to represent the Kafka Record's Key in the output\",\n+                                \"displayName\": \"Key Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-format\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"key-record-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"record\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Key Format\",\n+                                        \"propertyName\": \"key-format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Reader to use for parsing the Kafka Record's key into a Record\",\n+                                \"displayName\": \"Key Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Commit Offsets\",\n+                                        \"propertyName\": \"Commit Offsets\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n+                                \"displayName\": \"Max Uncommitted Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-uncommit-offset-wait\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n+                                \"displayName\": \"Max Poll Records\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.poll.records\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"output-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Write only the Kafka Record value to the FlowFile record.\",\n+                                        \"displayName\": \"Use Content as Value\",\n+                                        \"value\": \"USE_VALUE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the FlowFile record. (See processor usage for more information.)\",\n+                                        \"displayName\": \"Use Wrapper\",\n+                                        \"value\": \"USE_WRAPPER\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"USE_VALUE\",\n+                                \"description\": \"The format used to output the Kafka record into a FlowFile record.\",\n+                                \"displayName\": \"Output Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"output-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Value Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n+                                \"displayName\": \"Record Value Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"sasl.token.auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.token.auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"separate-by-key\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, two Records will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n+                                \"displayName\": \"Separate By Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"separate-by-key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topic Name(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"topic_type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Name Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"topic_type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles received from Kafka.  Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a message from Kafka cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"2.6\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Record\",\n+                            \"Topic\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.6 Consumer API. The complementary NiFi processor for sending messages is PublishKafkaRecord_2_6. Please note that, at this time, the Processor assumes that all records that are retrieved from a given partition have the same schema. If any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of records received\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The partition of the topic the records are from\",\n+                                \"name\": \"kafka.partition\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The topic records are from\",\n+                                \"name\": \"kafka.topic\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Commit Offsets\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not this Processor should commit the offsets to Kafka after receiving messages. Typically, we want this value set to true so that messages that are received are not duplicated. However, in certain scenarios, we may want to avoid committing the offsets, that the data can be processed and later acknowledged by PublishKafkaRecord in order to provide Exactly Once semantics. See Processor's Usage / Additional Details for more information.\",\n+                                \"displayName\": \"Commit Offsets\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Commit Offsets\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"auto.offset.reset\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n+                                \"displayName\": \"Offset Reset\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"auto.offset.reset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"group.id\": {\n+                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n+                                \"displayName\": \"Group ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"group.id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"header-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n+                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"header-name-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"honor-transactions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n+                                \"displayName\": \"Honor Transactions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"honor-transactions\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"key-attribute-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-attribute-encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Commit Offsets\",\n+                                        \"propertyName\": \"Commit Offsets\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n+                                \"displayName\": \"Max Uncommitted Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-uncommit-offset-wait\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n+                                \"displayName\": \"Max Poll Records\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.poll.records\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-demarcator\": {\n+                                \"description\": \"Since KafkaConsumer receives messages in batches, you have an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n+                                \"displayName\": \"Message Demarcator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"sasl.token.auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.token.auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"separate-by-key\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, and the <Message Demarcator> property is set, two messages will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n+                                \"displayName\": \"Separate By Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"separate-by-key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topic Name(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"topic_type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Name Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"topic_type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles received from Kafka. Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"2.6\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Topic\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.6 Consumer API. The complementary NiFi processor for sending messages is PublishKafka_2_6.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of messages written if more than one\",\n+                                \"name\": \"kafka.count\"\n+                            },\n+                            {\n+                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n+                                \"name\": \"kafka.key\"\n+                            },\n+                            {\n+                                \"description\": \"The offset of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.offset\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The partition of the topic the message or message bundle is from\",\n+                                \"name\": \"kafka.partition\"\n+                            },\n+                            {\n+                                \"description\": \"The topic the message or message bundle is from\",\n+                                \"name\": \"kafka.topic\"\n+                            },\n+                            {\n+                                \"description\": \"Set to true if the consumed message is a tombstone message\",\n+                                \"name\": \"kafka.tombstone\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Failure Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n+                                        \"displayName\": \"Route to Failure\",\n+                                        \"value\": \"Route to Failure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n+                                        \"displayName\": \"Rollback\",\n+                                        \"value\": \"Rollback\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Route to Failure\",\n+                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n+                                \"displayName\": \"Failure Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Failure Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Record Metadata Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The Kafka Record's Topic will be determined using the 'Topic Name' processor property. The partition will be determined using the 'Partition' and 'Partitioner class' properties.\",\n+                                        \"displayName\": \"Use Configured Values\",\n+                                        \"value\": \"Use Configured Values\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Kafka Record's Topic and Partition will be determined by looking at the /metadata/topic and /metadata/partition fields of the Record, respectively. If these fields are invalid or not present, the Topic Name and Partition/Partitioner class properties of the processor will be considered.\",\n+                                        \"displayName\": \"Metadata From Record\",\n+                                        \"value\": \"Metadata From Record\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Use Configured Values\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether the Record's metadata (topic and partition) should come from the Record's metadata field or if it should come from the configured Topic Name and Partition / Partitioner class properties\",\n+                                \"displayName\": \"Record Metadata Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Metadata Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ack.wait.time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"acks\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"acks\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"attribute-name-regex\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"direct-properties\",\n-                                \"description\": \"Specifies the source of the configuration properties.\",\n-                                \"displayName\": \"Configuration Strategy\",\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"configuration-strategy\",\n+                                \"name\": \"attribute-name-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vault.authentication\": {\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TOKEN\",\n-                                        \"value\": \"TOKEN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"APPID\",\n-                                        \"value\": \"APPID\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"APPROLE\",\n-                                        \"value\": \"APPROLE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AWS_EC2\",\n-                                        \"value\": \"AWS_EC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AZURE\",\n-                                        \"value\": \"AZURE\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CERT\",\n-                                        \"value\": \"CERT\"\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CUBBYHOLE\",\n-                                        \"value\": \"CUBBYHOLE\"\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"KUBERNETES\",\n-                                        \"value\": \"KUBERNETES\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"TOKEN\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"direct-properties\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n                                     }\n                                 ],\n-                                \"description\": \"Vault authentication method, as described in the Spring Vault Environment Configuration documentation (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration).\",\n-                                \"displayName\": \"Vault Authentication\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.authentication\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vault.connection.timeout\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The connection timeout for the HashiCorp Vault client\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.connection.timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"vault.properties.files\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"properties-files\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A comma-separated list of files containing HashiCorp Vault configuration properties, as described in the Spring Vault Environment Configuration documentation (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration). All of the Spring property keys and authentication-specific property keys are supported.\",\n-                                \"displayName\": \"Vault Properties Files\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.properties.files\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max.block.ms\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"vault.read.timeout\": {\n-                                \"defaultValue\": \"15 sec\",\n-                                \"description\": \"The read timeout for the HashiCorp Vault client\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.read.timeout\",\n+                                \"name\": \"max.request.size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vault.ssl.context.service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"direct-properties\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections to the HashiCorp Vault server.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.ssl.context.service\",\n+                                \"name\": \"message-header-encoding\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"vault.uri\": {\n+                            \"message-key-field\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"direct-properties\"\n+                                            \"USE_VALUE\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The URI of the HashiCorp Vault server (e.g., http://localhost:8200).  Required if not specified in the Bootstrap HashiCorp Vault Configuration File.\",\n-                                \"displayName\": \"Vault URI\",\n+                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n+                                \"displayName\": \"Message Key Field\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"vault.uri\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"message-key-field\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultClientService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"client\",\n-                            \"hashicorp\",\n-                            \"vault\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.vault.hashicorp.StandardHashiCorpVaultClientService\",\n-                        \"typeDescription\": \"A controller service for interacting with HashiCorp Vault.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-confluent-platform-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-confluent-platform-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Properties that begin with 'request.header.' are populated into a map and passed as http headers in REST requests to the Confluent Schema Registry\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"request.header.*\",\n-                                \"value\": \"String literal, may not be empty\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"authentication-type\": {\n+                            },\n+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to. How this value is interpreted is dictated by the <Partitioner class> property.\",\n+                                \"displayName\": \"Partition\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"partition\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"partitioner.class\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BASIC\",\n-                                        \"value\": \"BASIC\"\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"The default partitioning strategy will choose the sticky partition that changes when the batch is full (See KIP-480 for details about sticky partitioning).\",\n+                                        \"displayName\": \"DefaultPartitioner\",\n+                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as a RecordPath that will be evaluated against each Record to determine which partition the Record will go to. All Records that have the same value for the given RecordPath will go to the same Partition.\",\n+                                        \"displayName\": \"RecordPath Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RecordPathPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n+                                        \"displayName\": \"Expression Language Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"HTTP Client Authentication Type for Confluent Schema Registry\",\n-                                \"displayName\": \"Authentication Type\",\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n+                                \"displayName\": \"Partitioner class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authentication-type\",\n+                                \"name\": \"partitioner.class\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cache-expiration\": {\n-                                \"defaultValue\": \"1 hour\",\n-                                \"description\": \"Specifies how long a Schema that is cached should remain in the cache. Once this time period elapses, a cached version of a schema will no longer be used, and the service will have to communicate with the Schema Registry again in order to obtain the schema.\",\n-                                \"displayName\": \"Cache Expiration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-expiration\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached from the Schema Registry\",\n-                                \"displayName\": \"Cache Size\",\n+                            \"publish-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Write only the FlowFile content to the Kafka Record value.\",\n+                                        \"displayName\": \"Use Content as Record Value\",\n+                                        \"value\": \"USE_VALUE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the Kafka Record value.  (See processor usage for more information.)\",\n+                                        \"displayName\": \"Use Wrapper\",\n+                                        \"value\": \"USE_WRAPPER\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"USE_VALUE\",\n+                                \"description\": \"The format used to publish the incoming FlowFile record to Kafka.\",\n+                                \"displayName\": \"Publish Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n+                                \"name\": \"publish-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"password\": {\n+                            \"record-key-writer\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"BASIC\"\n+                                            \"USE_WRAPPER\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authentication Type\",\n-                                        \"propertyName\": \"authentication-type\"\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Password for authentication to Confluent Schema Registry\",\n-                                \"displayName\": \"Password\",\n+                                \"description\": \"The Record Key Writer to use for outgoing FlowFiles\",\n+                                \"displayName\": \"Record Key Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"password\",\n+                                \"name\": \"record-key-writer\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"ssl-context\": {\n-                                \"description\": \"Specifies the SSL Context Service to use for interacting with the Confluent Schema Registry\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context\",\n-                                \"required\": false,\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait to receive data from the Schema Registry before considering the communications a failure\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"timeout\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"url\": {\n-                                \"defaultValue\": \"http://localhost:8081\",\n-                                \"description\": \"A comma-separated list of URLs of the Schema Registry to interact with\",\n-                                \"displayName\": \"Schema Registry URLs\",\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"url\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"username\": {\n+                            \"sasl.password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"BASIC\"\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authentication Type\",\n-                                        \"propertyName\": \"authentication-type\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"description\": \"Username for authentication to Confluent Schema Registry\",\n-                                \"displayName\": \"Username\",\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"sasl.token.auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"username\",\n+                                \"name\": \"sasl.token.auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"confluent\",\n-                            \"kafka\",\n-                            \"registry\",\n-                            \"schema\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.confluent.schemaregistry.ConfluentSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a Schema Registry that interacts with the Confluent Schema Registry so that those Schemas that are stored in the Confluent Schema Registry can be used in NiFi. The Confluent Schema Registry has a notion of a \\\"subject\\\" for schemas, which is their terminology for a schema name. When a Schema is looked up by name by this registry, it will find a Schema in the Confluent Schema Registry with that subject.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kudu-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kudu-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"kudu-lu-kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials to use for authentication\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            },\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kudu-lu-kerberos-credentials-service\",\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"kudu-lu-masters\": {\n-                                \"description\": \"Comma separated addresses of the Kudu masters to connect to.\",\n-                                \"displayName\": \"Kudu Masters\",\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kudu-lu-masters\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"topic\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kudu-lu-operations-timeout-ms\": {\n-                                \"defaultValue\": \"30000ms\",\n-                                \"description\": \"Default timeout used for user operations (using sessions and scanners)\",\n-                                \"displayName\": \"Kudu Operation Timeout\",\n+                            \"transactional-id-prefix\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Use Transactions\",\n+                                        \"propertyName\": \"use-transactions\"\n+                                    }\n+                                ],\n+                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n+                                \"displayName\": \"Transactional Id Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kudu-lu-operations-timeout-ms\",\n+                                \"name\": \"transactional-id-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kudu-lu-replica-selection\": {\n+                            \"use-transactions\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Select the closest replica to the client. Replicas are classified from closest to furthest as follows: 1) Local replicas 2) Replicas whose tablet server has the same location as the client 3) All other replicas\",\n-                                        \"displayName\": \"CLOSEST_REPLICA\",\n-                                        \"value\": \"CLOSEST_REPLICA\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Select the LEADER replica\",\n-                                        \"displayName\": \"LEADER_ONLY\",\n-                                        \"value\": \"LEADER_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"CLOSEST_REPLICA\",\n-                                \"description\": \"Policy with which to choose amongst multiple replicas\",\n-                                \"displayName\": \"Kudu Replica Selection\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n+                                \"displayName\": \"Use Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kudu-lu-replica-selection\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kudu-lu-return-cols\": {\n-                                \"defaultValue\": \"*\",\n-                                \"description\": \"A comma-separated list of columns to return when scanning. To return all columns set to \\\"*\\\"\",\n-                                \"displayName\": \"Kudu Return Columns\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kudu-lu-return-cols\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kudu-lu-table-name\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"Name of the table to access.\",\n-                                \"displayName\": \"Kudu Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kudu-lu-table-name\",\n+                                \"name\": \"use-transactions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"enrich\",\n-                            \"key\",\n-                            \"kudu\",\n-                            \"lookup\",\n-                            \"value\"\n+                            \"2.6\",\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Record\",\n+                            \"Send\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\",\n+                            \"logs\"\n                         ],\n-                        \"type\": \"org.apache.nifi.controller.kudu.KuduLookupService\",\n-                        \"typeDescription\": \"Lookup a record from Kudu Server associated with the specified key. Binary columns are base64 encoded. Only one matched row will be returned\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as individual records to Apache Kafka using the Kafka 2.6 Producer API. The contents of the FlowFile are expected to be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafkaRecord_2_6.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n+                                \"name\": \"msg.count\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kudu-nar\",\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of Records to process in a single Kudu-client batch, between 1 - 100000. Depending on your memory size, and data size per row set an appropriate batch size. Gradually increase this number to find out the best one for best performances.\",\n-                                \"displayName\": \"Max Records per Batch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data RecordPath\": {\n-                                \"description\": \"If specified, this property denotes a RecordPath that will be evaluated against each incoming Record and the Record that results from evaluating the RecordPath will be sent to Kudu instead of sending the entire incoming Record. If not specified, the entire incoming Record will be published to Kudu.\",\n-                                \"displayName\": \"Data RecordPath\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data RecordPath\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n                             \"Failure Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The FlowFile containing the Records that failed to insert will be routed to the 'failure' relationship\",\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n                                         \"displayName\": \"Route to Failure\",\n-                                        \"value\": \"route-to-failure\"\n+                                        \"value\": \"Route to Failure\"\n                                     },\n                                     {\n-                                        \"description\": \"If any Record cannot be inserted, all FlowFiles in the session will be rolled back to their input queue. This means that if data cannot be pushed, it will block any subsequent data from be pushed to Kudu as well until the issue is resolved. However, this may be advantageous if a strict ordering is required.\",\n-                                        \"displayName\": \"Rollback Session\",\n-                                        \"value\": \"rollback\"\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n+                                        \"displayName\": \"Rollback\",\n+                                        \"value\": \"Rollback\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"route-to-failure\",\n-                                \"description\": \"If one or more Records in a batch cannot be transferred to Kudu, specifies how to handle the failure\",\n+                                \"defaultValue\": \"Route to Failure\",\n+                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n                                 \"displayName\": \"Failure Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Failure Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFiles per Batch\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of FlowFiles to process in a single execution, between 1 - 100000. Depending on your memory size, and data size per row set an appropriate batch size for the number of FlowFiles to process per client connection setup.Gradually increase this number, only if your FlowFiles typically contain a few records.\",\n-                                \"displayName\": \"FlowFiles per Batch\",\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"FlowFiles per Batch\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ack.wait.time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Flush Mode\": {\n+                            \"acks\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AUTO_FLUSH_SYNC\",\n-                                        \"value\": \"AUTO_FLUSH_SYNC\"\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AUTO_FLUSH_BACKGROUND\",\n-                                        \"value\": \"AUTO_FLUSH_BACKGROUND\"\n+                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MANUAL_FLUSH\",\n-                                        \"value\": \"MANUAL_FLUSH\"\n+                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AUTO_FLUSH_BACKGROUND\",\n-                                \"description\": \"Set the new flush mode for a kudu session.\\nAUTO_FLUSH_SYNC: the call returns when the operation is persisted, else it throws an exception.\\nAUTO_FLUSH_BACKGROUND: the call returns when the operation has been added to the buffer. This call should normally perform only fast in-memory operations but it may have to wait when the buffer is full and there's another buffer being flushed.\\nMANUAL_FLUSH: the call returns when the operation has been added to the buffer, else it throws a KuduException if the buffer is full.\",\n-                                \"displayName\": \"Flush Mode\",\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Flush Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Handle Schema Drift\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, when fields with names that are not in the target Kudu table are encountered, the Kudu table will be altered to include new columns for those fields.\",\n-                                \"displayName\": \"Handle Schema Drift\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Handle Schema Drift\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore NULL\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Ignore NULL on Kudu Put Operation, Update only non-Null columns if set true\",\n-                                \"displayName\": \"Ignore NULL\",\n+                            \"attribute-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Ignore NULL\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"attribute-name-regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Insert Operation\": {\n-                                \"defaultValue\": \"INSERT\",\n-                                \"description\": \"Specify operationType for this processor.\\nValid values are: INSERT, INSERT_IGNORE, UPSERT, UPDATE, DELETE, UPDATE_IGNORE, DELETE_IGNORE. This Property will be ignored if the <Operation RecordPath> property is set.\",\n-                                \"displayName\": \"Kudu Operation Type\",\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Insert Operation\",\n+                                \"name\": \"aws.profile.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Kudu Masters\": {\n-                                \"description\": \"Comma separated addresses of the Kudu masters to connect to.\",\n-                                \"displayName\": \"Kudu Masters\",\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kudu Masters\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Lowercase Field Names\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Convert column names to lowercase when finding index of Kudu table columns\",\n-                                \"displayName\": \"Lowercase Field Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Lowercase Field Names\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Operation RecordPath\": {\n-                                \"description\": \"If specified, this property denotes a RecordPath that will be evaluated against each incoming Record in order to determine the Kudu Operation Type. When evaluated, the RecordPath must evaluate to one of the valid Kudu Operation Types (Debezium style operation types are also supported: \\\"r\\\" and \\\"c\\\" for INSERT, \\\"u\\\" for UPDATE, and \\\"d\\\" for DELETE), or the incoming FlowFile will be routed to failure. If this property is specified, the <Kudu Operation Type> property will be ignored.\",\n-                                \"displayName\": \"Operation RecordPath\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Operation RecordPath\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Skip head line\": {\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Deprecated. Used to ignore header lines, but this should be handled by a RecordReader (e.g. \\\"Treat First Line as Header\\\" property of CSVReader)\",\n-                                \"displayName\": \"Skip head line\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Skip head line\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the Kudu Table to put data into\",\n-                                \"displayName\": \"Table Name\",\n+                            \"kafka-key\": {\n+                                \"description\": \"The Key to use for the Message. If not specified, the flow file attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n+                                \"displayName\": \"Kafka Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n-                                \"required\": true,\n+                                \"name\": \"kafka-key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials to use for authentication\",\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n                                 \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-password\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"key-attribute-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key is interpreted as arbitrary binary data that is encoded using hexadecimal characters with uppercase letters.\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-attribute-encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kerberos-principal\",\n+                                \"name\": \"max.block.ms\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.request.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-demarcator\": {\n+                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n+                                \"displayName\": \"Message Demarcator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"message-demarcator\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"name\": \"message-header-encoding\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"kudu-keep-alive-period-timeout-ms\": {\n-                                \"defaultValue\": \"15000ms\",\n-                                \"description\": \"Default timeout used for user operations\",\n-                                \"displayName\": \"Kudu Keep Alive Period Timeout\",\n+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to.\",\n+                                \"displayName\": \"Partition\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"partition\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"partitioner.class\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The default partitioning strategy will choose the sticky partition that changes when the batch is full (See KIP-480 for details about sticky partitioning).\",\n+                                        \"displayName\": \"DefaultPartitioner\",\n+                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n+                                        \"displayName\": \"Expression Language Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n+                                \"displayName\": \"Partitioner class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"partitioner.class\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kudu-keep-alive-period-timeout-ms\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"kudu-operations-timeout-ms\": {\n-                                \"defaultValue\": \"30000ms\",\n-                                \"description\": \"Default timeout used for user operations (using sessions and scanners)\",\n-                                \"displayName\": \"Kudu Operation Timeout\",\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kudu-operations-timeout-ms\",\n+                                \"name\": \"sasl.kerberos.principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kudu-sasl-protocol-name\": {\n-                                \"defaultValue\": \"kudu\",\n-                                \"description\": \"The SASL protocol name to use for authenticating via Kerberos. Must match the service principal name.\",\n-                                \"displayName\": \"Kudu SASL Protocol Name\",\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kudu-sasl-protocol-name\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The service for reading records from incoming flow files.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"sasl.mechanism\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"sasl.token.auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.token.auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"worker-count\": {\n-                                \"defaultValue\": \"16\",\n-                                \"description\": \"The maximum number of worker threads handling Kudu client read and write operations. Defaults to the number of available processors.\",\n-                                \"displayName\": \"Kudu Client Worker Count\",\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"transactional-id-prefix\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Use Transactions\",\n+                                        \"propertyName\": \"use-transactions\"\n+                                    }\n+                                ],\n+                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n+                                \"displayName\": \"Transactional Id Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"transactional-id-prefix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"use-transactions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n+                                \"displayName\": \"Use Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"worker-count\",\n+                                \"name\": \"use-transactions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If this attribute is set to 'true', if the processor is not configured with a demarcator and if the FlowFile's content is null, then a tombstone message with zero bytes will be sent to Kafka.\",\n+                                \"name\": \"kafka.tombstone\"\n+                            }\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship after it has been successfully stored in Kudu\",\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be sent to Kudu\",\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"HDFS\",\n-                            \"NoSQL\",\n-                            \"database\",\n-                            \"kudu\",\n-                            \"put\",\n-                            \"record\"\n+                            \"2.6\",\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Send\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kudu.PutKudu\",\n-                        \"typeDescription\": \"Reads records from an incoming FlowFile using the provided Record Reader, and writes those records to the specified Kudu's table. The schema for the Kudu table is inferred from the schema of the Record Reader. If any error occurs while reading records from the input, or writing records to Kudu, the FlowFile will be routed to failure\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as a message to Apache Kafka using the Kafka 2.6 Producer API.The messages to send may be individual FlowFiles or may be delimited, using a user-specified delimiter, such as a new-line. The complementary NiFi processor for fetching messages is ConsumeKafka_2_6.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Number of records written to Kudu\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success. If the <Message Demarcator> Property is not set, this will always be 1, but if the Property is set, it may be greater than 1.\",\n+                                \"name\": \"msg.count\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n+            \"artifact\": \"nifi-ccda-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-ccda-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"Parsing XML elements to FlowFile attributes is not recommend and should be replaced with record-oriented handling\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"skip-validation\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to validate CDA message values\",\n+                                \"displayName\": \"Skip Validation\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"skip-validation\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if it is properly parsed as CDA and its contents extracted as attributes.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be parsed as CDA or its contents extracted as attributes.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"CCDA\",\n+                            \"attributes\",\n+                            \"extract\",\n+                            \"healthcare\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.ccda.ExtractCCDAAttributes\",\n+                        \"typeDescription\": \"Extracts information from an Consolidated CDA formatted FlowFile and provides individual attributes as FlowFile attributes. The attributes are named as <Parent> <dot> <Key>. If the Parent is repeating, the naming will be <Parent> <underscore> <Parent Index> <dot> <Key>. For example, section.act_07.observation.name=Essential hypertension\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n             \"artifact\": \"nifi-aws-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n@@ -47935,16 +44730,16 @@\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n                             \"default-credentials\": {\n                                 \"allowableValues\": [\n                                     {\n@@ -56075,16 +52870,16 @@\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n                             \"proxy-configuration-service\": {\n                                 \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n@@ -56611,16 +53406,16 @@\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n                             \"encryption-service\": {\n                                 \"description\": \"Specifies the Encryption Service Controller used to configure requests. PutS3Object: For backward compatibility, this value is ignored when 'Server Side Encryption' is set. FetchS3Object: Only needs to be configured in case of Server-side Customer Key, Client-side KMS and Client-side Customer Key encryptions.\",\n                                 \"displayName\": \"Encryption Service\",\n@@ -57243,16 +54038,16 @@\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n                             \"delimiter\": {\n                                 \"description\": \"The string used to delimit directories within the bucket. Please consult the AWS documentation for the correct use of this field.\",\n                                 \"displayName\": \"Delimiter\",\n@@ -58312,16 +55107,16 @@\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n                             \"encryption-service\": {\n                                 \"description\": \"Specifies the Encryption Service Controller used to configure requests. PutS3Object: For backward compatibility, this value is ignored when 'Server Side Encryption' is set. FetchS3Object: Only needs to be configured in case of Server-side Customer Key, Client-side KMS and Client-side Customer Key encryptions.\",\n                                 \"displayName\": \"Encryption Service\",\n@@ -59044,16 +55839,16 @@\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n                             \"proxy-configuration-service\": {\n                                 \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n@@ -62581,316 +59376,622 @@\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-registry-nar\",\n+            \"artifact\": \"nifi-asana-processors-nar\",\n             \"componentManifest\": {\n-                \"controllerServices\": [\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-registry-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-asana-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds a named schema using the JSON string representation of an Avro schema\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Schema name\",\n-                                \"value\": \"Schema Content\"\n-                            }\n-                        ],\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"avro-reg-validated-field-names\": {\n+                            \"asana-controller-service\": {\n+                                \"description\": \"Specify which controller service to use for accessing Asana.\",\n+                                \"displayName\": \"Asana Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-controller-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-asana-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.controller.asana.AsanaClientProviderService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"asana-object-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Collect tasks matching to the specified conditions.\",\n+                                        \"displayName\": \"Tasks\",\n+                                        \"value\": \"asana-collect-tasks\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Collect attached files of tasks matching to the specified conditions.\",\n+                                        \"displayName\": \"Task Attachments\",\n+                                        \"value\": \"asana-collect-task-attachments\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect projects of the workspace.\",\n+                                        \"displayName\": \"Projects\",\n+                                        \"value\": \"asana-collect-projects\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect tags of the workspace.\",\n+                                        \"displayName\": \"Tags\",\n+                                        \"value\": \"asana-collect-tags\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect users assigned to the workspace.\",\n+                                        \"displayName\": \"Users\",\n+                                        \"value\": \"asana-collect-users\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect users assigned to the specified project.\",\n+                                        \"displayName\": \"Members of a Project\",\n+                                        \"value\": \"asana-collect-project-members\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect teams of the workspace.\",\n+                                        \"displayName\": \"Teams\",\n+                                        \"value\": \"asana-collect-teams\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect users assigned to the specified team.\",\n+                                        \"displayName\": \"Team Members\",\n+                                        \"value\": \"asana-collect-team-members\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect stories (comments) of of tasks matching to the specified conditions.\",\n+                                        \"displayName\": \"Stories of Tasks\",\n+                                        \"value\": \"asana-collect-stories\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect status updates of the specified project.\",\n+                                        \"displayName\": \"Status Updates of a Project\",\n+                                        \"value\": \"asana-collect-project-status-updates\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect attached files of project status updates.\",\n+                                        \"displayName\": \"Attachments of Status Updates\",\n+                                        \"value\": \"asana-collect-project-status-attachments\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect various events happening on the specified project and on its' tasks.\",\n+                                        \"displayName\": \"Events of a Project\",\n+                                        \"value\": \"asana-collect-project-events\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to validate the field names in the Avro schema based on Avro naming rules. If set to true, all field names must be valid Avro names, which must begin with [A-Za-z_], and subsequently contain only [A-Za-z0-9_]. If set to false, no validation will be performed on the field names.\",\n-                                \"displayName\": \"Validate Field Names\",\n+                                \"defaultValue\": \"asana-collect-tasks\",\n+                                \"description\": \"Specify what kind of objects to be collected from Asana\",\n+                                \"displayName\": \"Object Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"avro-reg-validated-field-names\",\n+                                \"name\": \"asana-object-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\",\n-                            \"registry\",\n-                            \"schema\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.schemaregistry.services.AvroSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a service for registering and accessing schemas. You can register a schema as a dynamic property where 'name' represents the schema name and 'value' represents the textual representation of the actual schema following the syntax and semantics of Avro's Schema format.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-registry-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds a named schema using the JSON string representation of a JSON schema\",\n+                            },\n+                            \"asana-output-batch-size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of items batched together in a single Flow File. If set to 1 (default), then each item is transferred in a separate Flow File and each will have an asana.gid attribute, to help identifying the fetched item on the server side, if needed. If the batch size is greater than 1, then the specified amount of items are batched together in a single Flow File as a Json array, and the Flow Files won't have the asana.gid attribute.\",\n+                                \"displayName\": \"Output Batch Size\",\n+                                \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Schema Name\",\n-                                \"value\": \"Schema Content\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"JSON Schema Version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Draft Version 4\",\n-                                        \"displayName\": \"Draft 4\",\n-                                        \"value\": \"DRAFT_4\"\n-                                    },\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-output-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"asana-project-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Draft Version 6\",\n-                                        \"displayName\": \"Draft 6\",\n-                                        \"value\": \"DRAFT_6\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"asana-collect-project-members\",\n+                                            \"asana-collect-project-status-attachments\",\n+                                            \"asana-collect-project-status-updates\",\n+                                            \"asana-collect-task-attachments\",\n+                                            \"asana-collect-stories\",\n+                                            \"asana-collect-tasks\",\n+                                            \"asana-collect-project-events\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fetch only objects in this project. Case sensitive.\",\n+                                \"displayName\": \"Project Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-project-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"asana-section-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Draft Version 7\",\n-                                        \"displayName\": \"Draft 7\",\n-                                        \"value\": \"DRAFT_7\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"asana-collect-task-attachments\",\n+                                            \"asana-collect-stories\",\n+                                            \"asana-collect-tasks\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fetch only objects in this section. Case sensitive.\",\n+                                \"displayName\": \"Section Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-section-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"asana-tag-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Draft Version 2019-09\",\n-                                        \"displayName\": \"Draft 2019-09\",\n-                                        \"value\": \"DRAFT_2019_09\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"asana-collect-task-attachments\",\n+                                            \"asana-collect-stories\",\n+                                            \"asana-collect-tasks\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fetch only objects having this tag. Case sensitive.\",\n+                                \"displayName\": \"Tag\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-tag-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"asana-team-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Draft Version 2020-12\",\n-                                        \"displayName\": \"Draft 2020-12\",\n-                                        \"value\": \"DRAFT_2020_12\"\n+                                        \"dependentValues\": [\n+                                            \"asana-collect-team-members\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DRAFT_2020_12\",\n-                                \"description\": \"The JSON schema specification\",\n-                                \"displayName\": \"JSON Schema Version\",\n+                                \"description\": \"Team name. Case sensitive.\",\n+                                \"displayName\": \"Team\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON Schema Version\",\n-                                \"required\": true,\n+                                \"name\": \"asana-team-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"distributed-cache-service\": {\n+                                \"description\": \"Cache service to store fetched item fingerprints. These, from the last successful query are stored, in order to enable incremental loading and change detection.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"distributed-cache-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.JsonSchemaRegistry\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Notification about deleted objects are routed to this relationship. Flow files will not have any payload. IDs of the resources no longer exist are carried by the asana.gid attribute of the generated FlowFiles.\",\n+                                \"name\": \"removed\"\n+                            },\n+                            {\n+                                \"description\": \"Newly collected objects are routed to this relationship.\",\n+                                \"name\": \"new\"\n+                            },\n+                            {\n+                                \"description\": \"Objects that have already been collected earlier, but were updated since, are routed to this relationship.\",\n+                                \"name\": \"updated\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"json\",\n-                            \"registry\",\n-                            \"schema\"\n+                            \"asana\",\n+                            \"ingest\",\n+                            \"source\"\n                         ],\n-                        \"type\": \"org.apache.nifi.schemaregistry.services.StandardJsonSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a service for registering and accessing JSON schemas. One can register a schema as a dynamic property where 'name' represents the schema name and 'value' represents the textual representation of the actual schema following the syntax and semantics of the JSON Schema format. Empty schemas and schemas only consisting of whitespace are not acceptable schemas.The registry is heterogeneous registry as it can store schemas of different schema draft versions. By default the registry is configured to store schemas of Draft 2020-12. When a schema is added, the version which is currently is set, is what the schema is saved as.\",\n-                        \"version\": \"1.27.0\"\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.asana.GetAsanaObject\",\n+                        \"typeDescription\": \"This processor collects data from Asana\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Global ID of the object in Asana.\",\n+                                \"name\": \"asana.gid\"\n+                            }\n+                        ]\n                     }\n                 ],\n-                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-kafka-1-0-nar\",\n+            \"artifact\": \"nifi-record-sink-service-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kafka-1-0-nar\",\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n+                            \"bcc\": {\n+                                \"description\": \"The recipients to include in the BCC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"BCC\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bcc\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cc\": {\n+                                \"description\": \"The recipients to include in the CC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"CC\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cc\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"from\": {\n+                                \"description\": \"Specifies the Email address to use as the sender. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"From\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"from\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n+                                \"name\": \"record-sink-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"smtp-auth\": {\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Flag indicating whether authentication should be used\",\n+                                \"displayName\": \"SMTP Auth\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"smtp-auth\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Records are considered 'transmitted successfully' after successfully writing the content to a Kafka node, without waiting for a response. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n-                                    },\n+                            \"smtp-hostname\": {\n+                                \"description\": \"The hostname of the SMTP Server that is used to send Email Notifications\",\n+                                \"displayName\": \"SMTP Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"smtp-hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"smtp-password\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Records are considered 'transmitted successfully' if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes.\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SMTP Auth\",\n+                                        \"propertyName\": \"smtp-auth\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password for the SMTP account\",\n+                                \"displayName\": \"SMTP Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"smtp-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"smtp-port\": {\n+                                \"defaultValue\": \"25\",\n+                                \"description\": \"The Port used for SMTP communications\",\n+                                \"displayName\": \"SMTP Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"smtp-port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"smtp-ssl\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Flag indicating whether SSL should be enabled\",\n+                                \"displayName\": \"SMTP SSL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"smtp-ssl\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"smtp-starttls\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Flag indicating whether STARTTLS should be enabled. If the server does not support STARTTLS, the connection continues without the use of TLS\",\n+                                \"displayName\": \"SMTP STARTTLS\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"smtp-starttls\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"smtp-username\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Records are considered 'transmitted unsuccessfully' unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration.\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SMTP Auth\",\n+                                        \"propertyName\": \"smtp-auth\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                                \"description\": \"Username for the SMTP account\",\n+                                \"displayName\": \"SMTP Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"smtp-username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"smtp-xmailer-header\": {\n+                                \"defaultValue\": \"NiFi\",\n+                                \"description\": \"X-Mailer used in the header of the outgoing email\",\n+                                \"displayName\": \"SMTP X-Mailer Header\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"smtp-xmailer-header\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"subject\": {\n+                                \"defaultValue\": \"Message from NiFi\",\n+                                \"description\": \"The email subject\",\n+                                \"displayName\": \"Subject\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"name\": \"subject\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n+                            \"to\": {\n+                                \"description\": \"The recipients to include in the To-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"To\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"to\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"email\",\n+                            \"record\",\n+                            \"send\",\n+                            \"sink\",\n+                            \"smtp\",\n+                            \"write\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.sink.EmailRecordSink\",\n+                        \"typeDescription\": \"Provides a RecordSinkService that can be used to send records in email using the specified writer for formatting.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"logsink-log-level\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"displayName\": \"INFO\",\n+                                        \"value\": \"INFO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n+                                        \"displayName\": \"WARN\",\n+                                        \"value\": \"WARN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ERROR\",\n+                                        \"value\": \"ERROR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FATAL\",\n+                                        \"value\": \"FATAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"defaultValue\": \"INFO\",\n+                                \"description\": \"The Log Level at which to log records (INFO, DEBUG, e.g.)\",\n+                                \"displayName\": \"Log Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n+                                \"name\": \"logsink-log-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n+                                \"name\": \"record-sink-record-writer\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"log\",\n+                            \"record\",\n+                            \"sink\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.sink.LoggingRecordSink\",\n+                        \"typeDescription\": \"Provides a RecordSinkService that can be used to log records to the application log (nifi-app.log, e.g.) using the specified writer for formatting.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"hostname\": {\n+                                \"description\": \"Destination hostname or IP address\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n+                                \"name\": \"hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"port\": {\n+                                \"description\": \"Destination port number\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n                             \"record-sink-record-writer\": {\n                                 \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-sink-record-writer\",\n@@ -62899,141 +60000,261 @@\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n+                            \"sender-threads\": {\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"Number of worker threads allocated for handling socket communication\",\n+                                \"displayName\": \"Sender Threads\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n+                                \"name\": \"sender-threads\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"UDP\",\n+                            \"event\",\n+                            \"record\",\n+                            \"sink\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.sink.event.UDPEventRecordSink\",\n+                        \"typeDescription\": \"Format and send Records as UDP Datagram Packets to a configurable destination\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If 'record.sink.name' attribute contains the name of the dynamic property, then the RecordSinkService (registered in the value) will be selected.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name to register the specified RecordSinkService\",\n+                                \"value\": \"The RecordSinkService\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"lookup\",\n+                            \"record\",\n+                            \"sink\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.sink.lookup.RecordSinkServiceLookup\",\n+                        \"typeDescription\": \"Provides a RecordSinkService that can be used to dynamically select another RecordSinkService. This service requires an attribute named 'record.sink.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'record.sink.name' will be used to select the RecordSinkService that has been registered with that name. This will allow multiple RecordSinkServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'record.sink.name' attribute. Note that this controller service is not intended for use in reporting tasks that employ RecordSinkService instances, such as QueryNiFiReportingTask.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-http-context-map-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-http-context-map-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Maximum Outstanding Requests\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The maximum number of HTTP requests that can be outstanding at any one time. Any attempt to register an additional HTTP Request will cause an error\",\n+                                \"displayName\": \"Maximum Outstanding Requests\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"name\": \"Maximum Outstanding Requests\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                            \"Request Expiration\": {\n+                                \"defaultValue\": \"1 min\",\n+                                \"description\": \"Specifies how long an HTTP Request should be left unanswered before being evicted from the cache and being responded to with a Service Unavailable status code\",\n+                                \"displayName\": \"Request Expiration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"Request Expiration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.http.HttpContextMap\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.HandleHttpRequest\",\n+                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"http\",\n+                            \"request\",\n+                            \"response\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.http.StandardHttpContextMap\",\n+                        \"typeDescription\": \"Provides the ability to store and retrieve HTTP requests and responses external to a Processor, so that multiple Processors can interact with the same HTTP request.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jms-cf-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-box-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-box-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"app-config-file\": {\n+                                \"description\": \"Full path of an App config JSON file. See Additional Details for more information.\",\n+                                \"displayName\": \"App Config File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"app-config-file\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"app-config-json\": {\n+                                \"description\": \"The raw JSON containing an App config. See Additional Details for more information.\",\n+                                \"displayName\": \"App Config JSON\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"app-config-json\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"box-account-id\": {\n+                                \"description\": \"The ID of the Box account who owns the accessed resource. Same as 'User Id' under 'App Info' in the App 'General Settings'.\",\n+                                \"displayName\": \"Account ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"box-account-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"artifact\": \"nifi-box-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"kafka\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"box\",\n+                            \"client\",\n+                            \"provider\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_1_0\",\n-                        \"typeDescription\": \"Provides a service to write records to a Kafka 1.x topic.\",\n+                        \"type\": \"org.apache.nifi.box.controllerservices.JsonConfigBasedBoxClientService\",\n+                        \"typeDescription\": \"Provides Box client objects through which Box API calls can be used.\",\n                         \"version\": \"1.27.0\"\n                     }\n                 ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-stateless-processor-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-1-0-nar\",\n+                        \"artifact\": \"nifi-stateless-processor-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -63041,417 +60262,972 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n+                                \"description\": \"Any dynamic property that is added will be provided to the stateless flow as a Parameter. The name of the property will be the name of the Parameter, and the value of the property will be the value of the Parameter. Because Parameter values may or may not be sensitive, all dynamic properties will be considered sensitive in order to protect their integrity.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Any Parameter name\",\n+                                \"value\": \"Any value\"\n                             }\n                         ],\n+                        \"explicitRestrictions\": [],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"auto.offset.reset\": {\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use NiFi Registry\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n+                                        \"propertyName\": \"Dataflow Specification Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies how long to wait before timing out when attempting to communicate with NiFi Registry\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Content Storage Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n+                                        \"description\": \"The FlowFile content will be stored on the NiFi JVM's heap. This is the most efficient option for small FlowFiles but can quickly exhaust the heap with larger FlowFiles, resulting in Out Of Memory Errors and node instability.\",\n+                                        \"displayName\": \"Store Content on Heap\",\n+                                        \"value\": \"Store Content on Heap\"\n                                     },\n                                     {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n-                                    },\n+                                        \"description\": \"The FlowFile content will be stored on disk, within the configured Work Directory. The content will still be cleared between invocations and will not be persisted across restarts.\",\n+                                        \"displayName\": \"Store Content on Disk\",\n+                                        \"value\": \"Store Content on Disk\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Store Content on Disk\",\n+                                \"description\": \"Specifies where the content of FlowFiles that the Stateless dataflow is operating on should be stored. Note that the data is always considered temporary and may be deleted at any time. It is not intended to be persisted across restarted.\",\n+                                \"displayName\": \"Content Storage Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Content Storage Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Dataflow File\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n+                                        \"dependentValues\": [\n+                                            \"Use Local File\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n+                                        \"propertyName\": \"Dataflow Specification Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n+                                \"description\": \"The filename or URL that specifies the dataflow that is to be run\",\n+                                \"displayName\": \"Dataflow File/URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n+                                \"name\": \"Dataflow File\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"Dataflow Specification Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Dataflow to run is stored as a file on the NiFi server or at a URL that is accessible to the NiFi server\",\n+                                        \"displayName\": \"Use Local File or URL\",\n+                                        \"value\": \"Use Local File\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Dataflow to run is stored in NiFi Registry\",\n+                                        \"displayName\": \"Use NiFi Registry\",\n+                                        \"value\": \"Use NiFi Registry\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Use Local File\",\n+                                \"description\": \"Specifies how the Processor should obtain a copy of the dataflow that it is to run\",\n+                                \"displayName\": \"Dataflow Specification Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Dataflow Specification Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"group.id\": {\n-                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n-                                \"displayName\": \"Group ID\",\n+                            \"Dataflow Timeout\": {\n+                                \"defaultValue\": \"60 sec\",\n+                                \"description\": \"If the flow does not complete within this amount of time, the incoming FlowFile, if any, will be routed to the timeout relationship,the dataflow will be cancelled, and the invocation will end.\",\n+                                \"displayName\": \"Dataflow Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"group.id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Dataflow Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"header-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n-                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n+                            \"Failure Ports\": {\n+                                \"description\": \"A comma-separated list of the names of Output Ports that exist at the root level of the dataflow. If any FlowFile is routed to one of the Ports whose name is listed here, the dataflow will be considered a failure, and the incoming FlowFile (if any) will be routed to 'failure'. If not specified, all Output Ports will be considered successful.\",\n+                                \"displayName\": \"Failure Ports\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n+                                \"name\": \"Failure Ports\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"honor-transactions\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Flow Name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"Use NiFi Registry\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n+                                        \"propertyName\": \"Dataflow Specification Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n+                                \"description\": \"The name of the flow in the NiFi Registry\",\n+                                \"displayName\": \"Flow Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"honor-transactions\",\n+                                \"name\": \"Flow Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"Flow Version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use NiFi Registry\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n+                                        \"propertyName\": \"Dataflow Specification Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The version of the flow in the NiFi Registry that should be retrieved. If not specified, the latest version will always be used.\",\n+                                \"displayName\": \"Flow Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"name\": \"Flow Version\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n+                            \"Input Port\": {\n+                                \"description\": \"Specifies the name of the Input Port to send incoming FlowFiles to. This property is required if this processor has any incoming connections.\",\n+                                \"displayName\": \"Input Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Input Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Krb5 Conf File\": {\n+                                \"description\": \"The KRB5 Conf file to use for configuring components that rely on Kerberos\",\n+                                \"displayName\": \"Krb5 Conf File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-uncommit-offset-wait\",\n+                                \"name\": \"Krb5 Conf File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n+                            \"Max Ingest Data Size\": {\n+                                \"description\": \"During the course of a stateless dataflow, some processors may require more data than they have available in order to proceed. For example, MergeContent may require a minimum number of FlowFiles before it can proceed. In this case, the dataflow may bring in additional data from its source Processor. However, this data may all be held in memory, so this property provides a mechanism for limiting the maximum amount of data that the source Processor can ingest before it will no longer be triggered to ingest additional data.\",\n+                                \"displayName\": \"Max Ingest Data Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n+                                \"name\": \"Max Ingest Data Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"Max Ingest FlowFiles\": {\n+                                \"description\": \"During the course of a stateless dataflow, some processors may require more data than they have available in order to proceed. For example, MergeContent may require a minimum number of FlowFiles before it can proceed. In this case, the dataflow may bring in additional data from its source Processor. However, this data may all be held in memory, so this property provides a mechanism for limiting the maximum number of FlowFiles that the source Processor can ingest before it will no longer be triggered to ingest additional data.\",\n+                                \"displayName\": \"Max Ingest FlowFiles\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n+                                \"name\": \"Max Ingest FlowFiles\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Max Input FlowFile Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Store Content on Heap\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Content Storage Strategy\",\n+                                        \"propertyName\": \"Content Storage Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"This Processor is configured to load all incoming FlowFiles into memory. Because of that, it is important to limit the maximum size of any incoming FlowFile that would get loaded into memory, in order to prevent Out Of Memory Errors and excessive Garbage Collection. Any FlowFile whose content size is greater than the configured size will be routed to failure and not sent to the Stateless Engine.\",\n+                                \"displayName\": \"Max Input FlowFile Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"Max Input FlowFile Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"NAR Directory\": {\n+                                \"defaultValue\": \"./lib\",\n+                                \"description\": \"This directory has three roles: 1) it contains the NiFi Stateless NAR and other necessary libraries required for the Stateless engine to be bootstrapped, 2) it can contain extensions that should be loaded by the Stateless engine, 3) it is used by the Stateless engine to download extensions into.\",\n+                                \"displayName\": \"NAR Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"NAR Directory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Registry Bucket\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use NiFi Registry\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n+                                        \"propertyName\": \"Dataflow Specification Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The name of the Bucket in the NiFi Registry that the flow should retrieved from\",\n+                                \"displayName\": \"Registry Bucket\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Registry Bucket\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Registry SSL Context Service\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use NiFi Registry\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n+                                        \"propertyName\": \"Dataflow Specification Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The SSL Context Service to use for interacting with the NiFi Registry\",\n+                                \"displayName\": \"Registry SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Registry SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Registry URL\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use NiFi Registry\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n+                                        \"propertyName\": \"Dataflow Specification Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The URL of the NiFi Registry to retrieve the flow from\",\n+                                \"displayName\": \"Registry URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"Registry URL\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Stateless SSL Context Service\": {\n+                                \"description\": \"The SSL Context to use as the Stateless System SSL Context\",\n+                                \"displayName\": \"Stateless SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Stateless SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"Status Task Interval\": {\n+                                \"description\": \"The Stateless engine periodically logs the status of the dataflow's processors.  This property allows the interval to be changed, or the status logging to be skipped altogether if the property is not set.\",\n+                                \"displayName\": \"Status Task Interval\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Status Task Interval\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"Work Directory\": {\n+                                \"defaultValue\": \"./work\",\n+                                \"description\": \"A directory that can be used to create temporary files, such as expanding NAR files, temporary FlowFile content, caching the dataflow, etc.\",\n+                                \"displayName\": \"Work Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Work Directory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"additional-nar-directories\": {\n+                                \"description\": \"A comma-separated list of paths for directories that contain extensions that should be loaded by the stateless engine. The engine will not download any extensions into these directories or write to them but will read any NAR files that are found within these directories. The engine will not recurse into subdirectories of these directories.\",\n+                                \"displayName\": \"Additional NAR Directories\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"additional-nar-directories\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If the dataflow fails to complete in the configured amount of time, any incoming FlowFile will be routed to this relationship\",\n+                                \"name\": \"timeout\"\n+                            },\n+                            {\n+                                \"description\": \"If the dataflow fails to process an incoming FlowFile, that FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"For any incoming FlowFile that is successfully processed, the original incoming FlowFile will be transferred to this Relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFiles that are transferred to an Output Port in the configured dataflow will be routed to this Relationship\",\n+                                \"name\": \"output\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"CPU\"\n+                            },\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"DISK\"\n+                            },\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            },\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"NETWORK\"\n+                            }\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.stateless.ExecuteStateless\",\n+                        \"typeDescription\": \"Runs the configured dataflow using the Stateless NiFi engine. Please see documentation in order to understand the differences between the traditional NiFi runtime engine and the Stateless NiFi engine. If the Processor is configured with an incoming connection, the incoming FlowFiles will be queued up into the specified Input Port in the dataflow. Data that is transferred out of the flow via an Output Port will be sent to the 'output' relationship, and an attribute will be added to indicate which Port that FlowFile was transferred to. See Additional Details for more information.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Output Port that the FlowFile was transferred to\",\n+                                \"name\": \"output.port.name\"\n+                            },\n+                            {\n+                                \"description\": \"If one or more FlowFiles is routed to one of the Output Ports that is configured as a Failure Port, the input FlowFile (if any) will have this attribute added to it, indicating the name of the Port that caused the dataflow to be considered a failure.\",\n+                                \"name\": \"failure.port.name\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-distributed-cache-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait when communicating with the remote server before determining that there is a communications failure if data cannot be sent or received\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, indicates the SSL Context Service that is used to communicate with the remote server. If not specified, communications will not be encrypted\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Server Hostname\": {\n+                                \"description\": \"The name of the server that is running the DistributedMapCacheServer service\",\n+                                \"displayName\": \"Server Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Server Hostname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n+                            \"Server Port\": {\n+                                \"defaultValue\": \"4557\",\n+                                \"description\": \"The port on the remote server that is to be used when communicating with the DistributedMapCacheServer service\",\n+                                \"displayName\": \"Server Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Server Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"1.27.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"cluster\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"state\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                        \"typeDescription\": \"Provides the ability to communicate with a DistributedMapCacheServer. This can be used in order to share a Map between nodes in a NiFi cluster\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait when communicating with the remote server before determining that there is a communications failure if data cannot be sent or received\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, indicates the SSL Context Service that is used to communicate with the remote server. If not specified, communications will not be encrypted\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Server Hostname\": {\n+                                \"description\": \"The name of the server that is running the DistributedSetCacheServer service\",\n+                                \"displayName\": \"Server Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Server Hostname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n+                            \"Server Port\": {\n+                                \"defaultValue\": \"4557\",\n+                                \"description\": \"The port on the remote server that is to be used when communicating with the DistributedSetCacheServer service\",\n+                                \"displayName\": \"Server Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Server Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedSetCacheClient\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.server.DistributedSetCacheServer\",\n+                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"cluster\",\n+                            \"distributed\",\n+                            \"set\",\n+                            \"state\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.distributed.cache.client.DistributedSetCacheClientService\",\n+                        \"typeDescription\": \"Provides the ability to communicate with a DistributedSetCacheServer. This can be used in order to share a Set between nodes in a NiFi cluster\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Eviction Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Least Frequently Used\",\n+                                        \"value\": \"Least Frequently Used\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Least Recently Used\",\n+                                        \"value\": \"Least Recently Used\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"First In, First Out\",\n+                                        \"value\": \"First In, First Out\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                                \"defaultValue\": \"Least Frequently Used\",\n+                                \"description\": \"Determines which strategy should be used to evict values from the cache to make room for new entries\",\n+                                \"displayName\": \"Eviction Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"name\": \"Eviction Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"Maximum Cache Entries\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum number of cache entries that the cache can hold\",\n+                                \"displayName\": \"Maximum Cache Entries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Cache Entries\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Persistence Directory\": {\n+                                \"description\": \"If specified, the cache will be persisted in the given directory; if not specified, the cache will be in-memory only\",\n+                                \"displayName\": \"Persistence Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Persistence Directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"4557\",\n+                                \"description\": \"The port to listen on for incoming connections\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"maximum-read-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum number of network bytes to read for a single cache item\",\n+                                \"displayName\": \"Maximum Read Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"maximum-read-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"distinct\",\n+                            \"distributed\",\n+                            \"server\",\n+                            \"set\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.distributed.cache.server.DistributedSetCacheServer\",\n+                        \"typeDescription\": \"Provides a set (collection of unique values) cache that can be accessed over a socket. Interaction with this service is typically accomplished via a DistributedSetCacheClient service.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Eviction Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n+                                        \"displayName\": \"Least Frequently Used\",\n+                                        \"value\": \"Least Frequently Used\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"displayName\": \"Least Recently Used\",\n+                                        \"value\": \"Least Recently Used\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"displayName\": \"First In, First Out\",\n+                                        \"value\": \"First In, First Out\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"defaultValue\": \"Least Frequently Used\",\n+                                \"description\": \"Determines which strategy should be used to evict values from the cache to make room for new entries\",\n+                                \"displayName\": \"Eviction Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"Eviction Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                            \"Maximum Cache Entries\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum number of cache entries that the cache can hold\",\n+                                \"displayName\": \"Maximum Cache Entries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Cache Entries\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Persistence Directory\": {\n+                                \"description\": \"If specified, the cache will be persisted in the given directory; if not specified, the cache will be in-memory only\",\n+                                \"displayName\": \"Persistence Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Persistence Directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"4557\",\n+                                \"description\": \"The port to listen on for incoming connections\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topic Name(s)\",\n+                            \"maximum-read-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum number of network bytes to read for a single cache item\",\n+                                \"displayName\": \"Maximum Read Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"maximum-read-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"cluster\",\n+                            \"distributed\",\n+                            \"key/value\",\n+                            \"map\",\n+                            \"server\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                        \"typeDescription\": \"Provides a map (key/value) cache that can be accessed over a socket. Interaction with this service is typically accomplished via a DistributedMapCacheClient service.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-avro-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-avro-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.avro.AvroReader\",\n+                            \"org.apache.nifi.json.JsonRecordSetWriter\",\n+                            \"org.apache.nifi.processors.standard.ConvertRecord\"\n+                        ],\n+                        \"deprecationReason\": \"ConvertAvroToJSON is no longer needed since there is the AvroReader which along with JsonRecordSetWriter can be used in ConvertRecord to achieve the same thing.\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Avro schema\": {\n+                                \"description\": \"If the Avro records do not contain the schema (datum only), it must be specified here.\",\n+                                \"displayName\": \"Avro schema\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Avro schema\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"JSON container options\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"array\",\n+                                        \"value\": \"array\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"array\",\n+                                \"description\": \"Determines how stream of records is exposed: either as a sequence of single Objects (none) (i.e. writing every Object to a new line), or as an array of Objects (array).\",\n+                                \"displayName\": \"JSON container options\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"JSON container options\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"topic_type\": {\n+                            \"Wrap Single Record\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Name Format\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Determines if the resulting output for empty records or a single record should be wrapped in a container array as specified by 'JSON container options'\",\n+                                \"displayName\": \"Wrap Single Record\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"topic_type\",\n+                                \"name\": \"Wrap Single Record\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_1_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_1_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_1_0\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles received from Kafka.  Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n+                                \"description\": \"A FlowFile is routed to this relationship after it has been converted to JSON\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a message from Kafka cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be parsed as Avro or cannot be converted to JSON for any reason\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"1.0\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Record\",\n-                            \"Topic\",\n                             \"avro\",\n-                            \"csv\",\n+                            \"convert\",\n                             \"json\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_1_0\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 1.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafkaRecord_1_0. Please note that, at this time, the Processor assumes that all records that are retrieved from a given partition have the same schema. If any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n+                        \"type\": \"org.apache.nifi.processors.avro.ConvertAvroToJSON\",\n+                        \"typeDescription\": \"Converts a Binary Avro record into a JSON object. This processor provides a direct mapping of an Avro field to a JSON field, such that the resulting JSON will have the same hierarchical structure as the Avro document. Note that the Avro schema information will be lost, as this is not a translation from binary Avro to JSON formatted Avro. The output JSON is encoded the UTF-8 encoding. If an incoming FlowFile contains a stream of multiple Avro records, the resultant FlowFile will contain a JSON Array containing all of the Avro records or a sequence of JSON Objects.  If an incoming FlowFile does not contain any records, an empty JSON object is the output. Empty/Single Avro record FlowFile inputs are optionally wrapped in a container as dictated by 'Wrap Single Record'\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records received\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n+                                \"description\": \"Sets the mime type to application/json\",\n                                 \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The partition of the topic the records are from\",\n-                                \"name\": \"kafka.partition\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The topic records are from\",\n-                                \"name\": \"kafka.topic\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-1-0-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-avro-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -63459,398 +61235,666 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"auto.offset.reset\": {\n+                            \"Count Items\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true the number of items in the datafile will be counted and stored in a FlowFile attribute 'item.count'. The counting is done by reading blocks and getting the number of items for each block, thus avoiding de-serializing. The items being counted will be the top-level items in the datafile. For example, with a schema of type record the items will be the records, and for a schema of type Array the items will be the arrays (not the number of entries in each array).\",\n+                                \"displayName\": \"Count Items\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Count Items\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Fingerprint Algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CRC-64-AVRO\",\n+                                        \"value\": \"CRC-64-AVRO\"\n                                     },\n                                     {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-256\",\n+                                        \"value\": \"SHA-256\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n+                                \"defaultValue\": \"CRC-64-AVRO\",\n+                                \"description\": \"The algorithm used to generate the schema fingerprint. Available choices are based on the Avro recommended practices for fingerprint generation.\",\n+                                \"displayName\": \"Fingerprint Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n+                                \"name\": \"Fingerprint Algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"Metadata Keys\": {\n+                                \"description\": \"A comma-separated list of keys indicating key/value pairs to extract from the Avro file header. The key 'avro.schema' can be used to extract the full schema in JSON format, and 'avro.codec' can be used to extract the codec name if one exists.\",\n+                                \"displayName\": \"Metadata Keys\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Metadata Keys\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship after metadata has been extracted.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be parsed as Avro or metadata cannot be extracted for any reason\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"metadata\",\n+                            \"schema\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.avro.ExtractAvroMetadata\",\n+                        \"typeDescription\": \"Extracts metadata from the header of an Avro datafile.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The type of the schema (i.e. record, enum, etc.).\",\n+                                \"name\": \"schema.type\"\n+                            },\n+                            {\n+                                \"description\": \"Contains the name when the type is a record, enum or fixed, otherwise contains the name of the primitive type.\",\n+                                \"name\": \"schema.name\"\n+                            },\n+                            {\n+                                \"description\": \"The result of the Fingerprint Algorithm as a Hex string.\",\n+                                \"name\": \"schema.fingerprint\"\n+                            },\n+                            {\n+                                \"description\": \"The total number of items in the datafile, only written if Count Items is set to true.\",\n+                                \"name\": \"item.count\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-avro-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Output Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of Avro records to include per split file. In cases where the incoming file has less records than the Output Size, or when the total number of records does not divide evenly by the Output Size, it is possible to get a split file with less records.\",\n+                                \"displayName\": \"Output Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"group.id\": {\n-                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n-                                \"displayName\": \"Group ID\",\n+                            \"Output Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Avro's object container file format\",\n+                                        \"displayName\": \"Datafile\",\n+                                        \"value\": \"Datafile\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Bare Avro records\",\n+                                        \"displayName\": \"Bare Record\",\n+                                        \"value\": \"Bare Record\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Datafile\",\n+                                \"description\": \"Determines the format of the output. Either Avro Datafile, or bare record. Bare record output is only intended for use with systems that already require it, and shouldn't be needed for normal use.\",\n+                                \"displayName\": \"Output Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"group.id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"header-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n-                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n+                            \"Split Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Split at Record boundaries\",\n+                                        \"displayName\": \"Record\",\n+                                        \"value\": \"Record\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Record\",\n+                                \"description\": \"The strategy for splitting the incoming datafile. The Record strategy will read the incoming datafile by de-serializing each record.\",\n+                                \"displayName\": \"Split Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n-                                \"required\": false,\n+                                \"name\": \"Split Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"honor-transactions\": {\n+                            \"Transfer Metadata\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n+                                \"description\": \"Whether or not to transfer metadata from the parent datafile to the children. If the Output Strategy is Bare Record, then the metadata will be stored as FlowFile attributes, otherwise it will be in the Datafile header.\",\n+                                \"displayName\": \"Transfer Metadata\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"honor-transactions\",\n+                                \"name\": \"Transfer Metadata\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid Avro), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"key-attribute-encoding\": {\n+                            {\n+                                \"description\": \"The original FlowFile that was split. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"All new files split from the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"split\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"split\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.avro.SplitAvro\",\n+                        \"typeDescription\": \"Splits a binary encoded Avro datafile into smaller files based on the configured Output Size. The Output Strategy determines if the smaller files will be Avro datafiles, or bare Avro records with metadata in the FlowFile attributes. The output will always be binary encoded.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-geohash-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-geohash-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"geohash-format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BASE32\",\n+                                        \"value\": \"BASE32\"\n                                     },\n                                     {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BINARY\",\n+                                        \"value\": \"BINARY\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LONG\",\n+                                        \"value\": \"LONG\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"defaultValue\": \"BASE32\",\n+                                \"description\": \"In the ENCODE mode, this property specifies the desired format for encoding geohash; in the DECODE mode, this property specifies the format of geohash provided\",\n+                                \"displayName\": \"Geohash Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n+                                \"name\": \"geohash-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-uncommit-offset-wait\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-demarcator\": {\n-                                \"description\": \"Since KafkaConsumer receives messages in batches, you have an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n-                                \"displayName\": \"Message Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"message-demarcator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"geohash-level\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"ENCODE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Mode\",\n+                                        \"propertyName\": \"mode\"\n+                                    }\n+                                ],\n+                                \"description\": \"The integer precision level(1-12) desired for encoding geohash\",\n+                                \"displayName\": \"Geohash Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geohash-level\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"geohash-record-path\": {\n+                                \"description\": \"In the ENCODE mode, this property specifies the record path to put the geohash value; in the DECODE mode, this property specifies the record path to retrieve the geohash value\",\n+                                \"displayName\": \"Geohash Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geohash-record-path\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"latitude-record-path\": {\n+                                \"description\": \"In the ENCODE mode, this property specifies the record path to retrieve the latitude values. Latitude values should be in the range of [-90, 90]; invalid values will be logged at warn level. In the DECODE mode, this property specifies the record path to put the latitude value\",\n+                                \"displayName\": \"Latitude Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"latitude-record-path\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n+                            \"longitude-record-path\": {\n+                                \"description\": \"In the ENCODE mode, this property specifies the record path to retrieve the longitude values; Longitude values should be in the range of [-180, 180]; invalid values will be logged at warn level. In the DECODE mode, this property specifies the record path to put the longitude value\",\n+                                \"displayName\": \"Longitude Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"longitude-record-path\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n+                            \"mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ENCODE\",\n+                                        \"value\": \"ENCODE\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DECODE\",\n+                                        \"value\": \"DECODE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                                \"defaultValue\": \"ENCODE\",\n+                                \"description\": \"Specifies whether to encode latitude/longitude to geohash or decode geohash to latitude/longitude\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"name\": \"mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the record reader service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the record writer service to use for writing data\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topic Name(s)\",\n+                            \"routing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKIP\",\n+                                        \"value\": \"SKIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SPLIT\",\n+                                        \"value\": \"SPLIT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRE\",\n+                                        \"value\": \"REQUIRE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SKIP\",\n+                                \"description\": \"Specifies how to route flowfiles after encoding or decoding being performed. SKIP will enrich those records that can be enriched and skip the rest. The SKIP strategy will route a flowfile to failure only if unable to parse the data. Otherwise, it will route the enriched flowfile to success, and the original input to original. SPLIT will separate the records that have been enriched from those that have not and send them to matched, while unenriched records will be sent to unmatched; the original input flowfile will be sent to original. The SPLIT strategy will route a flowfile to failure only if unable to parse the data. REQUIRE will route a flowfile to success only if all of its records are enriched, and the original input will be sent to original. The REQUIRE strategy will route the original input flowfile to failure if any of its records cannot be enriched or unable to be parsed\",\n+                                \"displayName\": \"Routing Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"routing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Flowfiles that are successfully encoded or decoded will be routed to success\",\n+                                \"name\": \"success\"\n                             },\n-                            \"topic_type\": {\n+                            {\n+                                \"description\": \"Flowfiles that cannot be encoded or decoded will be routed to failure\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original input flowfile will be sent to this relationship\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"geo\",\n+                            \"geohash\",\n+                            \"record\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.geohash.GeohashRecord\",\n+                        \"typeDescription\": \"A record-based processor that encodes and decodes Geohashes from and to latitude/longitude coordinates.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The MIME type indicated by the record writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records in the resulting flow file\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-evtx-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-evtx-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"granularity\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Record\",\n+                                        \"value\": \"Record\"\n                                     },\n                                     {\n-                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Chunk\",\n+                                        \"value\": \"Chunk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"File\",\n+                                        \"value\": \"File\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Name Format\",\n+                                \"defaultValue\": \"Chunk\",\n+                                \"description\": \"Output flow file for each Record, Chunk, or File encountered in the event log\",\n+                                \"displayName\": \"Granularity\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"topic_type\",\n+                                \"name\": \"granularity\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The filename of the evtx file\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles received from Kafka. Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n+                                \"description\": \"Any FlowFile that was successfully converted from evtx to XML\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that encountered an exception during conversion will be transferred to this relationship with as much parsing as possible done\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The unmodified input FlowFile will be transferred to this relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"Any bad chunks of records will be transferred to this relationship in their original binary form\",\n+                                \"name\": \"bad chunk\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"1.0\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Topic\"\n+                            \"event\",\n+                            \"evtx\",\n+                            \"file\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"windows\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_1_0\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 1.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafka_1_0.\",\n+                        \"type\": \"org.apache.nifi.processors.evtx.ParseEvtx\",\n+                        \"typeDescription\": \"Parses the contents of a Windows Event Log file (evtx) and writes the resulting XML to the FlowFile\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of messages written if more than one\",\n-                                \"name\": \"kafka.count\"\n-                            },\n-                            {\n-                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n-                                \"name\": \"kafka.key\"\n-                            },\n-                            {\n-                                \"description\": \"The offset of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.offset\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The partition of the topic the message or message bundle is from\",\n-                                \"name\": \"kafka.partition\"\n+                                \"description\": \"The output filename\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The topic the message or message bundle is from\",\n-                                \"name\": \"kafka.topic\"\n+                                \"description\": \"The output filetype (application/xml for success and failure relationships, original value for bad chunk and original relationships)\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-slack-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-1-0-nar\",\n+                        \"artifact\": \"nifi-slack-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -63860,440 +61904,417 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"deprecated\": true,\n                         \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\"\n+                            \"org.apache.nifi.processors.slack.PublishSlack\"\n                         ],\n-                        \"deprecationReason\": \"\",\n+                        \"deprecationReason\": \"This Processor is more difficult to configure than necessary, and exposes intricate nuances of the Slack API that need not be exposed. Additionally, it lacks some capabilities, such as responding to messages in threads. It interacts directly with the Slack API instead of making use of the Slack-provided SDK, which makes the Processor much more brittle. Additionally, it does not make clear the differences between PutSlack and PostSlack. Each provides slightly different capabilities. PublishSlack combines the capabilities of both Processors in a simpler configuration that makes use of Slack's standard REST API.\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n+                                \"description\": \"The property value will be converted to JSON and will be added to the array of attachments in the JSON payload being sent to Slack. The property name will not be used by the processor.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"<Arbitrary name>\",\n+                                \"value\": \"JSON snippet specifying a Slack message \\\"attachment\\\"\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"acks\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                            \"access-token\": {\n+                                \"description\": \"OAuth Access Token used for authenticating/authorizing the Slack request sent by NiFi.\",\n+                                \"displayName\": \"Access Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n+                                \"name\": \"access-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"attribute-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"channel\": {\n+                                \"description\": \"Slack channel, private group, or IM channel to send the message to.\",\n+                                \"displayName\": \"Channel\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"channel\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                            \"file-mime-type\": {\n+                                \"defaultValue\": \"${mime.type}\",\n+                                \"description\": \"Mime type of the file to be uploaded. The property value will only be used if 'Upload FlowFile' has been set to 'Yes'. If the property evaluated to null or empty string, then the mime type will be set to 'application/octet-stream' in the Slack message.\",\n+                                \"displayName\": \"File Mime Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-mime-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"Name of the file to be uploaded. The property value will only be used if 'Upload FlowFile' has been set to 'Yes'. If the property evaluated to null or empty string, then the file name will be set to 'file' in the Slack message.\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n+                            \"file-title\": {\n+                                \"description\": \"Title of the file displayed in the Slack message. The property value will only be used if 'Upload FlowFile' has been set to 'Yes'.\",\n+                                \"displayName\": \"File Title\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-title\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"file-upload-url\": {\n+                                \"defaultValue\": \"https://slack.com/api/files.upload\",\n+                                \"description\": \"Slack Web API URL for uploading files to channels. It only needs to be changed if Slack changes its API URL.\",\n+                                \"displayName\": \"File Upload URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"name\": \"file-upload-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"post-message-url\": {\n+                                \"defaultValue\": \"https://slack.com/api/chat.postMessage\",\n+                                \"description\": \"Slack Web API URL for posting text messages to channels. It only needs to be changed if Slack changes its API URL.\",\n+                                \"displayName\": \"Post Message URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-key-field\": {\n-                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n-                                \"displayName\": \"Message Key Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"message-key-field\",\n-                                \"required\": false,\n+                                \"name\": \"post-message-url\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to. How this value is interpreted is dictated by the <Partitioner class> property.\",\n-                                \"displayName\": \"Partition\",\n+                            \"text\": {\n+                                \"description\": \"Text of the Slack message to send. Only required if no attachment has been specified and 'Upload File' has been set to 'No'.\",\n+                                \"displayName\": \"Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n+                                \"name\": \"text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioner.class\": {\n+                            \"upload-flowfile\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Messages will be assigned to random partitions.\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Interprets the <Partition> property as a RecordPath that will be evaluated against each Record to determine which partition the Record will go to. All Records that have the same value for the given RecordPath will go to the same Partition.\",\n-                                        \"displayName\": \"RecordPath Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RecordPathPartitioner\"\n+                                        \"description\": \"Upload and attach FlowFile content to the Slack message.\",\n+                                        \"displayName\": \"Yes\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                        \"description\": \"Don't upload and attach FlowFile content to the Slack message.\",\n+                                        \"displayName\": \"No\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n-                                \"displayName\": \"Partitioner class\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not to upload and attach the FlowFile content to the Slack message.\",\n+                                \"displayName\": \"Upload FlowFile\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\n-                                \"required\": false,\n+                                \"name\": \"upload-flowfile\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles are routed to success after being successfully sent to Slack\",\n+                                \"name\": \"success\"\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n+                            {\n+                                \"description\": \"FlowFiles are routed to failure if unable to be sent to Slack\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"message\",\n+                            \"notify\",\n+                            \"post\",\n+                            \"slack\",\n+                            \"upload\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.slack.PostSlack\",\n+                        \"typeDescription\": \"Sends a message on Slack. The FlowFile content (e.g. an image) can be uploaded and attached to the message.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The Slack URL of the uploaded file. It will be added if 'Upload FlowFile' has been set to 'Yes'.\",\n+                                \"name\": \"slack.file.url\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-slack-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"3 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Access Token\": {\n+                                \"description\": \"OAuth Access Token used for authenticating/authorizing the Slack request sent by NiFi. This may be either a User Token or a Bot Token. The token must be granted the chat:write scope. Additionally, in order to upload FlowFile contents as an attachment, it must be granted files:write.\",\n+                                \"displayName\": \"Access Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"Access Token\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Channel\": {\n+                                \"description\": \"The name or identifier of the channel to send the message to. If using a channel name, it must be prefixed with the # character. For example, #general. This is valid only for public channels. Otherwise, the unique identifier of the channel to publish to must be provided.\",\n+                                \"displayName\": \"Channel\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Channel\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Send FlowFile Content as Message\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the Character Set used to encode the FlowFile contents.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"Include FlowFile Content as Attachment\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"dependentValues\": [\n+                                            \"Use 'Message Text' Property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"description\": \"Specifies whether or not the contents of the FlowFile should be uploaded as an attachment to the Slack message.\",\n+                                \"displayName\": \"Include FlowFile Content as Attachment\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"Include FlowFile Content as Attachment\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Max FlowFile Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Include FlowFile Content as Attachment\",\n+                                        \"propertyName\": \"Include FlowFile Content as Attachment\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum size of a FlowFile that can be sent to Slack. If any FlowFile exceeds this size, it will be routed to failure. This plays an important role because the entire contents of the file must be loaded into NiFi's heap in order to send the data to Slack.\",\n+                                \"displayName\": \"Max FlowFile Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Max FlowFile Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n+                            \"Message Text\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use 'Message Text' Property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of the message to send to Slack.\",\n+                                \"displayName\": \"Message Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"topic\",\n+                                \"name\": \"Message Text\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"transactional-id-prefix\": {\n-                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n-                                \"displayName\": \"Transactional Id Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"transactional-id-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"use-transactions\": {\n+                            \"Publish Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The contents of the FlowFile will be sent as the message text.\",\n+                                        \"displayName\": \"Send FlowFile Content as Message\",\n+                                        \"value\": \"Send FlowFile Content as Message\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The value of the Message Text Property will be sent as the message text.\",\n+                                        \"displayName\": \"Use 'Message Text' Property\",\n+                                        \"value\": \"Use 'Message Text' Property\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n-                                \"displayName\": \"Use Transactions\",\n+                                \"defaultValue\": \"Send FlowFile Content as Message\",\n+                                \"description\": \"Specifies how the Processor will send the message or file to Slack.\",\n+                                \"displayName\": \"Publish Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-transactions\",\n+                                \"name\": \"Publish Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"Thread Timestamp\": {\n+                                \"description\": \"The Timestamp identifier for the thread that this message is to be a part of. If not specified, the message will be a top-level message instead of being in a thread.\",\n+                                \"displayName\": \"Thread Timestamp\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Thread Timestamp\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_1_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_1_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_1_0\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n+                                \"description\": \"FlowFiles are routed to success after being successfully sent to Slack\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"description\": \"FlowFiles are routed to 'rate limited' if the Rate Limit has been exceeded\",\n+                                \"name\": \"rate limited\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to 'failure' if unable to be sent to Slack for any other reason\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"1.0\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Record\",\n-                            \"Send\",\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\",\n-                            \"logs\"\n+                            \"chat.postMessage\",\n+                            \"conversation\",\n+                            \"publish\",\n+                            \"send\",\n+                            \"slack\",\n+                            \"social media\",\n+                            \"team\",\n+                            \"text\",\n+                            \"unstructured\",\n+                            \"upload\",\n+                            \"write\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_1_0\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as individual records to Apache Kafka using the Kafka 1.0 Producer API. The contents of the FlowFile are expected to be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafkaRecord_1_0.\",\n+                        \"type\": \"org.apache.nifi.processors.slack.PublishSlack\",\n+                        \"typeDescription\": \"Posts a message to the specified Slack channel. The content of the message can be either a user-defined message that makes use of Expression Language or the contents of the FlowFile can be sent as the message. If sending a user-defined message, the contents of the FlowFile may also be optionally uploaded as a file attachment.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n-                                \"name\": \"msg.count\"\n+                                \"description\": \"The ID of the Slack Channel from which the messages were retrieved\",\n+                                \"name\": \"slack.channel.id\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of the slack messages that was sent; this is used by Slack as a unique identifier\",\n+                                \"name\": \"slack.ts\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-1-0-nar\",\n+                        \"artifact\": \"nifi-slack-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -64303,967 +62324,1485 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"deprecated\": true,\n                         \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n+                            \"org.apache.nifi.processors.slack.PublishSlack\"\n                         ],\n-                        \"deprecationReason\": \"\",\n+                        \"deprecationReason\": \"This Processor makes use of a Webhook URL, rather than Slack's REST API. As a result, the Processor is more difficult to configure than necessary and requires special permissions for the Slack Application / Bot. These permissions must be granted for every channel that the application is to respond to, which makes setup and maintenance difficult. Additionally, it does not make clear the differences between PutSlack and PostSlack. Each provides slightly different capabilities. PublishSlack combines the capabilities of both Processors in a simpler configuration that makes use of Slack's standard REST API.\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n+                                \"description\": \"Converts the contents of each value specified by the Dynamic Property's value to JSON and appends it to the payload being sent to Slack.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"A JSON object to add to Slack's \\\"attachments\\\" JSON payload.\",\n+                                \"value\": \"JSON-formatted string to add to Slack's payload JSON appended to the \\\"attachments\\\" JSON array.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"channel\": {\n+                                \"description\": \"A public channel using #channel or direct message using @username. If not specified, the default webhook channel as specified in Slack's Incoming Webhooks web interface is used.\",\n+                                \"displayName\": \"Channel\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"channel\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"icon-emoji\": {\n+                                \"description\": \"Icon Emoji to be used for the message. Must begin and end with a colon, e.g. :ghost:\",\n+                                \"displayName\": \"Icon Emoji\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"icon-emoji\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"icon-url\": {\n+                                \"description\": \"Icon URL to be used for the message\",\n+                                \"displayName\": \"Icon URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"icon-url\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"username\": {\n+                                \"description\": \"The displayed Slack username\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"webhook-text\": {\n+                                \"description\": \"The text sent in the webhook message\",\n+                                \"displayName\": \"Webhook Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"webhook-text\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n+                            \"webhook-url\": {\n+                                \"description\": \"The POST URL provided by Slack to send messages into a channel.\",\n+                                \"displayName\": \"Webhook URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"webhook-url\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles are routed to success after being successfully sent to Slack\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to failure if unable to be sent to Slack\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"notify\",\n+                            \"put\",\n+                            \"slack\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.slack.PutSlack\",\n+                        \"typeDescription\": \"Sends a message to your team on slack.com\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-oauth2-provider-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-oauth2-provider-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.oauth2.StandardOauth2AccessTokenProvider\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"oauth2-access-token-url\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"The full endpoint of the URL where access tokens are handled.\",\n+                                \"displayName\": \"Access Token Url\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"oauth2-access-token-url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"oauth2-ssl-context\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"SSL Context\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"oauth2-ssl-context\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.oauth2.OAuth2TokenProvider\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"authorization\",\n+                            \"oauth2\",\n+                            \"provider\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.oauth2.OAuth2TokenProviderImpl\",\n+                        \"typeDescription\": \"This controller service provides a way of working with access and refresh tokens via the password and client_credential grant flows in the OAuth2 specification. It is meant to provide a way for components to get a token from an oauth2 provider and pass that token as a part of a header to another service.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-oauth2-provider-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"HTTP Protocols\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"HTTP/1.1\",\n+                                        \"displayName\": \"http/1.1\",\n+                                        \"value\": \"HTTP_1_1\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n+                                        \"displayName\": \"h2 http/1.1\",\n+                                        \"value\": \"H2_HTTP_1_1\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"HTTP/2\",\n+                                        \"displayName\": \"h2\",\n+                                        \"value\": \"H2\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                                \"defaultValue\": \"H2_HTTP_1_1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"ssl-context-service\"\n+                                    }\n+                                ],\n+                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n+                                \"displayName\": \"HTTP Protocols\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n+                                \"name\": \"HTTP Protocols\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attribute-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                            \"audience\": {\n+                                \"description\": \"Audience for the access token request defined in RFC 8693 Section 2.1\",\n+                                \"displayName\": \"Audience\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n+                                \"name\": \"audience\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"authorization-server-url\": {\n+                                \"description\": \"The URL of the authorization server that issues access tokens.\",\n+                                \"displayName\": \"Authorization Server URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"name\": \"authorization-server-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n+                            \"client-authentication-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"description\": \"Send client authentication in request body. RFC 6749 Section 2.3.1 recommends Basic Authentication instead of request body.\",\n+                                        \"displayName\": \"REQUEST_BODY\",\n+                                        \"value\": \"REQUEST_BODY\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n+                                        \"description\": \"Send client authentication using HTTP Basic authentication.\",\n+                                        \"displayName\": \"BASIC_AUTHENTICATION\",\n+                                        \"value\": \"BASIC_AUTHENTICATION\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"defaultValue\": \"REQUEST_BODY\",\n+                                \"description\": \"Strategy for authenticating the client against the OAuth2 token provider service.\",\n+                                \"displayName\": \"Client Authentication Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n+                                \"name\": \"client-authentication-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kafka-key\": {\n-                                \"description\": \"The Key to use for the Message. If not specified, the flow file attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n-                                \"displayName\": \"Kafka Key\",\n+                            \"client-id\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Client ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"kafka-key\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"client-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"key-attribute-encoding\": {\n+                            \"client-secret\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Client ID\",\n+                                        \"propertyName\": \"client-id\"\n+                                    }\n+                                ],\n+                                \"description\": \"\",\n+                                \"displayName\": \"Client secret\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"client-secret\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"grant-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n+                                        \"description\": \"Resource Owner Password Credentials Grant. Used to access resources available to users. Requires username and password and usually Client ID and Client Secret.\",\n+                                        \"displayName\": \"User Password\",\n+                                        \"value\": \"password\"\n                                     },\n                                     {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"description\": \"Client Credentials Grant. Used to access resources available to clients. Requires Client ID and Client Secret.\",\n+                                        \"displayName\": \"Client Credentials\",\n+                                        \"value\": \"client_credentials\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n+                                        \"description\": \"Refresh Token Grant. Used to get fresh access tokens based on a previously acquired refresh token. Requires Client ID and Client Secret (apart from Refresh Token).\",\n+                                        \"displayName\": \"Refresh Token\",\n+                                        \"value\": \"refresh_token\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"defaultValue\": \"password\",\n+                                \"description\": \"The OAuth2 Grant Type to be used when acquiring an access token.\",\n+                                \"displayName\": \"Grant Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n+                                \"name\": \"grant-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"refresh-token\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"refresh_token\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Grant Type\",\n+                                        \"propertyName\": \"grant-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Refresh Token.\",\n+                                \"displayName\": \"Refresh Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n+                                \"name\": \"refresh-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"refresh-window\": {\n+                                \"defaultValue\": \"0 s\",\n+                                \"description\": \"The service will attempt to refresh tokens expiring within the refresh window, subtracting the configured duration from the token expiration.\",\n+                                \"displayName\": \"Refresh Window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"name\": \"refresh-window\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-demarcator\": {\n-                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n-                                \"displayName\": \"Message Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"message-demarcator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"resource\": {\n+                                \"description\": \"Resource URI for the access token request defined in RFC 8707 Section 2\",\n+                                \"displayName\": \"Resource\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n+                                \"name\": \"resource\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to.\",\n-                                \"displayName\": \"Partition\",\n+                            \"scope\": {\n+                                \"description\": \"Space-delimited, case-sensitive list of scopes of the access request (as per the OAuth 2.0 specification)\",\n+                                \"displayName\": \"Scope\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"scope\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioner.class\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Messages will be assigned to random partitions.\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n-                                    },\n+                            \"service-password\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                        \"dependentValues\": [\n+                                            \"password\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Grant Type\",\n+                                        \"propertyName\": \"grant-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n-                                \"displayName\": \"Partitioner class\",\n+                                \"description\": \"Password for the username on the service that is being accessed.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"service-password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n+                            \"service-user-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"dependentValues\": [\n+                                            \"password\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Grant Type\",\n+                                        \"propertyName\": \"grant-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"description\": \"Username on the service that is being accessed.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"service-user-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"transactional-id-prefix\": {\n-                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n-                                \"displayName\": \"Transactional Id Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"transactional-id-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"use-transactions\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n-                                \"displayName\": \"Use Transactions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-transactions\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"1.0\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Send\"\n+                            \"access token\",\n+                            \"authorization\",\n+                            \"http\",\n+                            \"oauth2\",\n+                            \"provider\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_1_0\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as a message to Apache Kafka using the Kafka 1.0 Producer API.The messages to send may be individual FlowFiles or may be delimited, using a user-specified delimiter, such as a new-line. The complementary NiFi processor for fetching messages is ConsumeKafka_1_0.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success. If the <Message Demarcator> Property is not set, this will always be 1, but if the Property is set, it may be greater than 1.\",\n-                                \"name\": \"msg.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.oauth2.StandardOauth2AccessTokenProvider\",\n+                        \"typeDescription\": \"Provides OAuth 2.0 access tokens that can be used as Bearer authorization header in HTTP requests. Can use either Resource Owner Password Credentials Grant or Client Credentials Grant. Client authentication can be done with either HTTP Basic authentication or in the request body.\",\n+                        \"version\": \"1.27.0\"\n                     }\n                 ],\n+                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-opentelemetry-nar\",\n+            \"artifact\": \"nifi-hazelcast-services-nar\",\n             \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-opentelemetry-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hazelcast-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"25 ms\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Address\": {\n-                                \"defaultValue\": \"0.0.0.0\",\n-                                \"description\": \"Internet Protocol Address on which to listen for OTLP Export Service Requests. The default value enables listening on all addresses.\",\n-                                \"displayName\": \"Address\",\n+                            \"hazelcast-cache-manager\": {\n+                                \"description\": \"A Hazelcast Cache Manager which manages connections to Hazelcast and provides cache instances.\",\n+                                \"displayName\": \"Hazelcast Cache Manager\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Address\",\n+                                \"name\": \"hazelcast-cache-manager\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"hazelcast-cache-name\": {\n+                                \"description\": \"The name of a given cache. A Hazelcast cluster may handle multiple independent caches, each identified by a name. Clients using caches with the same name are working on the same data structure within Hazelcast.\",\n+                                \"displayName\": \"Hazelcast Cache Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hazelcast-cache-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Maximum number of OTLP request resource elements included in each FlowFile produced\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"hazelcast-entry-ttl\": {\n+                                \"defaultValue\": \"5 min\",\n+                                \"description\": \"Indicates how long the written entries should exist in Hazelcast. Setting it to '0 secs' means that the datawill exists until its deletion or until the Hazelcast server is shut down. Using `EmbeddedHazelcastCacheManager` ascache manager will not provide policies to limit the size of the cache.\",\n+                                \"displayName\": \"Hazelcast Entry Lifetime\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"name\": \"hazelcast-entry-ttl\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"version\": \"1.27.0\"\n                             },\n-                            \"Client Authentication\": {\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"hazelcast\",\n+                            \"map\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.hazelcast.services.cacheclient.HazelcastMapCacheClient\",\n+                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Hazelcast as the backing cache. This service relies on an other controller service, manages the actual Hazelcast calls, set in Hazelcast Cache Manager.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"hazelcast-cluster-name\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"Name of the Hazelcast cluster.\",\n+                                \"displayName\": \"Hazelcast Cluster Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hazelcast-cluster-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-clustering-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"No high availability or data replication is provided, every node has access only to the data stored locally.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Creates Hazelcast cluster based on the NiFi cluster: It expects every NiFi nodes to have a running Hazelcast instance on the same port as specified in the Hazelcast Port property. No explicit listing of the instances is needed.\",\n+                                        \"displayName\": \"All Nodes\",\n+                                        \"value\": \"all_nodes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Works with an explicit list of Hazelcast instances, creating a cluster using the listed instances. This provides greater control, making it possible to utilize only certain nodes as Hazelcast servers. The list of Hazelcast instances can be set in the property \\\"Hazelcast Instances\\\". The list items must refer to hosts within the NiFi cluster, no external Hazelcast is allowed. NiFi nodes are not listed will be join to the Hazelcast cluster as clients.\",\n+                                        \"displayName\": \"Explicit\",\n+                                        \"value\": \"explicit\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"WANT\",\n-                                \"description\": \"Client authentication policy for TLS communication with HTTPS\",\n-                                \"displayName\": \"Client Authentication\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"Specifies with what strategy the Hazelcast cluster should be created.\",\n+                                \"displayName\": \"Hazelcast Clustering Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Authentication\",\n+                                \"name\": \"hazelcast-clustering-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"4317\",\n-                                \"description\": \"TCP port number on which to listen for OTLP Export Service Requests over HTTP and gRPC\",\n-                                \"displayName\": \"Port\",\n+                            \"hazelcast-instances\": {\n+                                \"description\": \"Only used with \\\"Explicit\\\" Clustering Strategy! List of NiFi instance host names which should be part of the Hazelcast cluster. Host names are separated by comma. The port specified in the \\\"Hazelcast Port\\\" property will be used as server port. The list must contain every instance that will be part of the cluster. Other instances will join the Hazelcast cluster as clients.\",\n+                                \"displayName\": \"Hazelcast Instances\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hazelcast-instances\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-port\": {\n+                                \"defaultValue\": \"5701\",\n+                                \"description\": \"Port for the Hazelcast instance to use.\",\n+                                \"displayName\": \"Hazelcast Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hazelcast-port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"hazelcast\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.EmbeddedHazelcastCacheManager\",\n+                        \"typeDescription\": \"A service that runs embedded Hazelcast and provides cache instances backed by that. The server does not ask for authentication, it is recommended to run it within secured network.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"hazelcast-cluster-name\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"Name of the Hazelcast cluster.\",\n+                                \"displayName\": \"Hazelcast Cluster Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hazelcast-cluster-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-connection-timeout\": {\n+                                \"defaultValue\": \"20 secs\",\n+                                \"description\": \"The maximum amount of time the client tries to connect or reconnect before giving up.\",\n+                                \"displayName\": \"Hazelcast Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"hazelcast-connection-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Queue Capacity\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Maximum number of OTLP request resource elements that can be received and queued\",\n-                                \"displayName\": \"Queue Capacity\",\n+                            \"hazelcast-retry-backoff-initial\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"description\": \"The amount of time the client waits before it tries to reestablish connection for the first time.\",\n+                                \"displayName\": \"Hazelcast Initial Backoff\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Queue Capacity\",\n+                                \"name\": \"hazelcast-retry-backoff-initial\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"SSL Context Service enables TLS communication for HTTPS\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"hazelcast-retry-backoff-maximum\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"The maximum amount of time the client waits before it tries to reestablish connection.\",\n+                                \"displayName\": \"Hazelcast Maximum Backoff\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"hazelcast-retry-backoff-maximum\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Worker Threads\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"Number of threads responsible for decoding and queuing incoming OTLP Export Service Requests\",\n-                                \"displayName\": \"Worker Threads\",\n+                            \"hazelcast-retry-backoff-multiplier\": {\n+                                \"defaultValue\": \"1.5\",\n+                                \"description\": \"A multiplier by which the wait time is increased before each attempt to reestablish connection.\",\n+                                \"displayName\": \"Hazelcast Backoff Multiplier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Worker Threads\",\n+                                \"name\": \"hazelcast-retry-backoff-multiplier\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-server-address\": {\n+                                \"description\": \"Addresses of one or more the Hazelcast instances, using {host:port} format, separated by comma.\",\n+                                \"displayName\": \"Hazelcast Server Address\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hazelcast-server-address\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Export Service Requests containing OTLP Telemetry\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"OTLP\",\n-                            \"OTel\",\n-                            \"OpenTelemetry\",\n-                            \"logs\",\n-                            \"metrics\",\n-                            \"telemetry\",\n-                            \"traces\"\n+                            \"cache\",\n+                            \"hazelcast\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.opentelemetry.ListenOTLP\",\n-                        \"typeDescription\": \"Collect OpenTelemetry messages over HTTP or gRPC. Supports standard Export Service Request messages for logs, metrics, and traces. Implements OpenTelemetry OTLP Specification 1.0.0 with OTLP/gRPC and OTLP/HTTP. Provides protocol detection using the HTTP Content-Type header.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Content-Type set to application/json\",\n-                                \"name\": \"mime.type\"\n-                            },\n+                        \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.ExternalHazelcastCacheManager\",\n+                        \"typeDescription\": \"A service that provides cache instances backed by Hazelcast running outside of NiFi.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-ldap-iaa-providers-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-file-resource-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-file-resource-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"OpenTelemetry Resource Type: LOGS, METRICS, or TRACES\",\n-                                \"name\": \"resource.type\"\n-                            },\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"file-path\": {\n+                                \"defaultValue\": \"${absolute.path}/${filename}\",\n+                                \"description\": \"Path to a file that can be accessed locally.\",\n+                                \"displayName\": \"File Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-path\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Count of resource elements included in messages\",\n-                                \"name\": \"resource.count\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                \"version\": \"1.27.0\"\n                             }\n-                        ]\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"file\",\n+                            \"resource\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.fileresource.service.StandardFileResourceService\",\n+                        \"typeDescription\": \"Provides a file resource for other components. The file needs to be available locally by Nifi (e.g. local disk or mounted storage). NiFi needs to have read permission to the file.\",\n+                        \"version\": \"1.27.0\"\n                     }\n                 ],\n+                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-pgp-nar\",\n+            \"artifact\": \"nifi-airtable-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-airtable-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"defaultYieldDuration\": \"15 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"decryption-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Produce decrypted content read from literal data ignoring signatures\",\n-                                        \"displayName\": \"DECRYPTED\",\n-                                        \"value\": \"DECRYPTED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Produce decrypted content packaged as an OpenPGP message for additional processing\",\n-                                        \"displayName\": \"PACKAGED\",\n-                                        \"value\": \"PACKAGED\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DECRYPTED\",\n-                                \"description\": \"Strategy for writing files to success after decryption\",\n-                                \"displayName\": \"Decryption Strategy\",\n+                            \"api-key\": {\n+                                \"description\": \"The REST API key to use in queries. Should be generated on Airtable's account page.\",\n+                                \"displayName\": \"API Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"decryption-strategy\",\n+                                \"name\": \"api-key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"api-url\": {\n+                                \"defaultValue\": \"https://api.airtable.com/v0\",\n+                                \"description\": \"The URL for the Airtable REST API including the domain and the path to the API (e.g. https://api.airtable.com/v0).\",\n+                                \"displayName\": \"API URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"api-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"passphrase\": {\n-                                \"description\": \"Passphrase used for decrypting data encrypted with Password-Based Encryption\",\n-                                \"displayName\": \"Passphrase\",\n+                            \"base-id\": {\n+                                \"description\": \"The ID of the Airtable base to be queried.\",\n+                                \"displayName\": \"Base ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"passphrase\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"base-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"custom-filter\": {\n+                                \"description\": \"Filter records by Airtable's formulas.\",\n+                                \"displayName\": \"Custom Filter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"custom-filter\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"private-key-service\": {\n-                                \"description\": \"PGP Private Key Service for decrypting data encrypted with Public Key Encryption\",\n-                                \"displayName\": \"Private Key Service\",\n+                            \"fields\": {\n+                                \"description\": \"Comma-separated list of fields to query from the table. Both the field's name and ID can be used.\",\n+                                \"displayName\": \"Fields\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"fields\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-records-per-flowfile\": {\n+                                \"description\": \"The maximum number of result records that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If no value specified, then all records are returned in a single FlowFile.\",\n+                                \"displayName\": \"Max Records Per FlowFile\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max-records-per-flowfile\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"query-page-size\": {\n+                                \"description\": \"Number of records to be fetched in a page. Should be between 1 and 100 inclusively.\",\n+                                \"displayName\": \"Query Page Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"query-page-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"query-time-window-lag\": {\n+                                \"defaultValue\": \"3 s\",\n+                                \"description\": \"The amount of lag to be applied to the query time window's end point. Set this property to avoid missing records when the clock of your local machines and Airtable servers' clock are not in sync. Must be greater than or equal to 1 second.\",\n+                                \"displayName\": \"Query Time Window Lag\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"query-time-window-lag\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"table-id\": {\n+                                \"description\": \"The name or the ID of the Airtable table to be queried.\",\n+                                \"displayName\": \"Table ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"table-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Web Client Service Provider to use for Airtable REST API requests\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"private-key-service\",\n-                                \"required\": false,\n+                                \"name\": \"web-client-service-provider\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.SignContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n-                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The last successful query's time is stored in order to enable incremental loading. The initial query returns all the records in the table and each subsequent query filters the records by their last modified time. In other words, if a record is updated after the last successful query only the updated records will be returned in the next query. State is stored across the cluster, so this Processor can run only on the Primary Node and if a new Primary Node is selected, the new node can pick up where the previous one left off without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Decryption Succeeded\",\n+                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Decryption Failed\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\"\n+                            \"airtable\",\n+                            \"database\",\n+                            \"query\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n-                        \"typeDescription\": \"Decrypt contents of OpenPGP messages. Using the Packaged Decryption Strategy preserves OpenPGP encoding to support subsequent signature verification.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.airtable.QueryAirtableTable\",\n+                        \"typeDescription\": \"Query records from an Airtable table. Records are incrementally retrieved based on the last modified time of the records. Records can also be further filtered by setting the 'Custom Filter' property which supports the formulas provided by the Airtable API. This processor is intended to be run on the Primary Node only.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Filename from decrypted Literal Data\",\n-                                \"name\": \"pgp.literal.data.filename\"\n+                                \"description\": \"Sets the number of records in the FlowFile.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"Modified Date from decrypted Literal Data\",\n-                                \"name\": \"pgp.literal.data.modified\"\n+                                \"description\": \"If 'Max Records Per FlowFile' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\n+                                \"description\": \"If 'Max Records Per FlowFile' is set then this is the total number of FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet.\",\n+                                \"name\": \"fragment.count\"\n                             },\n                             {\n-                                \"description\": \"Symmetric-Key Algorithm Identifier\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.id\"\n+                                \"description\": \"If 'Max Records Per FlowFile' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body. For SCROLL type queries, these parameters are only used in the initial (first page) query as the Elasticsearch Scroll API does not support the same query parameters for subsequent pages of data.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"compression-algorithm\": {\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-format-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UNCOMPRESSED\",\n-                                        \"value\": \"UNCOMPRESSED\"\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ZIP\",\n-                                        \"value\": \"ZIP\"\n+                                        \"description\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ZLIB\",\n-                                        \"value\": \"ZLIB\"\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Aggregation output.\",\n+                                \"displayName\": \"Aggregation Results Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-format-aggregations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-format-hits\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BZIP2\",\n-                                        \"value\": \"BZIP2\"\n+                                        \"description\": \"Document Source only (where present).\",\n+                                        \"displayName\": \"SOURCE_ONLY\",\n+                                        \"value\": \"SOURCE_ONLY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Hit Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ZIP\",\n-                                \"description\": \"Compression Algorithm for encryption\",\n-                                \"displayName\": \"Compression Algorithm\",\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Hits output.\",\n+                                \"displayName\": \"Search Results Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-algorithm\",\n+                                \"name\": \"el-rest-format-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-encoding\": {\n+                            \"el-rest-output-no-hits\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BINARY\",\n-                                        \"value\": \"BINARY\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"BINARY\",\n-                                \"description\": \"File Encoding for encryption\",\n-                                \"displayName\": \"File Encoding\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n+                                \"displayName\": \"Output No Hits\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-encoding\",\n+                                \"name\": \"el-rest-output-no-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"passphrase\": {\n-                                \"description\": \"Passphrase used for encrypting data with Password-Based Encryption\",\n-                                \"displayName\": \"Passphrase\",\n+                            \"el-rest-pagination-keep-alive\": {\n+                                \"defaultValue\": \"10 mins\",\n+                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n+                                \"displayName\": \"Pagination Keep Alive\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"passphrase\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"el-rest-pagination-keep-alive\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"public-key-search\": {\n-                                \"dependencies\": [\n+                            \"el-rest-pagination-type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Public Key Service\",\n-                                        \"propertyName\": \"public-key-service\"\n+                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n+                                        \"displayName\": \"SCROLL\",\n+                                        \"value\": \"pagination-scroll\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n+                                        \"displayName\": \"SEARCH_AFTER\",\n+                                        \"value\": \"pagination-search_after\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results.\",\n+                                        \"displayName\": \"POINT_IN_TIME\",\n+                                        \"value\": \"pagination-pit\"\n                                     }\n                                 ],\n-                                \"description\": \"PGP Public Key Search will be used to match against the User ID or Key ID when formatted as uppercase hexadecimal string of 16 characters\",\n-                                \"displayName\": \"Public Key Search\",\n+                                \"defaultValue\": \"pagination-scroll\",\n+                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n+                                \"displayName\": \"Pagination Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"public-key-search\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-pagination-type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"public-key-service\": {\n-                                \"description\": \"PGP Public Key Service for encrypting data with Public Key Encryption\",\n-                                \"displayName\": \"Public Key Service\",\n+                            \"el-rest-split-up-aggregations\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n+                                \"displayName\": \"Aggregation Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"public-key-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"el-rest-split-up-aggregations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"symmetric-key-algorithm\": {\n+                            \"el-rest-split-up-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_128\",\n-                                        \"value\": \"AES_128\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_192\",\n-                                        \"value\": \"AES_192\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_256\",\n-                                        \"value\": \"AES_256\"\n-                                    },\n+                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n+                                        \"displayName\": \"PER_QUERY\",\n+                                        \"value\": \"splitUp-query\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n+                                \"displayName\": \"Search Results Split\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-split-up-hits\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-additional-filters\": {\n+                                \"description\": \"One or more query filters in JSON syntax, not Lucene syntax. Ex: [{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}, {\\\"match\\\":{\\\"anotherfield\\\":\\\"anothervalue\\\"}}]. These filters wil be used as part of a Bool query's filter.\",\n+                                \"displayName\": \"Additional Filters\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"es-rest-additional-filters\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-query-aggs\": {\n+                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n+                                \"displayName\": \"Aggregations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-aggs\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-query-fields\": {\n+                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n+                                \"displayName\": \"Fields\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-fields\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-query-script-fields\": {\n+                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n+                                \"displayName\": \"Script Fields\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-script-fields\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-query-sort\": {\n+                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n+                                \"displayName\": \"Sort\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-sort\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-range-field\": {\n+                                \"description\": \"Field to be tracked as part of an Elasticsearch Range query using a \\\"gt\\\" bound match. This field must exist within the Elasticsearch document for it to be retrieved.\",\n+                                \"displayName\": \"Range Query Field\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"es-rest-range-field\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-range-format\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CAMELLIA_128\",\n-                                        \"value\": \"CAMELLIA_128\"\n-                                    },\n+                                        \"propertyDisplayName\": \"Initial Value\",\n+                                        \"propertyName\": \"es-rest-range-initial-value\"\n+                                    }\n+                                ],\n+                                \"description\": \"If the \\\"Range Query Field\\\" is a Date field, convert the \\\"Initial Value\\\" to a date with this format. If not specified, Elasticsearch will use the date format provided by the \\\"Range Query Field\\\"'s mapping. For valid syntax, see https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html\",\n+                                \"displayName\": \"Initial Value Date Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"es-rest-range-format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-range-initial-value\": {\n+                                \"description\": \"The initial value to use for the query if the processor has not run previously. If the processor has run previously and stored a value in its state, this property will be ignored. If no value is provided, and the processor has not previously run, no Range query bounds will be used, i.e. all documents will be retrieved in the specified \\\"Sort Order\\\".\",\n+                                \"displayName\": \"Initial Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"es-rest-range-initial-value\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-range-time-zone\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Initial Value\",\n+                                        \"propertyName\": \"es-rest-range-initial-value\"\n+                                    }\n+                                ],\n+                                \"description\": \"If the \\\"Range Query Field\\\" is a Date field, convert the \\\"Initial Value\\\" to UTC with this time zone. Valid values are ISO 8601 UTC offsets, such as \\\"+01:00\\\" or \\\"-08:00\\\", and IANA time zone IDs, such as \\\"Europe/London\\\".\",\n+                                \"displayName\": \"Initial Value Date Time Zone\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"es-rest-range-time-zone\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-size\": {\n+                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n+                                \"displayName\": \"Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-sort-order\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CAMELLIA_192\",\n-                                        \"value\": \"CAMELLIA_192\"\n+                                        \"displayName\": \"asc\",\n+                                        \"value\": \"asc\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CAMELLIA_256\",\n-                                        \"value\": \"CAMELLIA_256\"\n+                                        \"displayName\": \"desc\",\n+                                        \"value\": \"desc\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AES_256\",\n-                                \"description\": \"Symmetric-Key Algorithm for encryption\",\n-                                \"displayName\": \"Symmetric-Key Algorithm\",\n+                                \"defaultValue\": \"asc\",\n+                                \"description\": \"The order in which to sort the \\\"Range Query Field\\\". A \\\"sort\\\" clause for the \\\"Range Query Field\\\" field will be prepended to any provided \\\"Sort\\\" clauses. If a \\\"sort\\\" clause already exists for the \\\"Range Query Field\\\" field, it will not be updated.\",\n+                                \"displayName\": \"Sort Order\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"symmetric-key-algorithm\",\n+                                \"name\": \"es-rest-sort-order\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.SignContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n+                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\",\n+                            \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The pagination state (scrollId, searchAfter, pitId, hitCount, pageCount, pageExpirationTimestamp, trackingRangeValue) is retained in between invocations of this processor until the Scroll/PiT has expired (when the current time is later than the last query execution plus the Pagination Keep Alive interval).\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Encryption Succeeded\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n                             },\n                             {\n-                                \"description\": \"Encryption Failed\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"json\",\n+                            \"page\",\n+                            \"query\",\n+                            \"scroll\",\n+                            \"search\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n-                        \"typeDescription\": \"Encrypt contents using OpenPGP. The processor reads input and detects OpenPGP messages to avoid unnecessary additional wrapping in Literal Data packets.\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.ConsumeElasticsearch\",\n+                        \"typeDescription\": \"A processor that repeatedly runs a paginated query against a field using a Range query to consume new Documents from an Elasticsearch index/query. The processor will retrieve multiple pages of results until either no more results are available or the Pagination Keep Alive expiration is reached, after which the Range query will automatically update the field constraint based on the last retrieved Document value.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Symmetric-Key Algorithm\",\n-                                \"name\": \"pgp.symmetric.key.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\n-                            },\n-                            {\n-                                \"description\": \"Symmetric-Key Algorithm Key Size\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.key.size\"\n-                            },\n-                            {\n-                                \"description\": \"Symmetric-Key Algorithm Identifier\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.id\"\n+                                \"description\": \"application/json\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"File Encoding\",\n-                                \"name\": \"pgp.file.encoding\"\n+                                \"description\": \"The number of the page (request), starting from 1, in which the results were returned that are in the output flowfile\",\n+                                \"name\": \"page.number\"\n                             },\n                             {\n-                                \"description\": \"Compression Algorithm\",\n-                                \"name\": \"pgp.compression.algorithm\"\n+                                \"description\": \"The number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\n                             },\n                             {\n-                                \"description\": \"Compression Algorithm Identifier\",\n-                                \"name\": \"pgp.compression.algorithm.id\"\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n+                                \"name\": \"elasticsearch.query.error\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -65271,233 +63810,188 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"compression-algorithm\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UNCOMPRESSED\",\n-                                        \"value\": \"UNCOMPRESSED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ZIP\",\n-                                        \"value\": \"ZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ZLIB\",\n-                                        \"value\": \"ZLIB\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BZIP2\",\n-                                        \"value\": \"BZIP2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ZIP\",\n-                                \"description\": \"Compression Algorithm for signing\",\n-                                \"displayName\": \"Compression Algorithm\",\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-algorithm\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"file-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BINARY\",\n-                                        \"value\": \"BINARY\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"BINARY\",\n-                                \"description\": \"File Encoding for signing\",\n-                                \"displayName\": \"File Encoding\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-encoding\",\n+                                \"name\": \"el-rest-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hash-algorithm\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA256\",\n-                                        \"value\": \"SHA256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA384\",\n-                                        \"value\": \"SHA384\"\n-                                    },\n+                            \"el-rest-query\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA512\",\n-                                        \"value\": \"SHA512\"\n+                                        \"dependentValues\": [\n+                                            \"full\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SHA512\",\n-                                \"description\": \"Hash Algorithm for signing\",\n-                                \"displayName\": \"Hash Algorithm\",\n+                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hash-algorithm\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"private-key-id\": {\n-                                \"description\": \"PGP Private Key Identifier formatted as uppercase hexadecimal string of 16 characters used for signing\",\n-                                \"displayName\": \"Private Key ID\",\n+                            \"el-rest-query-clause\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query Clause\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"private-key-id\",\n-                                \"required\": true,\n+                                \"name\": \"el-rest-query-clause\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"private-key-service\": {\n-                                \"description\": \"PGP Private Key Service for generating content signatures\",\n-                                \"displayName\": \"Private Key Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"private-key-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"signing-strategy\": {\n+                            \"el-rest-query-definition-style\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Produce signed content packaged as an OpenPGP message\",\n-                                        \"displayName\": \"SIGNED\",\n-                                        \"value\": \"SIGNED\"\n+                                        \"description\": \"Provide the full Query.\",\n+                                        \"displayName\": \"FULL_QUERY\",\n+                                        \"value\": \"full\"\n                                     },\n                                     {\n-                                        \"description\": \"Produce detached signature based on associated content packaged according to OpenPGP encoding\",\n-                                        \"displayName\": \"DETACHED\",\n-                                        \"value\": \"DETACHED\"\n+                                        \"description\": \"Build the Query from separate JSON objects.\",\n+                                        \"displayName\": \"BUILD_QUERY\",\n+                                        \"value\": \"build\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SIGNED\",\n-                                \"description\": \"Strategy for writing files to success after signing\",\n-                                \"displayName\": \"Signing Strategy\",\n+                                \"defaultValue\": \"full\",\n+                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n+                                \"displayName\": \"Query Definition Style\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"signing-strategy\",\n+                                \"name\": \"el-rest-query-definition-style\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Content signing succeeded\",\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Content signing failed\",\n+                                \"description\": \"If the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent to this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\",\n-                            \"Signing\"\n+                            \"delete\",\n+                            \"elastic\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"query\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.pgp.SignContentPGP\",\n-                        \"typeDescription\": \"Sign content using OpenPGP Private Keys\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.DeleteByQueryElasticsearch\",\n+                        \"typeDescription\": \"Delete from an Elasticsearch index using a query. The query can be loaded from a flowfile body or from the Query parameter.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Compression Algorithm\",\n-                                \"name\": \"pgp.compression.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"Compression Algorithm Identifier\",\n-                                \"name\": \"pgp.compression.algorithm.id\"\n-                            },\n-                            {\n-                                \"description\": \"File Encoding\",\n-                                \"name\": \"pgp.file.encoding\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Algorithm including key and hash algorithm names\",\n-                                \"name\": \"pgp.signature.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Hash Algorithm Identifier\",\n-                                \"name\": \"pgp.signature.hash.algorithm.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Key Algorithm Identifier\",\n-                                \"name\": \"pgp.signature.key.algorithm.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Public Key Identifier\",\n-                                \"name\": \"pgp.signature.key.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Type Identifier\",\n-                                \"name\": \"pgp.signature.type.id\"\n+                                \"description\": \"The amount of time that it took to complete the delete operation in ms.\",\n+                                \"name\": \"elasticsearch.delete.took\"\n                             },\n                             {\n-                                \"description\": \"Signature Version Number\",\n-                                \"name\": \"pgp.signature.version\"\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error running the delete.\",\n+                                \"name\": \"elasticsearch.delete.error\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -65505,3768 +63999,3471 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"public-key-service\": {\n-                                \"description\": \"PGP Public Key Service for verifying signatures with Public Key Encryption\",\n-                                \"displayName\": \"Public Key Service\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"public-key-service\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"get-es-attribute-name\": {\n+                                \"defaultValue\": \"elasticsearch.doc\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"flowfile-attribute\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Destination\",\n+                                        \"propertyName\": \"get-es-destination\"\n+                                    }\n+                                ],\n+                                \"description\": \"The name of the FlowFile attribute to use for the retrieved document output.\",\n+                                \"displayName\": \"Attribute Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"get-es-attribute-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"get-es-destination\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Output the retrieved document as the FlowFile content.\",\n+                                        \"displayName\": \"FlowFile Content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Output the retrieved document as a FlowFile attribute specified by the Attribute Name.\",\n+                                        \"displayName\": \"FlowFile Attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the retrieved document is written to the FlowFile content or a FlowFile attribute.\",\n+                                \"displayName\": \"Destination\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"get-es-destination\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"get-es-id\": {\n+                                \"description\": \"The _id of the document to retrieve.\",\n+                                \"displayName\": \"Document Id\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"get-es-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.SignContentPGP\"\n+                            \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Signature Verification Succeeded\",\n-                                \"name\": \"success\"\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"Signature Verification Failed\",\n+                                \"description\": \"Fetched documents are routed to this relationship.\",\n+                                \"name\": \"document\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if the specified document does not exist in the Elasticsearch cluster.\",\n+                                \"name\": \"not_found\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\",\n-                            \"Signing\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"index\",\n+                            \"json\",\n+                            \"put\",\n+                            \"record\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.pgp.VerifyContentPGP\",\n-                        \"typeDescription\": \"Verify signatures using OpenPGP Public Keys\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.GetElasticsearch\",\n+                        \"typeDescription\": \"Elasticsearch get processor that uses the official Elastic REST client libraries to fetch a single document from Elasticsearch by _id. Note that the full body of the document will be read into memory before being written to a FlowFile for transfer.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Filename from Literal Data\",\n-                                \"name\": \"pgp.literal.data.filename\"\n-                            },\n-                            {\n-                                \"description\": \"Modified Date Time from Literal Data in milliseconds\",\n-                                \"name\": \"pgp.literal.data.modified\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Creation Time in milliseconds\",\n-                                \"name\": \"pgp.signature.created\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Algorithm including key and hash algorithm names\",\n-                                \"name\": \"pgp.signature.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Hash Algorithm Identifier\",\n-                                \"name\": \"pgp.signature.hash.algorithm.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Key Algorithm Identifier\",\n-                                \"name\": \"pgp.signature.key.algorithm.id\"\n+                                \"description\": \"The filename attribute is set to the document identifier\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Signature Public Key Identifier\",\n-                                \"name\": \"pgp.signature.key.id\"\n+                                \"description\": \"The Elasticsearch index containing the document\",\n+                                \"name\": \"elasticsearch.index\"\n                             },\n                             {\n-                                \"description\": \"Signature Type Identifier\",\n-                                \"name\": \"pgp.signature.type.id\"\n+                                \"description\": \"The Elasticsearch document type\",\n+                                \"name\": \"elasticsearch.type\"\n                             },\n                             {\n-                                \"description\": \"Signature Version Number\",\n-                                \"name\": \"pgp.signature.version\"\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error fetching the document.\",\n+                                \"name\": \"elasticsearch.get.error\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-pgp-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"key-password\": {\n-                                \"description\": \"Password used for decrypting Private Keys\",\n-                                \"displayName\": \"Key Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"keyring\": {\n-                                \"description\": \"PGP Keyring or Secret Key encoded in ASCII Armor\",\n-                                \"displayName\": \"Keyring\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"keyring\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"keyring-file\": {\n-                                \"description\": \"File path to PGP Keyring or Secret Key encoded in binary or ASCII Armor\",\n-                                \"displayName\": \"Keyring File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"keyring-file\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"Key\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"Private\",\n-                            \"RFC 4880\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.pgp.service.standard.StandardPGPPrivateKeyService\",\n-                        \"typeDescription\": \"PGP Private Key Service provides Private Keys loaded from files or properties\",\n-                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"keyring\": {\n-                                \"description\": \"PGP Keyring or Public Key encoded in ASCII Armor\",\n-                                \"displayName\": \"Keyring\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"keyring\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"keyring-file\": {\n-                                \"description\": \"File path to PGP Keyring or Public Key encoded in binary or ASCII Armor\",\n-                                \"displayName\": \"Keyring File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"keyring-file\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"Key\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"Private\",\n-                            \"RFC 4880\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.pgp.service.standard.StandardPGPPublicKeyService\",\n-                        \"typeDescription\": \"PGP Public Key Service providing Public Keys loaded from files\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hbase_2-client-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hbase_2-client-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"HBase Cache Table Name\": {\n-                                \"description\": \"Name of the table on HBase to use for the cache.\",\n-                                \"displayName\": \"HBase Cache Table Name\",\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"HBase Cache Table Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"HBase Client Service\": {\n-                                \"description\": \"Specifies the HBase Client Controller Service to use for accessing HBase.\",\n-                                \"displayName\": \"HBase Client Service\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HBase Client Service\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"HBase Column Family\": {\n-                                \"defaultValue\": \"f\",\n-                                \"description\": \"Name of the column family on HBase to use for the cache.\",\n-                                \"displayName\": \"HBase Column Family\",\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"HBase Column Family\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"HBase Column Qualifier\": {\n-                                \"defaultValue\": \"q\",\n-                                \"description\": \"Name of the column qualifier on HBase to use for the cache\",\n-                                \"displayName\": \"HBase Column Qualifier\",\n+                            \"el-rest-format-aggregations\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Aggregation output.\",\n+                                \"displayName\": \"Aggregation Results Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"HBase Column Qualifier\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-format-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hb-lu-authorizations\": {\n-                                \"description\": \"The list of authorization tokens to be used with cell visibility if it is enabled. These will be used to override the default authorization list for the user accessing HBase.\",\n-                                \"displayName\": \"Authorizations\",\n+                            \"el-rest-format-hits\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Document Source only (where present).\",\n+                                        \"displayName\": \"SOURCE_ONLY\",\n+                                        \"value\": \"SOURCE_ONLY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Hit Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Hits output.\",\n+                                \"displayName\": \"Search Results Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-authorizations\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-format-hits\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hbase-cache-visibility-expression\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"The default visibility expression to apply to cells when visibility expression support is enabled.\",\n-                                \"displayName\": \"Visibility Expression\",\n+                            \"el-rest-output-no-hits\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n+                                \"displayName\": \"Output No Hits\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hbase-cache-visibility-expression\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-output-no-hits\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                \"version\": \"1.27.0\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.hbase.HBase_2_ClientService\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"cluster\",\n-                            \"distributed\",\n-                            \"hbase\",\n-                            \"map\",\n-                            \"state\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.hbase.HBase_2_ClientMapCacheService\",\n-                        \"typeDescription\": \"Provides the ability to use an HBase table as a cache, in place of a DistributedMapCache. Uses a HBase_2_ClientService controller to communicate with HBase.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hbase_2-client-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be set on the HBase configuration after loading any provided configuration files.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name of an HBase configuration property.\",\n-                                \"value\": \"The value of the given HBase configuration property.\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Client JAR Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"HBase Client Retries\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of times the HBase client will retry connecting. Required if Hadoop Configuration Files are not provided.\",\n-                                \"displayName\": \"HBase Client Retries\",\n+                            \"el-rest-query\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"full\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"HBase Client Retries\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Hadoop Configuration Files\": {\n-                                \"description\": \"Comma-separated list of Hadoop Configuration files, such as hbase-site.xml and core-site.xml for kerberos, including full paths to the files.\",\n-                                \"displayName\": \"Hadoop Configuration Files\",\n+                            \"el-rest-query-clause\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query Clause\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Files\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query-clause\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"el-rest-query-definition-style\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Provide the full Query.\",\n+                                        \"displayName\": \"FULL_QUERY\",\n+                                        \"value\": \"full\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Build the Query from separate JSON objects.\",\n+                                        \"displayName\": \"BUILD_QUERY\",\n+                                        \"value\": \"build\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"full\",\n+                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n+                                \"displayName\": \"Query Definition Style\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-query-definition-style\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"el-rest-split-up-aggregations\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n+                                \"displayName\": \"Aggregation Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"el-rest-split-up-aggregations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"el-rest-split-up-hits\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit.\",\n+                                \"displayName\": \"Search Results Split\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-split-up-hits\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Phoenix Client JAR Location\": {\n-                                \"description\": \"The full path to the Phoenix client JAR. Required if Phoenix is installed on top of HBase.\",\n-                                \"displayName\": \"Phoenix Client JAR Location\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Phoenix Client JAR Location\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"ZooKeeper Client Port\": {\n-                                \"description\": \"The port on which ZooKeeper is accepting client connections. Required if Hadoop Configuration Files are not provided.\",\n-                                \"displayName\": \"ZooKeeper Client Port\",\n+                            \"es-rest-query-aggs\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n+                                \"displayName\": \"Aggregations\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"ZooKeeper Client Port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-aggs\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ZooKeeper Quorum\": {\n-                                \"description\": \"Comma-separated list of ZooKeeper hosts for HBase. Required if Hadoop Configuration Files are not provided.\",\n-                                \"displayName\": \"ZooKeeper Quorum\",\n+                            \"es-rest-query-fields\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n+                                \"displayName\": \"Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"ZooKeeper Quorum\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ZooKeeper ZNode Parent\": {\n-                                \"description\": \"The ZooKeeper ZNode Parent value for HBase (example: /hbase). Required if Hadoop Configuration Files are not provided.\",\n-                                \"displayName\": \"ZooKeeper ZNode Parent\",\n+                            \"es-rest-query-script-fields\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n+                                \"displayName\": \"Script Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"ZooKeeper ZNode Parent\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-script-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"es-rest-query-sort\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n+                                \"displayName\": \"Sort\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-sort\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"es-rest-size\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n+                                \"displayName\": \"Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-size\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"All original flowfiles that don't cause an error to occur go to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\n                             }\n                         ],\n-                        \"restricted\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"client\",\n-                            \"hbase\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"get\",\n+                            \"json\",\n+                            \"query\",\n+                            \"read\"\n                         ],\n-                        \"type\": \"org.apache.nifi.hbase.HBase_2_ClientService\",\n-                        \"typeDescription\": \"Implementation of HBaseClientService using the HBase 2.1.1 client. This service can be configured by providing a comma-separated list of configuration files, or by specifying values for the other properties. If configuration files are provided, they will be loaded first, and the values of the additional properties will override the values from the configuration files. In addition, any user defined properties on the processor will also be passed to the HBase configuration.\",\n-                        \"version\": \"1.27.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\",\n+                        \"typeDescription\": \"A processor that allows the user to run a query (with aggregations) written with the Elasticsearch JSON DSL. It does not automatically paginate queries for the user. If an incoming relationship is added to this processor, it will use the flowfile's content for the query. Care should be taken on the size of the query because the entire response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"application/json\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.name\"\n+                            },\n+                            {\n+                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.number\"\n+                            },\n+                            {\n+                                \"description\": \"The number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\n+                            },\n+                            {\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n+                                \"name\": \"elasticsearch.query.error\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hbase_2-client-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body. For SCROLL type queries, these parameters are only used in the initial (first page) query as the Elasticsearch Scroll API does not support the same query parameters for subsequent pages of data.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"hb-lu-authorizations\": {\n-                                \"description\": \"The list of authorization tokens to be used with cell visibility if it is enabled. These will be used to override the default authorization list for the user accessing HBase.\",\n-                                \"displayName\": \"Authorizations\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-authorizations\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"hb-lu-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set used to decode bytes retrieved from HBase.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-charset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hb-lu-return-cols\": {\n-                                \"description\": \"A comma-separated list of \\\\\\\"<colFamily>:<colQualifier>\\\\\\\" pairs to return when scanning. To return all columns for a given family, leave off the qualifier such as \\\\\\\"<colFamily1>,<colFamily2>\\\\\\\".\",\n-                                \"displayName\": \"Columns\",\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-return-cols\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hb-lu-table-name\": {\n-                                \"description\": \"The name of the table where look ups will be run.\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-table-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hbase-client-service\": {\n-                                \"description\": \"Specifies the HBase Client Controller Service to use for accessing HBase.\",\n-                                \"displayName\": \"HBase Client Service\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hbase-client-service\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"hbase\",\n-                            \"lookup\",\n-                            \"record\",\n-                            \"service\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.hbase.HBase_2_RecordLookupService\",\n-                        \"typeDescription\": \"A lookup service that retrieves one or more columns from HBase and returns them as a record. The lookup coordinates must contain 'rowKey' which will be the HBase row id.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-lookup-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"CSV Format\": {\n+                            },\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-format-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n-                                        \"displayName\": \"Custom Format\",\n-                                        \"value\": \"custom\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n-                                        \"displayName\": \"RFC 4180\",\n-                                        \"value\": \"rfc-4180\"\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n-                                        \"displayName\": \"Microsoft Excel\",\n-                                        \"value\": \"excel\"\n+                                        \"description\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n-                                        \"displayName\": \"Tab-Delimited\",\n-                                        \"value\": \"tdf\"\n-                                    },\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Aggregation output.\",\n+                                \"displayName\": \"Aggregation Results Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-format-aggregations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-format-hits\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"CSV data follows the format used by MySQL\",\n-                                        \"displayName\": \"MySQL Format\",\n-                                        \"value\": \"mysql\"\n+                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n-                                        \"displayName\": \"Informix Unload\",\n-                                        \"value\": \"informix-unload\"\n+                                        \"description\": \"Document Source only (where present).\",\n+                                        \"displayName\": \"SOURCE_ONLY\",\n+                                        \"value\": \"SOURCE_ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n-                                        \"displayName\": \"Informix Unload Escape Disabled\",\n-                                        \"value\": \"informix-unload-csv\"\n-                                    },\n+                                        \"description\": \"Hit Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Hits output.\",\n+                                \"displayName\": \"Search Results Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-format-hits\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-output-no-hits\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Same as custom format. Available for compatibility reasons.\",\n-                                        \"displayName\": \"Default Format\",\n-                                        \"value\": \"default\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Same as RFC 4180. Available for compatibility reasons.\",\n-                                        \"displayName\": \"RFC4180\",\n-                                        \"value\": \"RFC4180\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n-                                \"displayName\": \"CSV Format\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n+                                \"displayName\": \"Output No Hits\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CSV Format\",\n+                                \"name\": \"el-rest-output-no-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to decode the CSV file.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"el-rest-pagination-keep-alive\": {\n+                                \"defaultValue\": \"10 mins\",\n+                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n+                                \"displayName\": \"Pagination Keep Alive\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-pagination-keep-alive\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Comment Marker\": {\n-                                \"dependencies\": [\n+                            \"el-rest-pagination-type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n+                                        \"displayName\": \"SCROLL\",\n+                                        \"value\": \"pagination-scroll\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n+                                        \"displayName\": \"SEARCH_AFTER\",\n+                                        \"value\": \"pagination-search_after\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results.\",\n+                                        \"displayName\": \"POINT_IN_TIME\",\n+                                        \"value\": \"pagination-pit\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n-                                \"displayName\": \"Comment Marker\",\n+                                \"defaultValue\": \"pagination-scroll\",\n+                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n+                                \"displayName\": \"Pagination Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Comment Marker\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-pagination-type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Escape Character\": {\n-                                \"defaultValue\": \"\\\\\",\n+                            \"el-rest-query\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"full\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n-                                \"displayName\": \"Escape Character\",\n+                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n-                                \"required\": true,\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Character\": {\n-                                \"defaultValue\": \"\\\"\",\n+                            \"el-rest-query-clause\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"build\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n-                                \"displayName\": \"Quote Character\",\n+                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query Clause\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n-                                \"required\": true,\n+                                \"name\": \"el-rest-query-clause\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Mode\": {\n+                            \"el-rest-query-definition-style\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"All values will be quoted using the configured quote character.\",\n-                                        \"displayName\": \"Quote All Values\",\n-                                        \"value\": \"ALL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n-                                        \"displayName\": \"Quote Minimal\",\n-                                        \"value\": \"MINIMAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will be quoted unless the value is a number.\",\n-                                        \"displayName\": \"Quote Non-Numeric Values\",\n-                                        \"value\": \"NON_NUMERIC\"\n+                                        \"description\": \"Provide the full Query.\",\n+                                        \"displayName\": \"FULL_QUERY\",\n+                                        \"value\": \"full\"\n                                     },\n                                     {\n-                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n-                                        \"displayName\": \"Do Not Quote Values\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Build the Query from separate JSON objects.\",\n+                                        \"displayName\": \"BUILD_QUERY\",\n+                                        \"value\": \"build\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"MINIMAL\",\n-                                \"dependencies\": [\n+                                \"defaultValue\": \"full\",\n+                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n+                                \"displayName\": \"Query Definition Style\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-query-definition-style\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-split-up-aggregations\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies how fields should be quoted when they are written\",\n-                                \"displayName\": \"Quote Mode\",\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n+                                \"displayName\": \"Aggregation Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Quote Mode\",\n+                                \"name\": \"el-rest-split-up-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Trim Fields\": {\n+                            \"el-rest-split-up-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n+                                        \"displayName\": \"PER_QUERY\",\n+                                        \"value\": \"splitUp-query\"\n                                     }\n                                 ],\n-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n+                                \"displayName\": \"Search Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim Fields\",\n+                                \"name\": \"el-rest-split-up-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Value Separator\": {\n-                                \"defaultValue\": \",\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-query-aggs\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"build\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n-                                \"displayName\": \"Value Separator\",\n+                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n+                                \"displayName\": \"Aggregations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\n-                                \"required\": true,\n+                                \"name\": \"es-rest-query-aggs\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"csv-file\": {\n-                                \"description\": \"Path to a CSV File in which the key value pairs can be looked up.\",\n-                                \"displayName\": \"CSV File\",\n+                            \"es-rest-query-fields\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n+                                \"displayName\": \"Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"csv-file\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-fields\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ignore-duplicates\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"es-rest-query-script-fields\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Ignore duplicate keys for records in the CSV file.\",\n-                                \"displayName\": \"Ignore Duplicates\",\n+                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n+                                \"displayName\": \"Script Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ignore-duplicates\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-script-fields\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-key-column\": {\n-                                \"description\": \"The field in the CSV file that will serve as the lookup key. This is the field that will be matched against the property specified in the lookup processor.\",\n-                                \"displayName\": \"Lookup Key Column\",\n+                            \"es-rest-query-sort\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n+                                \"displayName\": \"Sort\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"lookup-key-column\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-sort\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"csv\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"record\",\n-                            \"reloadable\",\n-                            \"value\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.CSVRecordLookupService\",\n-                        \"typeDescription\": \"A reloadable CSV file-based lookup service. When the lookup key is found in the CSV file, the columns are returned as a Record. All returned fields will be strings. The first line of the csv file is considered as header.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"character-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-1\",\n-                                        \"value\": \"ISO-8859-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-8\",\n-                                        \"value\": \"UTF-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16\",\n-                                        \"value\": \"UTF-16\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16LE\",\n-                                        \"value\": \"UTF-16LE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16BE\",\n-                                        \"value\": \"UTF-16BE\"\n-                                    },\n+                            \"es-rest-size\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US-ASCII\",\n-                                        \"value\": \"US-ASCII\"\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies a character encoding to use.\",\n-                                \"displayName\": \"Character Encoding\",\n+                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n+                                \"displayName\": \"Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"character-encoding\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"distributed-map-cache-service\": {\n-                                \"description\": \"The Controller Service that is used to get the cached values.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-map-cache-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.ConsumeElasticsearch\",\n+                            \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\",\n+                            \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"All original flowfiles that don't cause an error to occur go to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"enrich\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"map\",\n-                            \"value\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"json\",\n+                            \"page\",\n+                            \"query\",\n+                            \"read\",\n+                            \"scroll\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.DistributedMapCacheLookupService\",\n-                        \"typeDescription\": \"Allows to choose a distributed map cache client to retrieve the value associated to a key. The coordinates that are passed to the lookup must contain the key 'key'.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"explicitRestrictions\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\",\n+                        \"typeDescription\": \"A processor that allows the user to run a paginated query (with aggregations) written with the Elasticsearch JSON DSL. It will use the flowfile's content for the query unless the QUERY attribute is populated. Search After/Point in Time queries must include a valid \\\"sort\\\" field.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"application/json\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.name\"\n+                            },\n+                            {\n+                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.number\"\n+                            },\n                             {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"configuration-file\": {\n-                                \"description\": \"A configuration file\",\n-                                \"displayName\": \"Configuration File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"configuration-file\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n+                                \"description\": \"The number of the page (request), starting from 1, in which the results were returned that are in the output flowfile\",\n+                                \"name\": \"page.number\"\n+                            },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"The number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n+                                \"name\": \"elasticsearch.query.error\"\n                             }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"properties\",\n-                            \"reloadable\",\n-                            \"value\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.PropertiesFileLookupService\",\n-                        \"typeDescription\": \"A reloadable properties file-based lookup service\",\n-                        \"version\": \"1.27.0\"\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"All dynamic properties are added as HTTP headers with the name as the header name and the value as the header value.\",\n+                                \"description\": \"Prefix: BULK: - adds the specified property name/value as a Bulk request header in the Elasticsearch Bulk API body used for processing. If the value is null or blank, the Bulk header will be omitted for the document operation. These parameters will override any matching parameters in the _bulk request body.\",\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"*\",\n-                                \"value\": \"*\"\n+                                \"name\": \"The name of the Bulk request header\",\n+                                \"value\": \"The value of the Bulk request header\"\n+                            },\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the _bulk request body. If FlowFiles are batched, only the first FlowFile in the batch is used to evaluate property values.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-client-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"rest-lookup-basic-auth-password\": {\n-                                \"description\": \"The password to be used by the client to authenticate against the Remote URL.\",\n-                                \"displayName\": \"Basic Authentication Password\",\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"rest-lookup-basic-auth-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"rest-lookup-basic-auth-username\": {\n-                                \"description\": \"The username to be used by the client to authenticate against the Remote URL.  Cannot include control characters (0-31), ':', or DEL (127).\",\n-                                \"displayName\": \"Basic Authentication Username\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"rest-lookup-basic-auth-username\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-connection-timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for connection to remote service.\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"put-es-json-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-connection-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-json-charset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-digest-auth\": {\n+                            \"put-es-json-dynamic_templates\": {\n+                                \"description\": \"The dynamic_templates for the document. Must be parsable as a JSON Object. Requires Elasticsearch 7+\",\n+                                \"displayName\": \"Dynamic Templates\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-json-dynamic_templates\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-json-error-documents\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to communicate with the website using Digest Authentication. 'Basic Authentication Username' and 'Basic Authentication Password' are used for authentication.\",\n-                                \"displayName\": \"Use Digest Authentication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-digest-auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"rest-lookup-read-timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for response from remote service.\",\n-                                \"displayName\": \"Read Timeout\",\n+                                \"description\": \"If this configuration property is true, the response from Elasticsearch will be examined for failed documents and the FlowFile(s) associated with the failed document(s) will be sent to the \\\"errors\\\" relationship with \\\"elasticsearch.bulk.error\\\" attributes.\",\n+                                \"displayName\": \"Output Error Documents\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-read-timeout\",\n+                                \"name\": \"put-es-json-error-documents\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-record-path\": {\n-                                \"description\": \"An optional record path that can be used to define where in a record to get the real data to merge into the record set to be enriched. See documentation for examples of when this might be useful.\",\n-                                \"displayName\": \"Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"rest-lookup-record-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"rest-lookup-record-reader\": {\n-                                \"description\": \"The record reader to use for loading the payload and handling it as a record set.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"rest-lookup-ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"put-es-json-id-attr\": {\n+                                \"description\": \"The name of the FlowFile attribute containing the identifier for the document. If the Index Operation is \\\"index\\\", this property may be left empty or evaluate to an empty value, in which case the document's identifier will be auto-generated by Elasticsearch. For all other Index Operations, the attribute must evaluate to a non-empty value.\",\n+                                \"displayName\": \"Identifier Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-ssl-context-service\",\n+                                \"name\": \"put-es-json-id-attr\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"rest-lookup-url\": {\n-                                \"description\": \"The URL for the REST endpoint. Expression language is evaluated against the lookup key/value pairs, not flowfile attributes.\",\n-                                \"displayName\": \"URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rest-lookup-url\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"http\",\n-                            \"json\",\n-                            \"lookup\",\n-                            \"rest\",\n-                            \"xml\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.RestLookupService\",\n-                        \"typeDescription\": \"Use a REST service to look up values.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"CSV Format\": {\n+                            \"put-es-json-not_found-is-error\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n-                                        \"displayName\": \"Custom Format\",\n-                                        \"value\": \"custom\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n-                                        \"displayName\": \"RFC 4180\",\n-                                        \"value\": \"rfc-4180\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n-                                        \"displayName\": \"Microsoft Excel\",\n-                                        \"value\": \"excel\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n-                                        \"displayName\": \"Tab-Delimited\",\n-                                        \"value\": \"tdf\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the format used by MySQL\",\n-                                        \"displayName\": \"MySQL Format\",\n-                                        \"value\": \"mysql\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n-                                        \"displayName\": \"Informix Unload\",\n-                                        \"value\": \"informix-unload\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n-                                        \"displayName\": \"Informix Unload Escape Disabled\",\n-                                        \"value\": \"informix-unload-csv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Same as custom format. Available for compatibility reasons.\",\n-                                        \"displayName\": \"Default Format\",\n-                                        \"value\": \"default\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Same as RFC 4180. Available for compatibility reasons.\",\n-                                        \"displayName\": \"RFC4180\",\n-                                        \"value\": \"RFC4180\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n-                                \"displayName\": \"CSV Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CSV Format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to decode the CSV file.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Comment Marker\": {\n+                                \"defaultValue\": \"true\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Output Error Documents\",\n+                                        \"propertyName\": \"put-es-json-error-documents\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n-                                \"displayName\": \"Comment Marker\",\n+                                \"description\": \"If true, \\\"not_found\\\" Elasticsearch Document associated FlowFiles will be routed to the \\\"success\\\" relationship, otherwise to the \\\"errors\\\" relationship. If Output Error Responses is \\\"true\\\" then \\\"not_found\\\" responses from Elasticsearch will be sent to the error_responses relationship\",\n+                                \"displayName\": \"Treat \\\"Not Found\\\" as Success\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Comment Marker\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-es-json-not_found-is-error\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Escape Character\": {\n-                                \"defaultValue\": \"\\\\\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n-                                \"displayName\": \"Escape Character\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Quote Character\": {\n-                                \"defaultValue\": \"\\\"\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n-                                \"displayName\": \"Quote Character\",\n+                            \"put-es-json-script\": {\n+                                \"description\": \"The script for the document update/upsert. Only applies to Update/Upsert operations. Must be parsable as JSON Object. If left blank, the FlowFile content will be used for document update/upsert\",\n+                                \"displayName\": \"Script\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-json-script\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Mode\": {\n+                            \"put-es-json-scripted-upsert\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"All values will be quoted using the configured quote character.\",\n-                                        \"displayName\": \"Quote All Values\",\n-                                        \"value\": \"ALL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n-                                        \"displayName\": \"Quote Minimal\",\n-                                        \"value\": \"MINIMAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will be quoted unless the value is a number.\",\n-                                        \"displayName\": \"Quote Non-Numeric Values\",\n-                                        \"value\": \"NON_NUMERIC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n-                                        \"displayName\": \"Do Not Quote Values\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"MINIMAL\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies how fields should be quoted when they are written\",\n-                                \"displayName\": \"Quote Mode\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to add the scripted_upsert flag to the Upsert Operation. Forces Elasticsearch to execute the Script whether or not the document exists, defaults to false. If the Upsert Document provided (from FlowFile content) will be empty, but sure to set the Client Service controller service's Suppress Null/Empty Values to Never Suppress or no \\\"upsert\\\" doc will be, included in the request to Elasticsearch and the operation will not create a new document for the script to execute against, resulting in a \\\"not_found\\\" error\",\n+                                \"displayName\": \"Scripted Upsert\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Quote Mode\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-json-scripted-upsert\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Trim Fields\": {\n+                            \"put-es-output-error-responses\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If this is enabled, response messages from Elasticsearch marked as \\\"error\\\" will be output to the \\\"error_responses\\\" relationship.This does not impact the output of flowfiles to the \\\"success\\\" or \\\"errors\\\" relationships\",\n+                                \"displayName\": \"Output Error Responses\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim Fields\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-output-error-responses\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Value Separator\": {\n-                                \"defaultValue\": \",\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n-                                \"displayName\": \"Value Separator\",\n+                            \"put-es-record-batch-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The preferred number of FlowFiles to send over in a single batch.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"put-es-record-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"csv-file\": {\n-                                \"description\": \"Path to a CSV File in which the key value pairs can be looked up.\",\n-                                \"displayName\": \"CSV File\",\n+                            \"put-es-record-index-op\": {\n+                                \"defaultValue\": \"index\",\n+                                \"description\": \"The type of the operation used to index (create, delete, index, update, upsert)\",\n+                                \"displayName\": \"Index Operation\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"csv-file\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-index-op\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"ignore-duplicates\": {\n+                            \"put-es-record-log-error-responses\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Ignore duplicate keys for records in the CSV file.\",\n-                                \"displayName\": \"Ignore Duplicates\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If this is enabled, errors will be logged to the NiFi logs at the error log level. Otherwise, they will only be logged if debug logging is enabled on NiFi as a whole. The purpose of this option is to give the user the ability to debug failed operations without having to turn on debug logging.\",\n+                                \"displayName\": \"Log Error Responses\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ignore-duplicates\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"lookup-key-column\": {\n-                                \"description\": \"The field in the CSV file that will serve as the lookup key. This is the field that will be matched against the property specified in the lookup processor.\",\n-                                \"displayName\": \"Lookup Key Column\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"lookup-key-column\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"lookup-value-column\": {\n-                                \"description\": \"Lookup value column.\",\n-                                \"displayName\": \"Lookup Value Column\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"lookup-value-column\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-log-error-responses\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"All flowfiles that succeed in being transferred into Elasticsearch go here. Documents received by the Elasticsearch _bulk API may still result in errors on the Elasticsearch side. The Elasticsearch response will need to be examined to determine whether any Document(s)/Record(s) resulted in errors.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"If a \\\"Output Error Documents\\\" is set, any FlowFile(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n+                                \"name\": \"errors\"\n                             }\n                         ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"csv\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"reloadable\",\n-                            \"value\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.SimpleCsvFileLookupService\",\n-                        \"typeDescription\": \"A reloadable CSV file-based lookup service. The first line of the csv file is considered as header.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n                             {\n-                                \"description\": \"Allows users to add key/value pairs as User-defined Properties. Each property that is added can be looked up by Property Name. The coordinates that are passed to the lookup must contain the key 'key'.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A key that can be looked up\",\n-                                \"value\": \"The value for the key\"\n+                                \"description\": \"The Batch of FlowFiles will be stored in memory until the bulk operation is performed.\",\n+                                \"resource\": \"MEMORY\"\n                             }\n                         ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n+                        \"tags\": [\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"index\",\n+                            \"json\",\n+                            \"put\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\",\n+                        \"typeDescription\": \"An Elasticsearch put processor that uses the official Elastic REST client libraries. Each FlowFile is treated as a document to be sent to the Elasticsearch _bulk API. Multiple FlowFiles can be batched together into each Request sent to Elasticsearch.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"The error message if there is an issue parsing the FlowFile, sending the parsed document to Elasticsearch or parsing the Elasticsearch response\",\n+                                \"name\": \"elasticsearch.put.error\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"The _bulk response if there was an error during processing the document within Elasticsearch.\",\n+                                \"name\": \"elasticsearch.bulk.error\"\n                             }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"enrich\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"value\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.SimpleKeyValueLookupService\",\n-                        \"typeDescription\": \"Allows users to add key/value pairs as User-defined Properties. Each property that is added can be looked up by Property Name. The coordinates that are passed to the lookup must contain the key 'key'.\",\n-                        \"version\": \"1.27.0\"\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"configuration-file\": {\n-                                \"description\": \"A configuration file\",\n-                                \"displayName\": \"Configuration File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"configuration-file\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Prefix: BULK: - adds the specified property name/value as a Bulk request header in the Elasticsearch Bulk API body used for processing. If the Record Path expression results in a null or blank value, the Bulk header will be omitted for the document operation. These parameters will override any matching parameters in the _bulk request body.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of the Bulk request header\",\n+                                \"value\": \"A Record Path expression to retrieve the Bulk request header value\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the _bulk request body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n                             }\n                         ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"reloadable\",\n-                            \"value\",\n-                            \"xml\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.XMLFileLookupService\",\n-                        \"typeDescription\": \"A reloadable XML file-based lookup service. This service uses Apache Commons Configuration. Example XML configuration file and how to access specific configuration can be found at http://commons.apache.org/proper/commons-configuration/userguide/howto_hierarchical.html. External entity processing is disabled.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Cache Expiration\": {\n-                                \"description\": \"Time interval to clear all cache entries. If the Cache Size is zero then this property is ignored.\",\n-                                \"displayName\": \"Cache Expiration\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Cache Expiration\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbrecord-lookup-cache-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies how many lookup values/records should be cached. The cache is shared for all tables and keeps a map of lookup values to records. Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbrecord-lookup-cache-size\",\n-                                \"required\": true,\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-clear-cache-on-enabled\": {\n+                            \"put-es-output-error-responses\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to clear the cache when this service is enabled. If the Cache Size is zero then this property is ignored. Clearing the cache when the service is enabled ensures that the service will first go to the database to get the most recent data.\",\n-                                \"displayName\": \"Clear Cache on Enabled\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If this is enabled, response messages from Elasticsearch marked as \\\"error\\\" will be output to the \\\"error_responses\\\" relationship.This does not impact the output of flowfiles to the \\\"success\\\" or \\\"errors\\\" relationships\",\n+                                \"displayName\": \"Output Error Responses\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-output-error-responses\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-dbcp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"put-es-record-at-timestamp\": {\n+                                \"description\": \"The value to use as the @timestamp field (required for Elasticsearch Data Streams)\",\n+                                \"displayName\": \"@timestamp Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbrecord-lookup-dbcp-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-at-timestamp\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-key-column\": {\n-                                \"description\": \"The column in the table that will serve as the lookup key. This is the column that will be matched against the property specified in the lookup processor. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Lookup Key Column\",\n+                            \"put-es-record-at-timestamp-date-format\": {\n+                                \"description\": \"Specifies the format to use when writing Date fields. If not specified, the default format 'yyyy-MM-dd' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/25/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbrecord-lookup-key-column\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-at-timestamp-date-format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-table-name\": {\n-                                \"description\": \"The name of the database table to be queried. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"put-es-record-at-timestamp-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the @timestamp for the document. If left blank the @timestamp will be determined using the main @timestamp property\",\n+                                \"displayName\": \"@timestamp Record Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbrecord-lookup-table-name\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-at-timestamp-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-value-columns\": {\n-                                \"description\": \"A comma-delimited list of columns in the table that will be returned when the lookup key matches. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Lookup Value Columns\",\n+                            \"put-es-record-at-timestamp-time-format\": {\n+                                \"description\": \"Specifies the format to use when writing Time fields. If not specified, the default format 'HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbrecord-lookup-value-columns\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"put-es-record-at-timestamp-time-format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"database\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"rdbms\",\n-                            \"record\",\n-                            \"reloadable\",\n-                            \"value\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.db.DatabaseRecordLookupService\",\n-                        \"typeDescription\": \"A relational-database-based lookup service. When the lookup key is found in the database, the specified columns (or all if Lookup Value Columns are not specified) are returned as a Record. Only one row will be returned for each lookup, duplicate database entries are ignored.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Cache Expiration\": {\n-                                \"description\": \"Time interval to clear all cache entries. If the Cache Size is zero then this property is ignored.\",\n-                                \"displayName\": \"Cache Expiration\",\n+                            \"put-es-record-at-timestamp-timestamp-format\": {\n+                                \"description\": \"Specifies the format to use when writing Timestamp fields. If not specified, the default format 'yyyy-MM-dd HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/25/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Cache Expiration\",\n+                                \"name\": \"put-es-record-at-timestamp-timestamp-format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-cache-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies how many lookup values/records should be cached. The cache is shared for all tables and keeps a map of lookup values to records. Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n-                                \"displayName\": \"Cache Size\",\n+                            \"put-es-record-batch-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The number of records to send over in a single batch.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbrecord-lookup-cache-size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-clear-cache-on-enabled\": {\n+                            \"put-es-record-bulk-error-groups\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to clear the cache when this service is enabled. If the Cache Size is zero then this property is ignored. Clearing the cache when the service is enabled ensures that the service will first go to the database to get the most recent data.\",\n-                                \"displayName\": \"Clear Cache on Enabled\",\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Result Record Writer\",\n+                                        \"propertyName\": \"put-es-record-error-writer\"\n+                                    }\n+                                ],\n+                                \"description\": \"If this configuration property is set, the response from Elasticsearch will be examined for _bulk errors. The failed records written to the \\\"errors\\\" relationship will be grouped by error type and the error related to the first record within the FlowFile added to the FlowFile as \\\"elasticsearch.bulk.error\\\". If \\\"Treat \\\"Not Found\\\" as Success\\\" is \\\"false\\\" then records associated with \\\"not_found\\\" Elasticsearch document responses will also be send to the \\\"errors\\\" relationship.\",\n+                                \"displayName\": \"Group Results by Bulk Error Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-bulk-error-groups\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-dbcp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"put-es-record-dynamic-templates-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the dynamic_templates for the document. Field must be Map-type compatible (e.g. a Map or Record) or a String parsable into a JSON Object. Requires Elasticsearch 7+\",\n+                                \"displayName\": \"Dynamic Templates Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-dynamic-templates-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-record-error-writer\": {\n+                                \"description\": \"If this configuration property is set, the response from Elasticsearch will be examined for failed records and the failed records will be written to a record set with this record writer service and sent to the \\\"errors\\\" relationship. Successful records will be written to a record set with this record writer service and sent to the \\\"successful_records\\\" relationship.\",\n+                                \"displayName\": \"Result Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbrecord-lookup-dbcp-service\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-error-writer\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"dbrecord-lookup-key-column\": {\n-                                \"description\": \"The column in the table that will serve as the lookup key. This is the column that will be matched against the property specified in the lookup processor. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Lookup Key Column\",\n+                            \"put-es-record-id-path\": {\n+                                \"description\": \"A record path expression to retrieve the ID field for use with Elasticsearch. If left blank the ID will be automatically generated by Elasticsearch.\",\n+                                \"displayName\": \"ID Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbrecord-lookup-key-column\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-id-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-table-name\": {\n-                                \"description\": \"The name of the database table to be queried. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"put-es-record-index-op\": {\n+                                \"defaultValue\": \"index\",\n+                                \"description\": \"The type of the operation used to index (create, delete, index, update, upsert)\",\n+                                \"displayName\": \"Index Operation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbrecord-lookup-table-name\",\n+                                \"name\": \"put-es-record-index-op\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-value-column\": {\n-                                \"description\": \"The column whose value will be returned when the Lookup value is matched\",\n-                                \"displayName\": \"Lookup Value Column\",\n+                            \"put-es-record-index-op-path\": {\n+                                \"description\": \"A record path expression to retrieve the Index Operation field for use with Elasticsearch. If left blank the Index Operation will be determined using the main Index Operation property.\",\n+                                \"displayName\": \"Index Operation Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"lookup-value-column\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-index-op-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.27.0\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"database\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"rdbms\",\n-                            \"reloadable\",\n-                            \"value\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.db.SimpleDatabaseLookupService\",\n-                        \"typeDescription\": \"A relational-database-based lookup service. When the lookup key is found in the database, the specified lookup value column is returned. Only one value will be returned for each lookup, duplicate database entries are ignored.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"database-file\": {\n-                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n-                                \"displayName\": \"MaxMind Database File\",\n+                            \"put-es-record-index-record-path\": {\n+                                \"description\": \"A record path expression to retrieve the index field for use with Elasticsearch. If left blank the index will be determined using the main index property.\",\n+                                \"displayName\": \"Index Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"database-file\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-index-record-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-anonymous-ip\": {\n+                            \"put-es-record-log-error-responses\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not information about whether or not the IP address belongs to an anonymous network should be returned.\",\n-                                \"displayName\": \"Lookup Anonymous IP Information\",\n+                                \"description\": \"If this is enabled, errors will be logged to the NiFi logs at the error log level. Otherwise, they will only be logged if debug logging is enabled on NiFi as a whole. The purpose of this option is to give the user the ability to debug failed operations without having to turn on debug logging.\",\n+                                \"displayName\": \"Log Error Responses\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-anonymous-ip\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-log-error-responses\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-city\": {\n+                            \"put-es-record-not_found-is-error\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not information about the geographic information, such as cities, corresponding to the IP address should be returned\",\n-                                \"displayName\": \"Lookup Geo Enrichment\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Result Record Writer\",\n+                                        \"propertyName\": \"put-es-record-error-writer\"\n+                                    }\n+                                ],\n+                                \"description\": \"If true, \\\"not_found\\\" Elasticsearch Document associated Records will be routed to the \\\"successful_records\\\" relationship, otherwise to the \\\"errors\\\" relationship. If Output Error Responses is \\\"true\\\" then \\\"not_found\\\" responses from Elasticsearch will be sent to the error_responses relationship.\",\n+                                \"displayName\": \"Treat \\\"Not Found\\\" as Success\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-city\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-not_found-is-error\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-connection-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not information about the Connection Type corresponding to the IP address should be returned. If true, the lookup will contain a 'connectionType' field that (if populated) will contain a value of 'Dialup', 'Cable/DSL', 'Corporate', or 'Cellular'\",\n-                                \"displayName\": \"Lookup Connection Type\",\n+                            \"put-es-record-reader\": {\n+                                \"description\": \"The record reader to use for reading incoming records from flowfiles.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-connection-type\",\n+                                \"name\": \"put-es-record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"lookup-domain\": {\n+                            \"put-es-record-retain-at-timestamp-field\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not information about the Domain Name corresponding to the IP address should be returned. If true, the lookup will contain second-level domain information, such as foo.com but will not contain bar.foo.com\",\n-                                \"displayName\": \"Lookup Domain Name\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"@timestamp Record Path\",\n+                                        \"propertyName\": \"put-es-record-at-timestamp-path\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether to retain the existing field used as the @timestamp Record Path.\",\n+                                \"displayName\": \"Retain @timestamp (Record Path)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-domain\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-retain-at-timestamp-field\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-isp\": {\n+                            \"put-es-record-retain-id-field\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not information about the Information Service Provider corresponding to the IP address should be returned\",\n-                                \"displayName\": \"Lookup ISP\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-isp\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"anonymous\",\n-                            \"cellular\",\n-                            \"domain\",\n-                            \"enrich\",\n-                            \"geo\",\n-                            \"ip\",\n-                            \"ipgeo\",\n-                            \"isp\",\n-                            \"lookup\",\n-                            \"maxmind\",\n-                            \"tor\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.maxmind.IPLookupService\",\n-                        \"typeDescription\": \"A lookup service that provides several types of enrichment information for IP addresses. The service is configured by providing a MaxMind Database file and specifying which types of enrichment should be provided for an IP Address or Hostname. Each type of enrichment is a separate lookup, so configuring the service to provide all of the available enrichment data may be slower than returning only a portion of the available enrichments. In order to use this service, a lookup must be performed using key of 'ip' and a value that is a valid IP address or hostname. View the Usage of this component and choose to view Additional Details for more information, such as the Schema that pertains to the information that is returned.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-evtx-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-evtx-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"granularity\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"Record\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Chunk\",\n-                                        \"value\": \"Chunk\"\n-                                    },\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"File\",\n-                                        \"value\": \"File\"\n+                                        \"propertyDisplayName\": \"ID Record Path\",\n+                                        \"propertyName\": \"put-es-record-id-path\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Chunk\",\n-                                \"description\": \"Output flow file for each Record, Chunk, or File encountered in the event log\",\n-                                \"displayName\": \"Granularity\",\n+                                \"description\": \"Whether to retain the existing field used as the ID Record Path.\",\n+                                \"displayName\": \"Retain ID (Record Path)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"granularity\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-retain-id-field\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-record-script-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the script for the document update/upsert. Only applies to Update/Upsert operations. Field must be Map-type compatible (e.g. a Map or a Record) or a String parsable into a JSON Object\",\n+                                \"displayName\": \"Script Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-script-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-record-scripted-upsert-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the scripted_upsert boolean flag. Whether to add the scripted_upsert flag to the Upsert Operation. Forces Elasticsearch to execute the Script whether or not the document exists, defaults to false. If the Upsert Document provided (from FlowFile content) will be empty, but sure to set the Client Service controller service's Suppress Null/Empty Values to Never Suppress or no \\\"upsert\\\" doc will be, included in the request to Elasticsearch and the operation will not create a new document for the script to execute against, resulting in a \\\"not_found\\\" error\",\n+                                \"displayName\": \"Scripted Upsert Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-scripted-upsert-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-record-type-record-path\": {\n+                                \"description\": \"A record path expression to retrieve the type field for use with Elasticsearch. If left blank the type will be determined using the main type property.\",\n+                                \"displayName\": \"Type Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-type-record-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The filename of the evtx file\",\n-                                \"name\": \"filename\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that was successfully converted from evtx to XML\",\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that succeed in being transferred into Elasticsearch go here. Documents received by the Elasticsearch _bulk API may still result in errors on the Elasticsearch side. The Elasticsearch response will need to be examined to determine whether any Document(s)/Record(s) resulted in errors.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that encountered an exception during conversion will be transferred to this relationship with as much parsing as possible done\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"If a \\\"Result Record Writer\\\" is set, any Record(s) corresponding to Elasticsearch document(s) that did not result in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n+                                \"name\": \"successful_records\"\n                             },\n                             {\n-                                \"description\": \"The unmodified input FlowFile will be transferred to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Any bad chunks of records will be transferred to this relationship in their original binary form\",\n-                                \"name\": \"bad chunk\"\n+                                \"description\": \"If a \\\"Result Record Writer\\\" is set, any Record(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n+                                \"name\": \"errors\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The Batch of Records will be stored in memory until the bulk operation is performed.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"event\",\n-                            \"evtx\",\n-                            \"file\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"windows\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"index\",\n+                            \"json\",\n+                            \"put\",\n+                            \"record\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.evtx.ParseEvtx\",\n-                        \"typeDescription\": \"Parses the contents of a Windows Event Log file (evtx) and writes the resulting XML to the FlowFile\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\",\n+                        \"typeDescription\": \"A record-aware Elasticsearch put processor that uses the official Elastic REST client libraries. Each Record within the FlowFile is converted into a document to be sent to the Elasticsearch _bulk APi. Multiple documents can be batched into each Request sent to Elasticsearch. Each document's Bulk operation can be configured using Record Path expressions.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The output filename\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The error message if there is an issue parsing the FlowFile records, sending the parsed documents to Elasticsearch or parsing the Elasticsearch response.\",\n+                                \"name\": \"elasticsearch.put.error\"\n                             },\n                             {\n-                                \"description\": \"The output filetype (application/xml for success and failure relationships, original value for bad chunk and original relationships)\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The number of records that generated errors in the Elasticsearch _bulk API.\",\n+                                \"name\": \"elasticsearch.put.error.count\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records that were successfully processed by the Elasticsearch _bulk API.\",\n+                                \"name\": \"elasticsearch.put.success.count\"\n+                            },\n+                            {\n+                                \"description\": \"The _bulk response if there was an error during processing the record within Elasticsearch.\",\n+                                \"name\": \"elasticsearch.bulk.error\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-single-user-iaa-providers-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cassandra-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cassandra-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"DataStax 3 driver for Cassandra is no longer the current version and requires new components.\",\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body. For SCROLL type queries, these parameters are only used in the initial (first page) query as the Elasticsearch Scroll API does not support the same query parameters for subsequent pages of data.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"cassandra-dmc-key-field-name\": {\n-                                \"description\": \"The name of the field that acts as the unique key. (The CQL type should be \\\"blob\\\")\",\n-                                \"displayName\": \"Key Field Name\",\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cassandra-dmc-key-field-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cassandra-dmc-session-provider\": {\n-                                \"description\": \"The client service that will configure the cassandra client connection.\",\n-                                \"displayName\": \"Session Provider\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cassandra-dmc-session-provider\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"cassandra-dmc-table-name\": {\n-                                \"description\": \"The name of the table where the cache will be stored.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cassandra-dmc-table-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cassandra-dmc-ttl\": {\n-                                \"description\": \"If configured, this will set a TTL (Time to Live) for each row inserted into the table so that old cache items expire after a certain period of time.\",\n-                                \"displayName\": \"TTL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cassandra-dmc-ttl\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cassandra-dmc-value-field-name\": {\n-                                \"description\": \"The name of the field that will store the value. (The CQL type should be \\\"blob\\\")\",\n-                                \"displayName\": \"Value Field Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cassandra-dmc-value-field-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"cassandra\",\n-                            \"distributed\",\n-                            \"map\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.controller.cassandra.CassandraDistributedMapCache\",\n-                        \"typeDescription\": \"Provides a DistributedMapCache client that is based on Apache Cassandra.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cassandra-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"DataStax 3 driver for Cassandra is no longer the current version and requires new components.\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Cassandra Contact Points\": {\n-                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n-                                \"displayName\": \"Cassandra Contact Points\",\n+                            \"el-rest-format-aggregations\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Aggregation output.\",\n+                                \"displayName\": \"Aggregation Results Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Cassandra Contact Points\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-format-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client Auth\": {\n+                            \"el-rest-format-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Document Source only (where present).\",\n+                                        \"displayName\": \"SOURCE_ONLY\",\n+                                        \"value\": \"SOURCE_ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Hit Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Hits output.\",\n+                                \"displayName\": \"Search Results Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-format-hits\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Compression Type\": {\n+                            \"el-rest-output-no-hits\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Enable compression at transport-level requests and responses\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n+                                \"displayName\": \"Output No Hits\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Type\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-output-no-hits\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Consistency Level\": {\n+                            \"el-rest-pagination-keep-alive\": {\n+                                \"defaultValue\": \"10 mins\",\n+                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n+                                \"displayName\": \"Pagination Keep Alive\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-pagination-keep-alive\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-pagination-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ANY\",\n-                                        \"value\": \"ANY\"\n+                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n+                                        \"displayName\": \"SCROLL\",\n+                                        \"value\": \"pagination-scroll\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ONE\",\n-                                        \"value\": \"ONE\"\n+                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n+                                        \"displayName\": \"SEARCH_AFTER\",\n+                                        \"value\": \"pagination-search_after\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TWO\",\n-                                        \"value\": \"TWO\"\n-                                    },\n+                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results.\",\n+                                        \"displayName\": \"POINT_IN_TIME\",\n+                                        \"value\": \"pagination-pit\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"pagination-scroll\",\n+                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n+                                \"displayName\": \"Pagination Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-pagination-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-query\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"THREE\",\n-                                        \"value\": \"THREE\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"full\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-query-clause\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"QUORUM\",\n-                                        \"value\": \"QUORUM\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query Clause\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query-clause\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-query-definition-style\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ALL\",\n-                                        \"value\": \"ALL\"\n+                                        \"description\": \"Provide the full Query.\",\n+                                        \"displayName\": \"FULL_QUERY\",\n+                                        \"value\": \"full\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_QUORUM\",\n-                                        \"value\": \"LOCAL_QUORUM\"\n-                                    },\n+                                        \"description\": \"Build the Query from separate JSON objects.\",\n+                                        \"displayName\": \"BUILD_QUERY\",\n+                                        \"value\": \"build\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"full\",\n+                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n+                                \"displayName\": \"Query Definition Style\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-query-definition-style\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-split-up-aggregations\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EACH_QUORUM\",\n-                                        \"value\": \"EACH_QUORUM\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SERIAL\",\n-                                        \"value\": \"SERIAL\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n+                                \"displayName\": \"Aggregation Results Split\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-split-up-aggregations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-split-up-hits\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_SERIAL\",\n-                                        \"value\": \"LOCAL_SERIAL\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_ONE\",\n-                                        \"value\": \"LOCAL_ONE\"\n+                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n+                                        \"displayName\": \"PER_QUERY\",\n+                                        \"value\": \"splitUp-query\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ONE\",\n-                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n-                                \"displayName\": \"Consistency Level\",\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n+                                \"displayName\": \"Search Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Consistency Level\",\n+                                \"name\": \"el-rest-split-up-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Keyspace\": {\n-                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor supports the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n-                                \"displayName\": \"Keyspace\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Keyspace\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Cassandra cluster\",\n-                                \"displayName\": \"Password\",\n+                            \"es-rest-query-aggs\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n+                                \"displayName\": \"Aggregations\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-aggs\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"es-rest-query-fields\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n+                                \"displayName\": \"Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-fields\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Cassandra cluster\",\n-                                \"displayName\": \"Username\",\n+                            \"es-rest-query-script-fields\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n+                                \"displayName\": \"Script Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-script-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"connect-timeout-ms\": {\n-                                \"description\": \"Connection timeout (in milliseconds). 0 means no timeout. If no value is set, the underlying default will be used.\",\n-                                \"displayName\": \"Connect Timout (ms)\",\n+                            \"es-rest-query-sort\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n+                                \"displayName\": \"Sort\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connect-timeout-ms\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-sort\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"read-timeout-ms\": {\n-                                \"description\": \"Read timeout (in milliseconds). 0 means no timeout. If no value is set, the underlying default will be used.\",\n-                                \"displayName\": \"Read Timout (ms)\",\n+                            \"es-rest-size\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n+                                \"displayName\": \"Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"read-timeout-ms\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"es-rest-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.ConsumeElasticsearch\",\n+                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The pagination state (scrollId, searchAfter, pitId, hitCount, pageCount, pageExpirationTimestamp) is retained in between invocations of this processor until the Scroll/PiT has expired (when the current time is later than the last query execution plus the Pagination Keep Alive interval).\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-cassandra-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n+                            },\n+                            {\n+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"cassandra\",\n-                            \"connection\",\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"pooling\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"json\",\n+                            \"page\",\n+                            \"query\",\n+                            \"scroll\",\n+                            \"search\"\n                         ],\n-                        \"type\": \"org.apache.nifi.service.CassandraSessionProvider\",\n-                        \"typeDescription\": \"Provides connection session for Cassandra processors to work with Apache Cassandra.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-dbcp-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\",\n+                        \"typeDescription\": \"A processor that allows the user to repeatedly run a paginated query (with aggregations) written with the Elasticsearch JSON DSL. Search After/Point in Time queries must include a valid \\\"sort\\\" field. The processor will retrieve multiple pages of results until either no more results are available or the Pagination Keep Alive expiration is reached, after which the query will restart with the first page of results being retrieved.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"application/json\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.name\"\n+                            },\n+                            {\n+                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.number\"\n+                            },\n+                            {\n+                                \"description\": \"The number of the page (request), starting from 1, in which the results were returned that are in the output flowfile\",\n+                                \"name\": \"page.number\"\n+                            },\n+                            {\n+                                \"description\": \"The number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\n+                            },\n+                            {\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n+                                \"name\": \"elasticsearch.query.error\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"JDBC driver property name and value applied to JDBC connections.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"JDBC property name\",\n-                                \"value\": \"JDBC property value\"\n-                            },\n-                            {\n-                                \"description\": \"JDBC driver property name prefixed with 'SENSITIVE.' handled as a sensitive property.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"SENSITIVE.JDBC property name\",\n-                                \"value\": \"JDBC property value\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Database Connection URL\": {\n-                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n-                                \"displayName\": \"Database Connection URL\",\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database Connection URL\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Database Driver Class Name\": {\n-                                \"description\": \"Database driver class name\",\n-                                \"displayName\": \"Database Driver Class Name\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database Driver Class Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Database User\": {\n-                                \"description\": \"Database user name\",\n-                                \"displayName\": \"Database User\",\n+                            \"el-rest-query\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"full\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database User\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Total Connections\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of active connections that can be allocated from this pool at the same time,  or negative for no limit.\",\n-                                \"displayName\": \"Max Total Connections\",\n+                            \"el-rest-query-clause\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query Clause\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Max Total Connections\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query-clause\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"500 millis\",\n-                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or -1 to wait indefinitely. \",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"el-rest-query-definition-style\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Provide the full Query.\",\n+                                        \"displayName\": \"FULL_QUERY\",\n+                                        \"value\": \"full\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Build the Query from separate JSON objects.\",\n+                                        \"displayName\": \"BUILD_QUERY\",\n+                                        \"value\": \"build\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"full\",\n+                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n+                                \"displayName\": \"Query Definition Style\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Max Wait Time\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-query-definition-style\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password for the database user\",\n-                                \"displayName\": \"Password\",\n+                            \"el-rest-script\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A \\\"script\\\" to execute during the operation, in JSON syntax. Ex: {\\\"source\\\": \\\"ctx._source.count++\\\", \\\"lang\\\": \\\"painless\\\"}\",\n+                                \"displayName\": \"Script\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-script\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Validation-query\": {\n-                                \"description\": \"Validation query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. Note!! Using validation might have some performance penalty.\",\n-                                \"displayName\": \"Validation query\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Validation-query\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n                             },\n-                            \"database-driver-locations\": {\n-                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n-                                \"displayName\": \"Database Driver Location(s)\",\n+                            {\n+                                \"description\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"elastic\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"query\",\n+                            \"update\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.UpdateByQueryElasticsearch\",\n+                        \"typeDescription\": \"Update documents in an Elasticsearch index using a query. The query can be loaded from a flowfile body or from the Query parameter. The loaded Query can contain any JSON accepted by Elasticsearch's _update_by_query API, for example a \\\"query\\\" object to identify what documents are to be updated, plus a \\\"script\\\" to define the updates to perform.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The amount of time that it took to complete the update operation in ms.\",\n+                                \"name\": \"elasticsearch.update.took\"\n+                            },\n+                            {\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error running the update.\",\n+                                \"name\": \"elasticsearch.update.error\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-enrich-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-enrich-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Geo Database File\": {\n+                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n+                                \"displayName\": \"MaxMind Database File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"database-driver-locations\",\n-                                \"required\": false,\n+                                \"name\": \"Geo Database File\",\n+                                \"required\": true,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n                                         \"DIRECTORY\",\n-                                        \"URL\"\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"dbcp-max-conn-lifetime\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The maximum lifetime of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n-                                \"displayName\": \"Max Connection Lifetime\",\n+                            \"IP Address Attribute\": {\n+                                \"description\": \"The name of an attribute whose value is a dotted decimal IP address for which enrichment should occur\",\n+                                \"displayName\": \"IP Address Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-max-conn-lifetime\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"IP Address Attribute\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbcp-max-idle-conns\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of connections that can remain idle in the pool without extra ones being released. Set to any negative value to allow unlimited idle connections.\",\n-                                \"displayName\": \"Max Idle Connections\",\n+                            \"Log Level\": {\n+                                \"defaultValue\": \"WARN\",\n+                                \"description\": \"The Log Level to use when an IP is not found in the database. Accepted values: INFO, DEBUG, WARN, ERROR.\",\n+                                \"displayName\": \"Log Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-max-idle-conns\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Log Level\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Where to route flow files after unsuccessfully enriching attributes because no data was found\",\n+                                \"name\": \"not found\"\n                             },\n-                            \"dbcp-min-evictable-idle-time\": {\n-                                \"defaultValue\": \"30 mins\",\n-                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction.\",\n-                                \"displayName\": \"Minimum Evictable Idle Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-min-evictable-idle-time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Where to route flow files after successfully enriching attributes with data provided by database\",\n+                                \"name\": \"found\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"enrich\",\n+                            \"geo\",\n+                            \"ip\",\n+                            \"maxmind\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.GeoEnrichIP\",\n+                        \"typeDescription\": \"Looks up geolocation information for an IP address and adds the geo information to FlowFile attributes. The geo data is provided as a MaxMind database. The attribute that contains the IP address to lookup is provided by the 'IP Address Attribute' property. If the name of the attribute provided is 'X', then the the attributes added by enrichment will take the form X.geo.<fieldName>\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of microseconds that the geo lookup took\",\n+                                \"name\": \"X.geo.lookup.micros\"\n                             },\n-                            \"dbcp-min-idle-conns\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The minimum number of connections that can remain idle in the pool without extra ones being created. Set to or zero to allow no idle connections.\",\n-                                \"displayName\": \"Minimum Idle Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-min-idle-conns\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The city identified for the IP address\",\n+                                \"name\": \"X.geo.city\"\n                             },\n-                            \"dbcp-soft-min-evictable-idle-time\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle connection evictor, with the extra condition that at least a minimum number of idle connections remain in the pool. When the not-soft version of this option is set to a positive value, it is examined first by the idle connection evictor: when idle connections are visited by the evictor, idle time is first compared against it (without considering the number of idle connections in the pool) and then against this soft option, including the minimum idle connections constraint.\",\n-                                \"displayName\": \"Soft Minimum Evictable Idle Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-soft-min-evictable-idle-time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The accuracy radius if provided by the database (in Kilometers)\",\n+                                \"name\": \"X.geo.accuracy\"\n                             },\n-                            \"dbcp-time-between-eviction-runs\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The time period to sleep between runs of the idle connection evictor thread. When non-positive, no idle connection evictor thread will be run.\",\n-                                \"displayName\": \"Time Between Eviction Runs\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-time-between-eviction-runs\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The latitude identified for this IP address\",\n+                                \"name\": \"X.geo.latitude\"\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                            {\n+                                \"description\": \"The longitude identified for this IP address\",\n+                                \"name\": \"X.geo.longitude\"\n                             },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                            {\n+                                \"description\": \"Each subdivision that is identified for this IP address is added with a one-up number appended to the attribute name, starting with 0\",\n+                                \"name\": \"X.geo.subdivision.N\"\n                             },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kerberos-principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The ISO code for the subdivision that is identified by X.geo.subdivision.N\",\n+                                \"name\": \"X.geo.subdivision.isocode.N\"\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"jdbc\",\n-                            \"pooling\",\n-                            \"store\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPool\",\n-                        \"typeDescription\": \"Provides Database Connection Pooling Service. Connections can be asked from pool and returned after usage.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n+                                \"description\": \"The country identified for this IP address\",\n+                                \"name\": \"X.geo.country\"\n+                            },\n                             {\n-                                \"description\": \"If 'database.name' attribute contains the name of the dynamic property, then the DBCPService (registered in the value) will be selected.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register DBCPService\",\n-                                \"value\": \"The DBCPService\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n+                                \"description\": \"The ISO Code for the country identified\",\n+                                \"name\": \"X.geo.country.isocode\"\n+                            },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"The postal code for the country identified\",\n+                                \"name\": \"X.geo.postalcode\"\n                             }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"jdbc\",\n-                            \"pooling\",\n-                            \"store\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPoolLookup\",\n-                        \"typeDescription\": \"Provides a DBCPService that can be used to dynamically select another DBCPService. This service requires an attribute named 'database.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'database.name' will be used to select the DBCPService that has been registered with that name. This will allow multiple DBCPServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'database.name' attribute.\",\n-                        \"version\": \"1.27.0\"\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n+                        \"artifact\": \"nifi-enrich-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Specifies a property name and value to be set on the JDBC connection(s). If Expression Language is used, evaluation will be performed upon the controller service being enabled. Note that no flow file input (attributes, e.g.) is available for use in Expression Language constructs for these properties.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"JDBC property name\",\n-                                \"value\": \"JDBC property value\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"hikaricp-connection-url\": {\n-                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n-                                \"displayName\": \"Database Connection URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-connection-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hikaricp-driver-classname\": {\n-                                \"description\": \"The fully-qualified class name of the JDBC driver. Example: com.mysql.jdbc.Driver\",\n-                                \"displayName\": \"Database Driver Class Name\",\n+                            \"Geo Database File\": {\n+                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n+                                \"displayName\": \"MaxMind Database File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-driver-classname\",\n+                                \"name\": \"Geo Database File\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hikaricp-driver-locations\": {\n-                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n-                                \"displayName\": \"Database Driver Location(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-driver-locations\",\n-                                \"required\": false,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n                                         \"DIRECTORY\",\n-                                        \"URL\"\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"hikaricp-kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hikaricp-kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"hikaricp-max-conn-lifetime\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The maximum lifetime of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n-                                \"displayName\": \"Max Connection Lifetime\",\n+                            \"Log Level\": {\n+                                \"defaultValue\": \"WARN\",\n+                                \"description\": \"The Log Level to use when an IP is not found in the database. Accepted values: INFO, DEBUG, WARN, ERROR.\",\n+                                \"displayName\": \"Log Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-max-conn-lifetime\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Log Level\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hikaricp-max-total-conns\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"This property controls the maximum size that the pool is allowed to reach, including both idle and in-use connections. Basically this value will determine the maximum number of actual connections to the database backend. A reasonable value for this is best determined by your execution environment. When the pool reaches this size, and no idle connections are available, the service will block for up to connectionTimeout milliseconds before timing out.\",\n-                                \"displayName\": \"Max Total Connections\",\n+                            \"geo-enrich-ip-city-record-path\": {\n+                                \"description\": \"Record path for putting the city identified for the IP address\",\n+                                \"displayName\": \"City Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-max-total-conns\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geo-enrich-ip-city-record-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hikaricp-max-wait-time\": {\n-                                \"defaultValue\": \"500 millis\",\n-                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or 0 <time units> to wait indefinitely. \",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"geo-enrich-ip-country-iso-record-path\": {\n+                                \"description\": \"Record path for putting the ISO Code for the country identified\",\n+                                \"displayName\": \"Country ISO Code Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-max-wait-time\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geo-enrich-ip-country-iso-record-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hikaricp-min-idle-conns\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"This property controls the minimum number of idle connections that HikariCP tries to maintain in the pool. If the idle connections dip below this value and total connections in the pool are less than 'Max Total Connections', HikariCP will make a best effort to add additional connections quickly and efficiently. It is recommended that this property to be set equal to 'Max Total Connections'.\",\n-                                \"displayName\": \"Minimum Idle Connections\",\n+                            \"geo-enrich-ip-country-postal-record-path\": {\n+                                \"description\": \"Record path for putting the postal code for the country identified\",\n+                                \"displayName\": \"Country Postal Code Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-min-idle-conns\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geo-enrich-ip-country-postal-record-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hikaricp-password\": {\n-                                \"description\": \"The password for the database user\",\n-                                \"displayName\": \"Password\",\n+                            \"geo-enrich-ip-country-record-path\": {\n+                                \"description\": \"Record path for putting the country identified for this IP address\",\n+                                \"displayName\": \"Country Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geo-enrich-ip-country-record-path\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"hikaricp-username\": {\n-                                \"description\": \"Database user name\",\n-                                \"displayName\": \"Database User\",\n+                            \"geo-enrich-ip-ip-record-path\": {\n+                                \"description\": \"The record path to retrieve the IP address for doing the lookup.\",\n+                                \"displayName\": \"IP Address Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geo-enrich-ip-ip-record-path\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hikaricp-validation-query\": {\n-                                \"description\": \"Validation Query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. NOTE: Using validation might have some performance penalty.\",\n-                                \"displayName\": \"Validation Query\",\n+                            \"geo-enrich-ip-latitude-record-path\": {\n+                                \"description\": \"Record path for putting the latitude identified for this IP address\",\n+                                \"displayName\": \"Latitude Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-validation-query\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geo-enrich-ip-latitude-record-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"hikari\",\n-                            \"jdbc\",\n-                            \"pooling\",\n-                            \"store\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.dbcp.HikariCPConnectionPool\",\n-                        \"typeDescription\": \"Provides Database Connection Pooling Service based on HikariCP. Connections can be asked from pool and returned after usage.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"db-record-sink-catalog-name\": {\n-                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty\",\n-                                \"displayName\": \"Catalog Name\",\n+                            },\n+                            \"geo-enrich-ip-longitude-record-path\": {\n+                                \"description\": \"Record path for putting the longitude identified for this IP address\",\n+                                \"displayName\": \"Longitude Record Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"db-record-sink-catalog-name\",\n+                                \"name\": \"geo-enrich-ip-longitude-record-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"db-record-sink-dcbp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database for sending records.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"geo-enrich-ip-record-reader\": {\n+                                \"description\": \"Record reader service to use for reading the flowfile contents.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-dcbp-service\",\n+                                \"name\": \"geo-enrich-ip-record-reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"db-record-sink-query-timeout\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL statement , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"db-record-sink-query-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-record-sink-quoted-identifiers\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n-                                \"displayName\": \"Quote Column Identifiers\",\n+                            \"geo-enrich-ip-record-writer\": {\n+                                \"description\": \"Record writer service to use for enriching the flowfile contents.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-quoted-identifiers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"geo-enrich-ip-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"db-record-sink-quoted-table-identifiers\": {\n+                            \"geo-enrich-ip-split-found-not-found\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name.\",\n-                                \"displayName\": \"Quote Table Identifiers\",\n+                                \"description\": \"Separate records that have been enriched from ones that have not. Default behavior is to send everything to the found relationship if even one record is enriched.\",\n+                                \"displayName\": \"Separate Enriched From Not Enriched\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-quoted-table-identifiers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-record-sink-schema-name\": {\n-                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"db-record-sink-schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-record-sink-table-name\": {\n-                                \"description\": \"The name of the table that the statement should affect.\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"db-record-sink-table-name\",\n+                                \"name\": \"geo-enrich-ip-split-found-not-found\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"db-record-sink-translate-field-names\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, the Processor will attempt to translate field names into the appropriate column names for the table specified. If false, the field names must match the column names exactly, or the column will not be updated\",\n-                                \"displayName\": \"Translate Field Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-translate-field-names\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-record-sink-unmatched-column-behavior\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  No notification will be logged\",\n-                                        \"displayName\": \"Ignore Unmatched Columns\",\n-                                        \"value\": \"Ignore Unmatched Columns\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  A warning will be logged\",\n-                                        \"displayName\": \"Warn on Unmatched Columns\",\n-                                        \"value\": \"Warn on Unmatched Columns\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the document.  An error will be logged\",\n-                                        \"displayName\": \"Fail on Unmatched Columns\",\n-                                        \"value\": \"Fail on Unmatched Columns\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Fail on Unmatched Columns\",\n-                                \"description\": \"If an incoming record does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Column Behavior\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-unmatched-column-behavior\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-record-sink-unmatched-field-behavior\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any field in the document that cannot be mapped to a column in the database is ignored\",\n-                                        \"displayName\": \"Ignore Unmatched Fields\",\n-                                        \"value\": \"Ignore Unmatched Fields\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n-                                        \"displayName\": \"Fail on Unmatched Fields\",\n-                                        \"value\": \"Fail on Unmatched Fields\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Ignore Unmatched Fields\",\n-                                \"description\": \"If an incoming record has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Field Behavior\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-unmatched-field-behavior\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Where to route flow files after unsuccessfully enriching attributes because no data was found\",\n+                                \"name\": \"not found\"\n+                            },\n+                            {\n+                                \"description\": \"The original input flowfile goes to this relationship regardless of whether the content was enriched or not.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"Where to route flow files after successfully enriching attributes with data provided by database\",\n+                                \"name\": \"found\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"db\",\n-                            \"jdbc\",\n+                            \"enrich\",\n+                            \"geo\",\n+                            \"ip\",\n+                            \"maxmind\",\n                             \"record\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.sink.db.DatabaseRecordSink\",\n-                        \"typeDescription\": \"Provides a service to write records using a configured database connection.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.GeoEnrichIPRecord\",\n+                        \"typeDescription\": \"Looks up geolocation information for an IP address and adds the geo information to FlowFile attributes. The geo data is provided as a MaxMind database. This version uses the NiFi Record API to allow large scale enrichment of record-oriented data sets. Each field provided by the MaxMind database can be directed to a field of the user's choosing by providing a record path for that field configuration. \",\n                         \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-datadog-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-datadog-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-enrich-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"This reporting task is deprecated and will be removed in NiFi 2.x.\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"API key\": {\n-                                \"description\": \"Datadog API key. If specified value is 'agent', local Datadog agent will be used.\",\n-                                \"displayName\": \"API key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"API key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Datadog transport\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Metrics will be sent via locally installed Datadog agent. Datadog agent needs to be installed manually before using this option\",\n-                                        \"displayName\": \"Datadog Agent\",\n-                                        \"value\": \"Datadog Agent\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Metrics will be sent via HTTP transport with no need of Agent installed. Datadog API key needs to be set\",\n-                                        \"displayName\": \"Datadog HTTP\",\n-                                        \"value\": \"Datadog HTTP\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Datadog HTTP\",\n-                                \"description\": \"Transport through which metrics will be sent to Datadog\",\n-                                \"displayName\": \"Datadog transport\",\n+                            \"Geo Database File\": {\n+                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n+                                \"displayName\": \"MaxMind Database File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Datadog transport\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Geo Database File\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Environment\": {\n-                                \"defaultValue\": \"dev\",\n-                                \"description\": \"Environment, dataflow is running in. This property will be included as metrics tag.\",\n-                                \"displayName\": \"Environment\",\n+                            \"IP Address Attribute\": {\n+                                \"description\": \"The name of an attribute whose value is a dotted decimal IP address for which enrichment should occur\",\n+                                \"displayName\": \"IP Address Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Environment\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"IP Address Attribute\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Metrics prefix\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"Prefix to be added before every metric\",\n-                                \"displayName\": \"Metrics prefix\",\n+                            \"Log Level\": {\n+                                \"defaultValue\": \"WARN\",\n+                                \"description\": \"The Log Level to use when an IP is not found in the database. Accepted values: INFO, DEBUG, WARN, ERROR.\",\n+                                \"displayName\": \"Log Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Metrics prefix\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Log Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Where to route flow files after unsuccessfully enriching attributes because no data was found\",\n+                                \"name\": \"not found\"\n+                            },\n+                            {\n+                                \"description\": \"Where to route flow files after successfully enriching attributes with data provided by database\",\n+                                \"name\": \"found\"\n+                            }\n+                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"datadog\",\n-                            \"metrics\",\n-                            \"reporting\"\n+                            \"ISP\",\n+                            \"enrich\",\n+                            \"ip\",\n+                            \"maxmind\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.datadog.DataDogReportingTask\",\n-                        \"typeDescription\": \"Publishes metrics from NiFi to datadog. For accurate and informative reporting, components should have unique names.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jslt-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.ISPEnrichIP\",\n+                        \"typeDescription\": \"Looks up ISP information for an IP address and adds the information to FlowFile attributes. The ISP data is provided as a MaxMind ISP database. (Note that this is NOT the same as the GeoLite database utilized by some geo enrichment tools). The attribute that contains the IP address to lookup is provided by the 'IP Address Attribute' property. If the name of the attribute provided is 'X', then the the attributes added by enrichment will take the form X.isp.<fieldName>\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of microseconds that the geo lookup took\",\n+                                \"name\": \"X.isp.lookup.micros\"\n+                            },\n+                            {\n+                                \"description\": \"The Autonomous System Number (ASN) identified for the IP address\",\n+                                \"name\": \"X.isp.asn\"\n+                            },\n+                            {\n+                                \"description\": \"The Organization Associated with the ASN identified\",\n+                                \"name\": \"X.isp.asn.organization\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the ISP associated with the IP address provided\",\n+                                \"name\": \"X.isp.name\"\n+                            },\n+                            {\n+                                \"description\": \"The Organization associated with the IP address provided\",\n+                                \"name\": \"X.isp.organization\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-jslt-nar\",\n+                        \"artifact\": \"nifi-enrich-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"jslt-transform-cache-size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Compiling a JSLT Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n-                                \"displayName\": \"Transform Cache Size\",\n+                            \"DNS_QUERY_TYPE\": {\n+                                \"defaultValue\": \"TXT\",\n+                                \"description\": \"The DNS query type to be used by the processor (e.g. TXT, A)\",\n+                                \"displayName\": \"DNS Query Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jslt-transform-cache-size\",\n+                                \"name\": \"DNS_QUERY_TYPE\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"jslt-transform-pretty_print\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Apply pretty-print formatting to the output of the JSLT transform\",\n-                                \"displayName\": \"Pretty Print\",\n+                            \"DNS_RETRIES\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of attempts before giving up and moving on\",\n+                                \"displayName\": \"DNS Query Retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jslt-transform-pretty_print\",\n+                                \"name\": \"DNS_RETRIES\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"jslt-transform-result-filter\": {\n-                                \"defaultValue\": \". != null and . != {} and . != []\",\n-                                \"description\": \"A filter for output JSON results using a JSLT expression. This property supports changing the default filter, which removes JSON objects with null values, empty objects and empty arrays from the output JSON. This JSLT must return true for each JSON object to be included and false for each object to be removed. Using a filter value of \\\"true\\\" to disables filtering.\",\n-                                \"displayName\": \"Transform Result Filter\",\n+                            \"DNS_SERVER\": {\n+                                \"description\": \"A comma separated list of  DNS servers to be used. (Defaults to system wide if none is used)\",\n+                                \"displayName\": \"DNS Servers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jslt-transform-result-filter\",\n+                                \"name\": \"DNS_SERVER\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"DNS_TIMEOUT\": {\n+                                \"defaultValue\": \"1500 ms\",\n+                                \"description\": \"The amount of time to wait until considering a query as failed\",\n+                                \"displayName\": \"DNS Query Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"DNS_TIMEOUT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"jslt-transform-transformation\": {\n-                                \"description\": \"JSLT Transformation for transform of JSON data. Any NiFi Expression Language present will be evaluated first to get the final transform to be applied. The JSLT Tutorial provides an overview of supported expressions: https://github.com/schibsted/jslt/blob/master/tutorial.md\",\n-                                \"displayName\": \"JSLT Transformation\",\n+                            \"QUERY_INPUT\": {\n+                                \"description\": \"The value that should be used to populate the query\",\n+                                \"displayName\": \"Lookup value\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"jslt-transform-transformation\",\n+                                \"name\": \"QUERY_INPUT\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"jslt-transform-transformation-strategy\": {\n+                            \"QUERY_PARSER\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Apply transformation to entire FlowFile content JSON\",\n-                                        \"displayName\": \"Entire FlowFile\",\n-                                        \"value\": \"ENTIRE_FLOWFILE\"\n+                                        \"description\": \"Use a delimiter character or RegEx  to split the results into attributes\",\n+                                        \"displayName\": \"Split\",\n+                                        \"value\": \"Split\"\n                                     },\n                                     {\n-                                        \"description\": \"Apply transformation each JSON Object in an array\",\n-                                        \"displayName\": \"Each JSON Object\",\n-                                        \"value\": \"EACH_OBJECT\"\n+                                        \"description\": \"Use a regular expression to split the results into attributes \",\n+                                        \"displayName\": \"RegEx\",\n+                                        \"value\": \"RegEx\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Do not split results\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ENTIRE_FLOWFILE\",\n-                                \"description\": \"Whether to apply the JSLT transformation to the entire FlowFile contents or each JSON object in the root-level array\",\n-                                \"displayName\": \"Transformation Strategy\",\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"The method used to slice the results into attribute groups\",\n+                                \"displayName\": \"Results Parser\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jslt-transform-transformation-strategy\",\n+                                \"name\": \"QUERY_PARSER\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"QUERY_PARSER_INPUT\": {\n+                                \"description\": \"Choice between a splitter and regex matcher used to parse the results of the query into attribute groups.\\nNOTE: This is a multiline regular expression, therefore, the DFM should decide how to handle trailing new line characters.\",\n+                                \"displayName\": \"Parser RegEx\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"QUERY_PARSER_INPUT\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Where to route flow files if data enrichment query rendered no results\",\n+                                \"name\": \"not found\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Where to route flow files after successfully enriching attributes with data\",\n+                                \"name\": \"found\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"jslt\",\n-                            \"json\",\n-                            \"transform\"\n+                            \"dns\",\n+                            \"enrich\",\n+                            \"ip\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.jslt.JSLTTransformJSON\",\n-                        \"typeDescription\": \"Applies a JSLT transformation to the FlowFile JSON payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the JSLT transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n+                        \"type\": \"org.apache.nifi.processors.enrich.QueryDNS\",\n+                        \"typeDescription\": \"A powerful DNS query processor primary designed to enrich DataFlows with DNS based APIs (e.g. RBLs, ShadowServer's ASN lookup) but that can be also used to perform regular DNS lookups.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Always set to application/json\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The captured fields of the DNS query response for each of the records received\",\n+                                \"name\": \"enrich.dns.record*.group*\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-mongodb-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-services-nar\",\n+                        \"artifact\": \"nifi-enrich-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Database User\": {\n-                                \"description\": \"Database user name\",\n-                                \"displayName\": \"Database User\",\n+                            \"BATCH_SIZE\": {\n+                                \"defaultValue\": \"25\",\n+                                \"description\": \"The number of incoming FlowFiles to process in a single execution of this processor. \",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database User\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"BATCH_SIZE\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password for the database user\",\n-                                \"displayName\": \"Password\",\n+                            \"BULK_PROTOCOL\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The evaluated input of each flowfile is enclosed within begin and end tags. Each row contains a delimited set of fields\",\n+                                        \"displayName\": \"Begin/End\",\n+                                        \"value\": \"Begin/End\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Queries are made without any particular dialect\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"The protocol used to perform the bulk query. \",\n+                                \"displayName\": \"Bulk Protocol\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"BULK_PROTOCOL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"KEY_GROUP\": {\n+                                \"description\": \"When performing a batched lookup, the following RegEx numbered capture group or Column number will be used to match the whois server response with the lookup field\",\n+                                \"displayName\": \"Key lookup group (multiline / batch)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"KEY_GROUP\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"mongo-uri\": {\n-                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n-                                \"displayName\": \"Mongo URI\",\n+                            \"QUERY_INPUT\": {\n+                                \"description\": \"The value that should be used to populate the query\",\n+                                \"displayName\": \"Lookup value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"mongo-uri\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"QUERY_INPUT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-client-auth\": {\n+                            \"QUERY_PARSER\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"Use a delimiter character or RegEx  to split the results into attributes\",\n+                                        \"displayName\": \"Split\",\n+                                        \"value\": \"Split\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Use a regular expression to split the results into attributes \",\n+                                        \"displayName\": \"RegEx\",\n+                                        \"value\": \"RegEx\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Do not split results\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"The method used to slice the results into attribute groups\",\n+                                \"displayName\": \"Results Parser\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n+                                \"name\": \"QUERY_PARSER\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"QUERY_PARSER_INPUT\": {\n+                                \"description\": \"Choice between a splitter and regex matcher used to parse the results of the query into attribute groups.\\nNOTE: This is a multiline regular expression, therefore, the DFM should decide how to handle trailing new line characters.\",\n+                                \"displayName\": \"Parser RegEx\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"QUERY_PARSER_INPUT\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"WHOIS_QUERY_TYPE\": {\n+                                \"description\": \"The Whois query type to be used by the processor (if used)\",\n+                                \"displayName\": \"Whois Query Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"WHOIS_QUERY_TYPE\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n+                            },\n+                            \"WHOIS_SERVER\": {\n+                                \"description\": \"The Whois server to be used\",\n+                                \"displayName\": \"Whois Server\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"WHOIS_SERVER\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"WHOIS_SERVER_PORT\": {\n+                                \"defaultValue\": \"43\",\n+                                \"description\": \"The TCP port of the remote Whois server\",\n+                                \"displayName\": \"Whois Server Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"WHOIS_SERVER_PORT\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"WHOIS_TIMEOUT\": {\n+                                \"defaultValue\": \"1500 ms\",\n+                                \"description\": \"The amount of time to wait until considering a query as failed\",\n+                                \"displayName\": \"Whois Query Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"WHOIS_TIMEOUT\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Where to route flow files if data enrichment query rendered no results\",\n+                                \"name\": \"not found\"\n+                            },\n+                            {\n+                                \"description\": \"Where to route flow files after successfully enriching attributes with data\",\n+                                \"name\": \"found\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"mongo\",\n-                            \"mongodb\",\n-                            \"service\"\n+                            \"enrich\",\n+                            \"ip\",\n+                            \"whois\"\n                         ],\n-                        \"type\": \"org.apache.nifi.mongodb.MongoDBControllerService\",\n-                        \"typeDescription\": \"Provides a controller service that configures a connection to MongoDB and provides access to that connection to other Mongo-related components.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.enrich.QueryWhois\",\n+                        \"typeDescription\": \"A powerful whois query processor primary designed to enrich DataFlows with whois based APIs (e.g. ShadowServer's ASN lookup) but that can be also used to perform regular whois lookups.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The captured fields of the Whois query response for each of the records received\",\n+                                \"name\": \"enrich.dns.record*.group*\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-protobuf-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-protobuf-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"mongo-collection-name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-collection-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-db-name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"Message Type\": {\n+                                \"description\": \"Fully qualified name of the Protocol Buffers message type including its package (eg. mypackage.MyMessage). The .proto files configured in 'Proto Directory' must contain the definition of this message type.\",\n+                                \"displayName\": \"Message Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-db-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Message Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-lookup-client-service\": {\n-                                \"description\": \"A MongoDB controller service to use with this lookup service.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Proto Directory\": {\n+                                \"description\": \"Directory containing Protocol Buffers message definition (.proto) file(s).\",\n+                                \"displayName\": \"Proto Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-lookup-client-service\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proto Directory\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"mongo-lookup-projection\": {\n-                                \"description\": \"Specifies a projection for limiting which fields will be returned.\",\n-                                \"displayName\": \"Projection\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-lookup-projection\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-lookup-value-field\": {\n-                                \"description\": \"The field whose value will be returned when the lookup key(s) match a record. If not specified then the entire MongoDB result document minus the _id field will be returned as a record.\",\n-                                \"displayName\": \"Lookup Value Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-lookup-value-field\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n                                         \"displayName\": \"Use 'Schema Name' Property\",\n@@ -69274,20 +67471,35 @@\n                                     },\n                                     {\n                                         \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n                                         \"displayName\": \"Use 'Schema Text' Property\",\n                                         \"value\": \"schema-text-property\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Infer from Result\",\n-                                        \"value\": \"infer\"\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The record schema is generated from the provided proto file\",\n+                                        \"displayName\": \"Generate from Proto file\",\n+                                        \"value\": \"generate-from-proto-file\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"infer\",\n+                                \"defaultValue\": \"generate-from-proto-file\",\n                                 \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n                                 \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n@@ -69322,16 +67534,16 @@\n                                         \"propertyDisplayName\": \"Schema Access Strategy\",\n                                         \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n                                 \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n                                 \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n                                 \"name\": \"schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"schema-registry\": {\n                                 \"dependencies\": [\n                                     {\n@@ -69400,155 +67612,42 @@\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"lookup\",\n-                            \"mongo\",\n-                            \"mongodb\",\n+                            \"parser\",\n+                            \"protobuf\",\n+                            \"reader\",\n                             \"record\"\n                         ],\n-                        \"type\": \"org.apache.nifi.mongodb.MongoDBLookupService\",\n-                        \"typeDescription\": \"Provides a lookup service based around MongoDB. Each key that is specified \\nwill be added to a query as-is. For example, if you specify the two keys, \\nuser and email, the resulting query will be { \\\"user\\\": \\\"tester\\\", \\\"email\\\": \\\"tester@test.com\\\" }.\\nThe query is limited to the first result (findOne in the Mongo documentation). If no \\\"Lookup Value Field\\\" is specified then the entire MongoDB result document minus the _id field will be returned as a record.\",\n+                        \"type\": \"org.apache.nifi.services.protobuf.ProtobufReader\",\n+                        \"typeDescription\": \"Parses a Protocol Buffers message from binary format.\",\n                         \"version\": \"1.27.0\"\n                     }\n                 ],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-windows-event-log-nar\",\n+            \"artifact\": \"nifi-server-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-windows-event-log-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"channel\": {\n-                                \"defaultValue\": \"System\",\n-                                \"description\": \"The Windows Event Log Channel to listen to.\",\n-                                \"displayName\": \"Channel\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"channel\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"inactiveDurationToReconnect\": {\n-                                \"defaultValue\": \"10 mins\",\n-                                \"description\": \"If no new event logs are processed for the specified time period, this processor will try reconnecting to recover from a state where any further messages cannot be consumed. Such situation can happen if Windows Event Log service is restarted, or ERROR_EVT_QUERY_RESULT_STALE (15011) is returned. Setting no duration, e.g. '0 ms' disables auto-reconnection.\",\n-                                \"displayName\": \"Inactive duration to reconnect\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"inactiveDurationToReconnect\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"maxBuffer\": {\n-                                \"defaultValue\": \"1048576\",\n-                                \"description\": \"The individual Event Log XMLs are rendered to a buffer.  This specifies the maximum size in bytes that the buffer will be allowed to grow to. (Limiting the maximum size of an individual Event XML.)\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maxBuffer\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"maxQueue\": {\n-                                \"defaultValue\": \"1024\",\n-                                \"description\": \"Events are received asynchronously and must be output as FlowFiles when the processor is triggered.  This specifies the maximum number of events to queue for transformation into FlowFiles.\",\n-                                \"displayName\": \"Maximum queue size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maxQueue\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"query\": {\n-                                \"defaultValue\": \"*\",\n-                                \"description\": \"XPath Query to filter events. (See https://msdn.microsoft.com/en-us/library/windows/desktop/dd996910(v=vs.85).aspx for examples.)\",\n-                                \"displayName\": \"XPath Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"query\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Relationship for successfully consumed events.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"event\",\n-                            \"ingest\",\n-                            \"windows\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.windows.event.log.ConsumeWindowsEventLog\",\n-                        \"typeDescription\": \"Registers a Windows Event Log Subscribe Callback to receive FlowFiles from Events on Windows.  These can be filtered via channel and XPath.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Will set a MIME type value of application/xml.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n+                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n             \"artifact\": \"nifi-hbase-nar\",\n@@ -71217,31 +69316,21 @@\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-kerberos-iaa-providers-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-slack-nar\",\n+            \"artifact\": \"nifi-cipher-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-slack-nar\",\n+                        \"artifact\": \"nifi-cipher-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -71249,419 +69338,651 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.slack.PublishSlack\"\n-                        ],\n-                        \"deprecationReason\": \"This Processor is more difficult to configure than necessary, and exposes intricate nuances of the Slack API that need not be exposed. Additionally, it lacks some capabilities, such as responding to messages in threads. It interacts directly with the Slack API instead of making use of the Slack-provided SDK, which makes the Processor much more brittle. Additionally, it does not make clear the differences between PutSlack and PostSlack. Each provides slightly different capabilities. PublishSlack combines the capabilities of both Processors in a simpler configuration that makes use of Slack's standard REST API.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"The property value will be converted to JSON and will be added to the array of attachments in the JSON payload being sent to Slack. The property name will not be used by the processor.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"<Arbitrary name>\",\n-                                \"value\": \"JSON snippet specifying a Slack message \\\"attachment\\\"\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"cipher-algorithm-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Cipher Blocking Chaining Mode\",\n+                                        \"displayName\": \"CBC\",\n+                                        \"value\": \"CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Counter Mode\",\n+                                        \"displayName\": \"CTR\",\n+                                        \"value\": \"CTR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Galois/Counter Mode supporting Authenticated Encryption with Associated Data\",\n+                                        \"displayName\": \"GCM\",\n+                                        \"value\": \"GCM\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GCM\",\n+                                \"description\": \"Block cipher mode of operation for decryption using the Advanced Encryption Standard\",\n+                                \"displayName\": \"Cipher Algorithm Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"cipher-algorithm-mode\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"access-token\": {\n-                                \"description\": \"OAuth Access Token used for authenticating/authorizing the Slack request sent by NiFi.\",\n-                                \"displayName\": \"Access Token\",\n+                            \"cipher-algorithm-padding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"NoPadding\",\n+                                        \"displayName\": \"NoPadding\",\n+                                        \"value\": \"NoPadding\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS5Padding\",\n+                                        \"displayName\": \"PKCS5Padding\",\n+                                        \"value\": \"PKCS5Padding\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NoPadding\",\n+                                \"description\": \"Padding specification used in cipher operation for decryption using the Advanced Encryption Standard\",\n+                                \"displayName\": \"Cipher Algorithm Padding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"access-token\",\n+                                \"name\": \"cipher-algorithm-padding\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"channel\": {\n-                                \"description\": \"Slack channel, private group, or IM channel to send the message to.\",\n-                                \"displayName\": \"Channel\",\n+                            \"key-specification\": {\n+                                \"description\": \"Specification providing the raw secret key or a password from which to derive a secret key\",\n+                                \"displayName\": \"Key Specification\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"channel\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-specification\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"file-mime-type\": {\n-                                \"defaultValue\": \"${mime.type}\",\n-                                \"description\": \"Mime type of the file to be uploaded. The property value will only be used if 'Upload FlowFile' has been set to 'Yes'. If the property evaluated to null or empty string, then the mime type will be set to 'application/octet-stream' in the Slack message.\",\n-                                \"displayName\": \"File Mime Type\",\n+                            \"key-specification-format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Raw secret key provided as a hexadecimal string\",\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Password string for use with a Key Derivation Function to produce a secret key\",\n+                                        \"displayName\": \"PASSWORD\",\n+                                        \"value\": \"PASSWORD\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PASSWORD\",\n+                                \"description\": \"Format describing the configured Key Specification\",\n+                                \"displayName\": \"Key Specification Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-mime-type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-specification-format\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Decryption succeeded\",\n+                                \"name\": \"success\"\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"Name of the file to be uploaded. The property value will only be used if 'Upload FlowFile' has been set to 'Yes'. If the property evaluated to null or empty string, then the file name will be set to 'file' in the Slack message.\",\n-                                \"displayName\": \"File Name\",\n+                            {\n+                                \"description\": \"Decryption failed\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"AES\",\n+                            \"Argon2\",\n+                            \"PBKDF2\",\n+                            \"bcrypt\",\n+                            \"cryptography\",\n+                            \"decipher\",\n+                            \"decrypt\",\n+                            \"scrypt\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContent\",\n+                        \"typeDescription\": \"Decrypt content encrypted with AES and encoded according conventions added in NiFi 0.5.0 for the EncryptContent Processor. The Processor reads the first 256 bytes to determine the presence of a cryptographic salt based on finding the 'NiFiSALT' delimiter. The salt is not present for content encrypted with a raw hexadecimal key. The Processor determines the presence of the initialization vector based on finding the 'NiFiIV' delimiter.The salt format indicates the Key Derivation Function that the Processor uses to generate a secret key based on a configured password. The Processor derives keys with a size of 128 bits according to the conventions implemented in NiFi 0.5.0.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Private Key Identities\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PROPERTIES\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Private Key Source\",\n+                                        \"propertyName\": \"Private Key Source\"\n+                                    }\n+                                ],\n+                                \"description\": \"One or more X25519 Private Key Identities, separated with newlines, encoded according to the age specification, starting with AGE-SECRET-KEY-1\",\n+                                \"displayName\": \"Private Key Identities\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Private Key Identities\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n+                                \"sensitive\": true\n                             },\n-                            \"file-title\": {\n-                                \"description\": \"Title of the file displayed in the Slack message. The property value will only be used if 'Upload FlowFile' has been set to 'Yes'.\",\n-                                \"displayName\": \"File Title\",\n+                            \"Private Key Identity Resources\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"RESOURCES\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Private Key Source\",\n+                                        \"propertyName\": \"Private Key Source\"\n+                                    }\n+                                ],\n+                                \"description\": \"One or more files or URLs containing X25519 Private Key Identities, separated with newlines, encoded according to the age specification, starting with AGE-SECRET-KEY-1\",\n+                                \"displayName\": \"Private Key Identity Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-title\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Private Key Identity Resources\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"file-upload-url\": {\n-                                \"defaultValue\": \"https://slack.com/api/files.upload\",\n-                                \"description\": \"Slack Web API URL for uploading files to channels. It only needs to be changed if Slack changes its API URL.\",\n-                                \"displayName\": \"File Upload URL\",\n+                            \"Private Key Source\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Load one or more keys from configured properties\",\n+                                        \"displayName\": \"PROPERTIES\",\n+                                        \"value\": \"PROPERTIES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Load one or more keys from files or URLs\",\n+                                        \"displayName\": \"RESOURCES\",\n+                                        \"value\": \"RESOURCES\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PROPERTIES\",\n+                                \"description\": \"Source of information determines the loading strategy for X25519 Private Key Identities\",\n+                                \"displayName\": \"Private Key Source\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-upload-url\",\n+                                \"name\": \"Private Key Source\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.cipher.EncryptContentAge\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Decryption Completed\",\n+                                \"name\": \"success\"\n                             },\n-                            \"post-message-url\": {\n-                                \"defaultValue\": \"https://slack.com/api/chat.postMessage\",\n-                                \"description\": \"Slack Web API URL for posting text messages to channels. It only needs to be changed if Slack changes its API URL.\",\n-                                \"displayName\": \"Post Message URL\",\n+                            {\n+                                \"description\": \"Decryption Failed\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ChaCha20-Poly1305\",\n+                            \"X25519\",\n+                            \"age\",\n+                            \"age-encryption.org\",\n+                            \"encryption\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContentAge\",\n+                        \"typeDescription\": \"Decrypt content using the age-encryption.org/v1 specification. Detects binary or ASCII armored content encoding using the initial file header bytes. The age standard uses ChaCha20-Poly1305 for authenticated encryption of the payload. The age-keygen command supports generating X25519 key pairs for encryption and decryption operations.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"encryption-scheme\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_128\",\n+                                        \"value\": \"PBEWITHMD5AND128BITAES-CBC-OPENSSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_192\",\n+                                        \"value\": \"PBEWITHMD5AND192BITAES-CBC-OPENSSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_256\",\n+                                        \"value\": \"PBEWITHMD5AND256BITAES-CBC-OPENSSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS5 Scheme 1 with MD5 digest and Data Encryption Standard 64 bit keys. OID 1.2.840.113549.1.5.3\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_DES\",\n+                                        \"value\": \"PBEWITHMD5ANDDES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS Scheme 1 with MD5 digest and Rivest Cipher 2. OID 1.2.840.113549.1.5.6\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_RC2\",\n+                                        \"value\": \"PBEWITHMD5ANDRC2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_128\",\n+                                        \"value\": \"PBEWITHSHAAND128BITAES-CBC-BC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_192\",\n+                                        \"value\": \"PBEWITHSHAAND192BITAES-CBC-BC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_256\",\n+                                        \"value\": \"PBEWITHSHAAND256BITAES-CBC-BC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS5 Scheme 1 with SHA-1 digest and Data Encryption Standard. OID 1.2.840.113549.1.5.10\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_DES\",\n+                                        \"value\": \"PBEWITHSHA1ANDDES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Triple Data Encryption Standard 128 bit keys. OID 1.2.840.113549.1.12.1.4\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_DESEDE_128\",\n+                                        \"value\": \"PBEWITHSHAAND2-KEYTRIPLEDES-CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Triple Data Encryption Standard 192 bit keys. OID 1.2.840.113549.1.12.1.3\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_DESEDE_192\",\n+                                        \"value\": \"PBEWITHSHAAND3-KEYTRIPLEDES-CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS5 Scheme 1 with SHA-1 digest and Rivest Cipher 2. OID 1.2.840.113549.1.5.11\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2\",\n+                                        \"value\": \"PBEWITHSHA1ANDRC2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 2 128 bit keys. OID 1.2.840.113549.1.12.1.5\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2_128\",\n+                                        \"value\": \"PBEWITHSHAAND128BITRC2-CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 2 40 bit keys. OID 1.2.840.113549.1.12.1.6\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2_40\",\n+                                        \"value\": \"PBEWITHSHAAND40BITRC2-CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 4 128 bit keys. OID 1.2.840.113549.1.12.1.1\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC4_128\",\n+                                        \"value\": \"PBEWITHSHAAND128BITRC4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 4 40 bit keys. OID 1.2.840.113549.1.12.1.2\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC4_40\",\n+                                        \"value\": \"PBEWITHSHAAND40BITRC4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Twofish in Cipher Block Chaining mode using 256 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_TWOFISH\",\n+                                        \"value\": \"PBEWITHSHAANDTWOFISH-CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_128\",\n+                                        \"value\": \"PBEWITHSHA256AND128BITAES-CBC-BC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_192\",\n+                                        \"value\": \"PBEWITHSHA256AND192BITAES-CBC-BC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_256\",\n+                                        \"value\": \"PBEWITHSHA256AND256BITAES-CBC-BC\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password-Based Encryption Scheme including PBES1 described in RFC 8018, and others defined according to PKCS12 and Bouncy Castle implementations\",\n+                                \"displayName\": \"Encryption Scheme\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"post-message-url\",\n+                                \"name\": \"encryption-scheme\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"text\": {\n-                                \"description\": \"Text of the Slack message to send. Only required if no attachment has been specified and 'Upload File' has been set to 'No'.\",\n-                                \"displayName\": \"Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"upload-flowfile\": {\n+                            \"key-derivation-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Upload and attach FlowFile content to the Slack message.\",\n-                                        \"displayName\": \"Yes\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"OpenSSL Envelope BytesToKey using a digest algorithm with one iteration and optional salt of eight bytes\",\n+                                        \"displayName\": \"OPENSSL_EVP_BYTES_TO_KEY\",\n+                                        \"value\": \"OPENSSL_EVP_BYTES_TO_KEY\"\n                                     },\n                                     {\n-                                        \"description\": \"Don't upload and attach FlowFile content to the Slack message.\",\n-                                        \"displayName\": \"No\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Jasypt Java Simplified Encryption using a digest algorithm with 1000 iterations and required salt of eight or sixteen bytes\",\n+                                        \"displayName\": \"JASYPT_STANDARD\",\n+                                        \"value\": \"JASYPT_STANDARD\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not to upload and attach the FlowFile content to the Slack message.\",\n-                                \"displayName\": \"Upload FlowFile\",\n+                                \"description\": \"Strategy for reading salt from encoded contents and deriving the decryption key according to the number of function iterations\",\n+                                \"displayName\": \"Key Derivation Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"upload-flowfile\",\n+                                \"name\": \"key-derivation-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"password\": {\n+                                \"description\": \"Password required for Password-Based Encryption Schemes\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success after being successfully sent to Slack\",\n+                                \"description\": \"Decryption succeeded\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure if unable to be sent to Slack\",\n+                                \"description\": \"Decryption failed\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"message\",\n-                            \"notify\",\n-                            \"post\",\n-                            \"slack\",\n-                            \"upload\"\n+                            \"Jasypt\",\n+                            \"OpenSSL\",\n+                            \"PBES1\",\n+                            \"PKCS5\",\n+                            \"cryptography\",\n+                            \"decipher\",\n+                            \"decrypt\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.slack.PostSlack\",\n-                        \"typeDescription\": \"Sends a message on Slack. The FlowFile content (e.g. an image) can be uploaded and attached to the message.\",\n+                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContentCompatibility\",\n+                        \"typeDescription\": \"Decrypt content using password-based encryption schemes with legacy algorithms supporting historical compatibility modes.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The Slack URL of the uploaded file. It will be added if 'Upload FlowFile' has been set to 'Yes'.\",\n-                                \"name\": \"slack.file.url\"\n+                                \"description\": \"Password-Based Encryption Scheme\",\n+                                \"name\": \"pbe.scheme\"\n+                            },\n+                            {\n+                                \"description\": \"Password-Based Encryption Block Cipher\",\n+                                \"name\": \"pbe.symmetric.cipher\"\n+                            },\n+                            {\n+                                \"description\": \"Password-Based Encryption Digest Algorithm\",\n+                                \"name\": \"pbe.digest.algorithm\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-slack-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cipher-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"3 sec\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Access Token\": {\n-                                \"description\": \"OAuth Access Token used for authenticating/authorizing the Slack request sent by NiFi. This may be either a User Token or a Bot Token. The token must be granted the chat:write scope. Additionally, in order to upload FlowFile contents as an attachment, it must be granted files:write.\",\n-                                \"displayName\": \"Access Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Access Token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"Channel\": {\n-                                \"description\": \"The name or identifier of the channel to send the message to. If using a channel name, it must be prefixed with the # character. For example, #general. This is valid only for public channels. Otherwise, the unique identifier of the channel to publish to must be provided.\",\n-                                \"displayName\": \"Channel\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Channel\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Send FlowFile Content as Message\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the Character Set used to encode the FlowFile contents.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Include FlowFile Content as Attachment\": {\n+                            \"File Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Binary encoding\",\n+                                        \"displayName\": \"BINARY\",\n+                                        \"value\": \"BINARY\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use 'Message Text' Property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n+                                        \"description\": \"ASCII Armor encoding\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether or not the contents of the FlowFile should be uploaded as an attachment to the Slack message.\",\n-                                \"displayName\": \"Include FlowFile Content as Attachment\",\n+                                \"defaultValue\": \"BINARY\",\n+                                \"description\": \"Output encoding for encrypted files. Binary encoding provides optimal processing performance.\",\n+                                \"displayName\": \"File Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include FlowFile Content as Attachment\",\n+                                \"name\": \"File Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max FlowFile Size\": {\n-                                \"defaultValue\": \"1 MB\",\n+                            \"Public Key Recipient Resources\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"RESOURCES\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Include FlowFile Content as Attachment\",\n-                                        \"propertyName\": \"Include FlowFile Content as Attachment\"\n+                                        \"propertyDisplayName\": \"Public Key Source\",\n+                                        \"propertyName\": \"Public Key Source\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum size of a FlowFile that can be sent to Slack. If any FlowFile exceeds this size, it will be routed to failure. This plays an important role because the entire contents of the file must be loaded into NiFi's heap in order to send the data to Slack.\",\n-                                \"displayName\": \"Max FlowFile Size\",\n+                                \"description\": \"One or more files or URLs containing X25519 Public Key Recipients, separated with newlines, encoded according to the age specification, starting with age1\",\n+                                \"displayName\": \"Public Key Recipient Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max FlowFile Size\",\n+                                \"name\": \"Public Key Recipient Resources\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Message Text\": {\n+                            \"Public Key Recipients\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Use 'Message Text' Property\"\n+                                            \"PROPERTIES\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n+                                        \"propertyDisplayName\": \"Public Key Source\",\n+                                        \"propertyName\": \"Public Key Source\"\n                                     }\n                                 ],\n-                                \"description\": \"The text of the message to send to Slack.\",\n-                                \"displayName\": \"Message Text\",\n+                                \"description\": \"One or more X25519 Public Key Recipients, separated with newlines, encoded according to the age specification, starting with age1\",\n+                                \"displayName\": \"Public Key Recipients\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message Text\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Public Key Recipients\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n+                                \"sensitive\": true\n                             },\n-                            \"Publish Strategy\": {\n+                            \"Public Key Source\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The contents of the FlowFile will be sent as the message text.\",\n-                                        \"displayName\": \"Send FlowFile Content as Message\",\n-                                        \"value\": \"Send FlowFile Content as Message\"\n+                                        \"description\": \"Load one or more keys from configured properties\",\n+                                        \"displayName\": \"PROPERTIES\",\n+                                        \"value\": \"PROPERTIES\"\n                                     },\n                                     {\n-                                        \"description\": \"The value of the Message Text Property will be sent as the message text.\",\n-                                        \"displayName\": \"Use 'Message Text' Property\",\n-                                        \"value\": \"Use 'Message Text' Property\"\n+                                        \"description\": \"Load one or more keys from files or URLs\",\n+                                        \"displayName\": \"RESOURCES\",\n+                                        \"value\": \"RESOURCES\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Send FlowFile Content as Message\",\n-                                \"description\": \"Specifies how the Processor will send the message or file to Slack.\",\n-                                \"displayName\": \"Publish Strategy\",\n+                                \"defaultValue\": \"PROPERTIES\",\n+                                \"description\": \"Source of information determines the loading strategy for X25519 Public Key Recipients\",\n+                                \"displayName\": \"Public Key Source\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Publish Strategy\",\n+                                \"name\": \"Public Key Source\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Thread Timestamp\": {\n-                                \"description\": \"The Timestamp identifier for the thread that this message is to be a part of. If not specified, the message will be a top-level message instead of being in a thread.\",\n-                                \"displayName\": \"Thread Timestamp\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Thread Timestamp\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.cipher.DecryptContentAge\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success after being successfully sent to Slack\",\n+                                \"description\": \"Encryption Completed\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to 'rate limited' if the Rate Limit has been exceeded\",\n-                                \"name\": \"rate limited\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to 'failure' if unable to be sent to Slack for any other reason\",\n+                                \"description\": \"Encryption Failed\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"chat.postMessage\",\n-                            \"conversation\",\n-                            \"publish\",\n-                            \"send\",\n-                            \"slack\",\n-                            \"social media\",\n-                            \"team\",\n-                            \"text\",\n-                            \"unstructured\",\n-                            \"upload\",\n-                            \"write\"\n+                            \"ChaCha20-Poly1305\",\n+                            \"X25519\",\n+                            \"age\",\n+                            \"age-encryption.org\",\n+                            \"encryption\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.slack.PublishSlack\",\n-                        \"typeDescription\": \"Posts a message to the specified Slack channel. The content of the message can be either a user-defined message that makes use of Expression Language or the contents of the FlowFile can be sent as the message. If sending a user-defined message, the contents of the FlowFile may also be optionally uploaded as a file attachment.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The ID of the Slack Channel from which the messages were retrieved\",\n-                                \"name\": \"slack.channel.id\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the slack messages that was sent; this is used by Slack as a unique identifier\",\n-                                \"name\": \"slack.ts\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.cipher.EncryptContentAge\",\n+                        \"typeDescription\": \"Encrypt content using the age-encryption.org/v1 specification. Supports binary or ASCII armored content encoding using configurable properties. The age standard uses ChaCha20-Poly1305 for authenticated encryption of the payload. The age-keygen command supports generating X25519 key pairs for encryption and decryption operations.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-slack-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cipher-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -71669,264 +69990,173 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.slack.PublishSlack\"\n-                        ],\n-                        \"deprecationReason\": \"This Processor makes use of a Webhook URL, rather than Slack's REST API. As a result, the Processor is more difficult to configure than necessary and requires special permissions for the Slack Application / Bot. These permissions must be granted for every channel that the application is to respond to, which makes setup and maintenance difficult. Additionally, it does not make clear the differences between PutSlack and PostSlack. Each provides slightly different capabilities. PublishSlack combines the capabilities of both Processors in a simpler configuration that makes use of Slack's standard REST API.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Converts the contents of each value specified by the Dynamic Property's value to JSON and appends it to the payload being sent to Slack.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A JSON object to add to Slack's \\\"attachments\\\" JSON payload.\",\n-                                \"value\": \"JSON-formatted string to add to Slack's payload JSON appended to the \\\"attachments\\\" JSON array.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"mac-algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HmacSHA256\",\n+                                        \"value\": \"HmacSHA256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HmacSHA512\",\n+                                        \"value\": \"HmacSHA512\"\n+                                    }\n+                                ],\n+                                \"description\": \"Hashed Message Authentication Code Function\",\n+                                \"displayName\": \"Message Authentication Code Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"channel\": {\n-                                \"description\": \"A public channel using #channel or direct message using @username. If not specified, the default webhook channel as specified in Slack's Incoming Webhooks web interface is used.\",\n-                                \"displayName\": \"Channel\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"channel\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"icon-emoji\": {\n-                                \"description\": \"Icon Emoji to be used for the message. Must begin and end with a colon, e.g. :ghost:\",\n-                                \"displayName\": \"Icon Emoji\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"icon-emoji\",\n-                                \"required\": false,\n+                                \"name\": \"mac-algorithm\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"icon-url\": {\n-                                \"description\": \"Icon URL to be used for the message\",\n-                                \"displayName\": \"Icon URL\",\n+                            \"message-authentication-code\": {\n+                                \"description\": \"The MAC to compare with the calculated value\",\n+                                \"displayName\": \"Message Authentication Code\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"icon-url\",\n-                                \"required\": false,\n+                                \"name\": \"message-authentication-code\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"username\": {\n-                                \"description\": \"The displayed Slack username\",\n-                                \"displayName\": \"Username\",\n+                            \"message-authentication-code-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HEXADECIMAL\",\n+                                        \"value\": \"HEXADECIMAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BASE64\",\n+                                        \"value\": \"BASE64\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"HEXADECIMAL\",\n+                                \"description\": \"Encoding of the Message Authentication Code\",\n+                                \"displayName\": \"Message Authentication Code Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-authentication-code-encoding\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"webhook-text\": {\n-                                \"description\": \"The text sent in the webhook message\",\n-                                \"displayName\": \"Webhook Text\",\n+                            \"secret-key\": {\n+                                \"description\": \"Secret key to calculate the hash\",\n+                                \"displayName\": \"Secret Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"webhook-text\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"secret-key\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"webhook-url\": {\n-                                \"description\": \"The POST URL provided by Slack to send messages into a channel.\",\n-                                \"displayName\": \"Webhook URL\",\n+                            \"secret-key-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF8\",\n+                                        \"value\": \"UTF8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HEXADECIMAL\",\n+                                        \"value\": \"HEXADECIMAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BASE64\",\n+                                        \"value\": \"BASE64\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"HEXADECIMAL\",\n+                                \"description\": \"Encoding of the Secret Key\",\n+                                \"displayName\": \"Secret Key Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"webhook-url\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"secret-key-encoding\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success after being successfully sent to Slack\",\n+                                \"description\": \"Signature Verification Succeeded\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure if unable to be sent to Slack\",\n+                                \"description\": \"Signature Verification Failed\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"notify\",\n-                            \"put\",\n-                            \"slack\"\n+                            \"Authentication\",\n+                            \"HMAC\",\n+                            \"MAC\",\n+                            \"Signing\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.slack.PutSlack\",\n-                        \"typeDescription\": \"Sends a message to your team on slack.com\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hadoop-libraries-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-metrics-reporter-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-standard-shared-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-redis-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-asana-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-asana-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"asana-api-url\": {\n-                                \"defaultValue\": \"https://app.asana.com/api/1.0\",\n-                                \"description\": \"Base URL of Asana API. Leave it as default, unless you have your own Asana instance serving on a different URL. (typical for on-premise installations)\",\n-                                \"displayName\": \"API URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-api-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                        \"type\": \"org.apache.nifi.processors.cipher.VerifyContentMAC\",\n+                        \"typeDescription\": \"Calculates a Message Authentication Code using the provided Secret Key and compares it with the provided MAC property\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Calculated Message Authentication Code encoded by the selected encoding\",\n+                                \"name\": \"mac.calculated\"\n                             },\n-                            \"asana-personal-access-token\": {\n-                                \"description\": \"Similarly to entering your username/password into a website, when you access your Asana data via the API you need to authenticate. Personal Access Token (PAT) is an authentication mechanism for accessing the API. You can generate a PAT from the Asana developer console. Refer to Asana Authentication Quick Start for detailed instructions on getting started.\",\n-                                \"displayName\": \"Personal Access Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-personal-access-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                            {\n+                                \"description\": \"The Encoding of the Hashed Message Authentication Code\",\n+                                \"name\": \"mac.encoding\"\n                             },\n-                            \"asana-workspace-name\": {\n-                                \"description\": \"Specify which Asana workspace to use. Case sensitive. A workspace is the highest-level organizational unit in Asana. All projects and tasks have an associated workspace. An organization is a special kind of workspace that represents a company. In an organization, you can group your projects into teams.\",\n-                                \"displayName\": \"Workspace\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-workspace-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-asana-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.controller.asana.AsanaClientProviderService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Hashed Message Authentication Code Algorithm\",\n+                                \"name\": \"mac.algorithm\"\n                             }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"asana\",\n-                            \"authentication\",\n-                            \"service\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.controller.asana.StandardAsanaClientProviderService\",\n-                        \"typeDescription\": \"Common service to authenticate with Asana, and to work on a specified workspace.\",\n-                        \"version\": \"1.27.0\"\n+                        ]\n                     }\n                 ],\n-                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-hl7-nar\",\n+            \"artifact\": \"nifi-amqp-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hl7-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-amqp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -71935,552 +70165,736 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to encode the HL7 data\",\n-                                \"displayName\": \"Character Encoding\",\n+                            \"AMQP Version\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"0.9.1\",\n+                                        \"value\": \"0.9.1\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0.9.1\",\n+                                \"description\": \"AMQP Version. Currently only supports AMQP v0.9.1.\",\n+                                \"displayName\": \"AMQP Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Encoding\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AMQP Version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hl7-input-version\": {\n+                            \"Brokers\": {\n+                                \"description\": \"A comma-separated list of known AMQP Brokers in the format <host>:<port> (e.g., localhost:5672). If this is set, Host Name and Port are ignored. Only include hosts from the same AMQP cluster.\",\n+                                \"displayName\": \"Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Brokers\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Host Name\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Network address of AMQP broker (e.g., localhost). If Brokers is set, then this property is ignored.\",\n+                                \"displayName\": \"Host Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Host Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization.\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"5672\",\n+                                \"description\": \"Numeric value identifying Port of AMQP broker (e.g., 5671). If Brokers is set, then this property is ignored.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Queue\": {\n+                                \"description\": \"The name of the existing AMQP Queue from which messages will be consumed. Usually pre-defined by AMQP administrator. \",\n+                                \"displayName\": \"Queue\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Queue\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"User Name\": {\n+                                \"description\": \"User Name used for authentication and authorization.\",\n+                                \"displayName\": \"User Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"User Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Virtual Host\": {\n+                                \"description\": \"Virtual Host name which segregates AMQP system for enhanced security.\",\n+                                \"displayName\": \"Virtual Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Virtual Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"auto.acknowledge\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"autodetect\",\n-                                        \"value\": \"autodetect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2.2\",\n-                                        \"value\": \"2.2\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.3\",\n-                                        \"value\": \"2.3\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \" If false (Non-Auto-Acknowledge), the messages will be acknowledged by the processor after transferring the FlowFiles to success and committing the NiFi session. Non-Auto-Acknowledge mode provides 'at-least-once' delivery semantics. If true (Auto-Acknowledge), messages that are delivered to the AMQP Client will be auto-acknowledged by the AMQP Broker just after sending them out. This generally will provide better throughput but will also result in messages being lost upon restart/crash of the AMQP Broker, NiFi or the processor. Auto-Acknowledge mode provides 'at-most-once' delivery semantics and it is recommended only if loosing messages is acceptable.\",\n+                                \"displayName\": \"Auto-Acknowledge Messages\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"auto.acknowledge\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"batch.size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of messages that should be processed in a single session. Once this many messages have been received (or once no more messages are readily available), the messages received will be transferred to the 'success' relationship and the messages will be acknowledged to the AMQP Broker. Setting this value to a larger number could result in better performance, particularly for very small messages, but can also result in more messages being duplicated upon sudden restart of NiFi.\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"batch.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cert-authentication\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.3.1\",\n-                                        \"value\": \"2.3.1\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.4\",\n-                                        \"value\": \"2.4\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Authenticate using the SSL certificate rather than user name/password.\",\n+                                \"displayName\": \"Use Client Certificate Authentication\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cert-authentication\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"header.format\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2.5\",\n-                                        \"value\": \"2.5\"\n+                                        \"description\": \"Put all headers as a string with the specified separator in the attribute 'amqp$headers'.\",\n+                                        \"displayName\": \"Comma-Separated String\",\n+                                        \"value\": \"Comma-Separated String\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2.5.1\",\n-                                        \"value\": \"2.5.1\"\n+                                        \"description\": \"Format all headers as JSON string and output in the attribute 'amqp$headers'. It will include keys with null value as well.\",\n+                                        \"displayName\": \"JSON String\",\n+                                        \"value\": \"JSON String\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2.6\",\n-                                        \"value\": \"2.6\"\n+                                        \"description\": \"Put each header as attribute of the flow file with a prefix specified in the properties\",\n+                                        \"displayName\": \"FlowFile Attributes\",\n+                                        \"value\": \"FlowFile Attributes\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"autodetect\",\n-                                \"description\": \"The HL7 version to use for parsing and validation\",\n-                                \"displayName\": \"HL7 Input Version\",\n+                                \"defaultValue\": \"Comma-Separated String\",\n+                                \"description\": \"Defines how to output headers from the received message\",\n+                                \"displayName\": \"Header Output Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hl7-input-version\",\n+                                \"name\": \"header.format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"parse-segment-fields\": {\n-                                \"allowableValues\": [\n+                            \"header.key.prefix\": {\n+                                \"defaultValue\": \"consume.amqp\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"FlowFile Attributes\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Header Output Format\",\n+                                        \"propertyName\": \"header.format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Text to be prefixed to header keys as the are added to the FlowFile attributes. Processor will append '.' to the value of this property\",\n+                                \"displayName\": \"Header Key Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"header.key.prefix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"header.separator\": {\n+                                \"defaultValue\": \",\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"Comma-Separated String\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Header Output Format\",\n+                                        \"propertyName\": \"header.format\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not to parse HL7 segment fields into attributes\",\n-                                \"displayName\": \"Parse Segment Fields\",\n+                                \"description\": \"The character that is used to separate key-value for header in String. The value must be only one character.\",\n+                                \"displayName\": \"Header Separator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parse-segment-fields\",\n+                                \"name\": \"header.separator\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"prefetch.count\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The maximum number of unacknowledged messages for the consumer. If consumer has this number of unacknowledged messages, AMQP broker will no longer send new messages until consumer acknowledges some of the messages already delivered to it.Allowed values: from 0 to 65535. 0 means no limit\",\n+                                \"displayName\": \"Prefetch Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"prefetch.count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"skip-validation\": {\n+                            \"remove.curly.braces\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to validate HL7 message values\",\n-                                \"displayName\": \"Skip Validation\",\n+                                \"defaultValue\": \"False\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Comma-Separated String\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Header Output Format\",\n+                                        \"propertyName\": \"header.format\"\n+                                    }\n+                                ],\n+                                \"description\": \"If true Remove Curly Braces, Curly Braces in the header will be automatically remove.\",\n+                                \"displayName\": \"Remove Curly Braces\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"skip-validation\",\n-                                \"required\": true,\n+                                \"name\": \"remove.curly.braces\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"use-segment-names\": {\n+                            \"ssl-client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not to use HL7 segment names in attributes\",\n-                                \"displayName\": \"Use Segment Names\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"The property has no effect and therefore deprecated.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-segment-names\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-client-auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it is properly parsed as HL7 and its attributes extracted\",\n+                                \"description\": \"All FlowFiles that are received from the AMQP queue are routed to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be mapped to FlowFile Attributes. This would happen if the FlowFile does not contain valid HL7 data\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"HL7\",\n-                            \"attributes\",\n-                            \"extract\",\n-                            \"health level 7\",\n-                            \"healthcare\"\n+                            \"amqp\",\n+                            \"consume\",\n+                            \"get\",\n+                            \"message\",\n+                            \"rabbit\",\n+                            \"receive\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hl7.ExtractHL7Attributes\",\n-                        \"typeDescription\": \"Extracts information from an HL7 (Health Level 7) formatted FlowFile and adds the information as FlowFile Attributes. The attributes are named as <Segment Name> <dot> <Field Index>. If the segment is repeating, the naming will be <Segment Name> <underscore> <Segment Index> <dot> <Field Index>. For example, we may have an attribute named \\\"MHS.12\\\" with a value of \\\"2.1\\\" and an attribute named \\\"OBX_11.3\\\" with a value of \\\"93000^CPT4\\\".\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.amqp.processors.ConsumeAMQP\",\n+                        \"typeDescription\": \"Consumes AMQP Messages from an AMQP Broker using the AMQP 0.9.1 protocol. Each message that is received from the AMQP Broker will be emitted as its own FlowFile to the 'success' relationship.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The App ID field from the AMQP Message\",\n+                                \"name\": \"amqp$appId\"\n+                            },\n+                            {\n+                                \"description\": \"The Content Encoding reported by the AMQP Message\",\n+                                \"name\": \"amqp$contentEncoding\"\n+                            },\n+                            {\n+                                \"description\": \"The Content Type reported by the AMQP Message\",\n+                                \"name\": \"amqp$contentType\"\n+                            },\n+                            {\n+                                \"description\": \"The headers present on the AMQP Message. Added only if processor is configured to output this attribute.\",\n+                                \"name\": \"amqp$headers\"\n+                            },\n+                            {\n+                                \"description\": \"Each message header will be inserted with this attribute name, if processor is configured to output headers as attribute\",\n+                                \"name\": \"<Header Key Prefix>.<attribute>\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric indicator for the Message's Delivery Mode\",\n+                                \"name\": \"amqp$deliveryMode\"\n+                            },\n+                            {\n+                                \"description\": \"The Message priority\",\n+                                \"name\": \"amqp$priority\"\n+                            },\n+                            {\n+                                \"description\": \"The Message's Correlation ID\",\n+                                \"name\": \"amqp$correlationId\"\n+                            },\n+                            {\n+                                \"description\": \"The value of the Message's Reply-To field\",\n+                                \"name\": \"amqp$replyTo\"\n+                            },\n+                            {\n+                                \"description\": \"The Message Expiration\",\n+                                \"name\": \"amqp$expiration\"\n+                            },\n+                            {\n+                                \"description\": \"The unique ID of the Message\",\n+                                \"name\": \"amqp$messageId\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of the Message, as the number of milliseconds since epoch\",\n+                                \"name\": \"amqp$timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The type of message\",\n+                                \"name\": \"amqp$type\"\n+                            },\n+                            {\n+                                \"description\": \"The ID of the user\",\n+                                \"name\": \"amqp$userId\"\n+                            },\n+                            {\n+                                \"description\": \"The ID of the AMQP Cluster\",\n+                                \"name\": \"amqp$clusterId\"\n+                            },\n+                            {\n+                                \"description\": \"The routingKey of the AMQP Message\",\n+                                \"name\": \"amqp$routingKey\"\n+                            },\n+                            {\n+                                \"description\": \"The exchange from which AMQP Message was received\",\n+                                \"name\": \"amqp$exchange\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hl7-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-amqp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If a FlowFile matches the query, it will be routed to a relationship with the name of the property\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Name of a Relationship\",\n-                                \"value\": \"An HL7 Query Language query\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to encode the HL7 data\",\n-                                \"displayName\": \"Character Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be parsed as HL7 will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile that comes into this processor will be routed to this relationship, unless it is routed to 'failure'\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"HL7\",\n-                            \"Health Level 7\",\n-                            \"healthcare\",\n-                            \"route\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hl7.RouteHL7\",\n-                        \"typeDescription\": \"Routes incoming HL7 data according to user-defined queries. To add a query, add a new property to the processor. The name of the property will become a new relationship for the processor, and the value is an HL7 Query Language query. If a FlowFile matches the query, a copy of the FlowFile will be routed to the associated relationship.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the relationship to which the FlowFile was routed\",\n-                                \"name\": \"RouteHL7.Route\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kafka-2-6-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"acks\": {\n+                            \"AMQP Version\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Records are considered 'transmitted successfully' after successfully writing the content to a Kafka node, without waiting for a response. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Records are considered 'transmitted successfully' if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes.\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Records are considered 'transmitted unsuccessfully' unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration.\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"0.9.1\",\n+                                        \"value\": \"0.9.1\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                                \"defaultValue\": \"0.9.1\",\n+                                \"description\": \"AMQP Version. Currently only supports AMQP v0.9.1.\",\n+                                \"displayName\": \"AMQP Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n+                                \"name\": \"AMQP Version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"Brokers\": {\n+                                \"description\": \"A comma-separated list of known AMQP Brokers in the format <host>:<port> (e.g., localhost:5672). If this is set, Host Name and Port are ignored. Only include hosts from the same AMQP cluster.\",\n+                                \"displayName\": \"Brokers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n+                                \"name\": \"Brokers\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                            \"Exchange Name\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"The name of the AMQP Exchange the messages will be sent to. Usually provided by the AMQP administrator (e.g., 'amq.direct'). It is an optional property. If kept empty the messages will be sent to a default AMQP exchange.\",\n+                                \"displayName\": \"Exchange Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Exchange Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"Host Name\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Network address of AMQP broker (e.g., localhost). If Brokers is set, then this property is ignored.\",\n+                                \"displayName\": \"Host Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Host Name\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"5672\",\n+                                \"description\": \"Numeric value identifying Port of AMQP broker (e.g., 5671). If Brokers is set, then this property is ignored.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\n+                                \"name\": \"Port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"Routing Key\": {\n+                                \"description\": \"The name of the Routing Key that will be used by AMQP to route messages from the exchange to a destination queue(s). Usually provided by the administrator (e.g., 'myKey')In the event when messages are sent to a default exchange this property corresponds to a destination queue name, otherwise a binding from the Exchange to a Queue via Routing Key must be set (usually by the AMQP administrator)\",\n+                                \"displayName\": \"Routing Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Routing Key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"User Name\": {\n+                                \"description\": \"User Name used for authentication and authorization.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"User Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n+                            \"Virtual Host\": {\n+                                \"description\": \"Virtual Host name which segregates AMQP system for enhanced security.\",\n+                                \"displayName\": \"Virtual Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"name\": \"Virtual Host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"cert-authentication\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Authenticate using the SSL certificate rather than user name/password.\",\n+                                \"displayName\": \"Use Client Certificate Authentication\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cert-authentication\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"header.separator\": {\n+                                \"defaultValue\": \",\",\n+                                \"description\": \"The character that is used to split key-value for headers. The value must only one character. Otherwise you will get an error message\",\n+                                \"displayName\": \"Header Separator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"header.separator\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl-client-auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"The property has no effect and therefore deprecated.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-client-auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"The App ID field to set on the AMQP Message\",\n+                                \"name\": \"amqp$appId\"\n+                            },\n+                            {\n+                                \"description\": \"The Content Encoding to set on the AMQP Message\",\n+                                \"name\": \"amqp$contentEncoding\"\n+                            },\n+                            {\n+                                \"description\": \"The Content Type to set on the AMQP Message\",\n+                                \"name\": \"amqp$contentType\"\n+                            },\n+                            {\n+                                \"description\": \"The headers to set on the AMQP Message\",\n+                                \"name\": \"amqp$headers\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric indicator for the Message's Delivery Mode\",\n+                                \"name\": \"amqp$deliveryMode\"\n+                            },\n+                            {\n+                                \"description\": \"The Message priority\",\n+                                \"name\": \"amqp$priority\"\n+                            },\n+                            {\n+                                \"description\": \"The Message's Correlation ID\",\n+                                \"name\": \"amqp$correlationId\"\n+                            },\n+                            {\n+                                \"description\": \"The value of the Message's Reply-To field\",\n+                                \"name\": \"amqp$replyTo\"\n+                            },\n+                            {\n+                                \"description\": \"The Message Expiration\",\n+                                \"name\": \"amqp$expiration\"\n+                            },\n+                            {\n+                                \"description\": \"The unique ID of the Message\",\n+                                \"name\": \"amqp$messageId\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of the Message, as the number of milliseconds since epoch\",\n+                                \"name\": \"amqp$timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The type of message\",\n+                                \"name\": \"amqp$type\"\n+                            },\n+                            {\n+                                \"description\": \"The ID of the user\",\n+                                \"name\": \"amqp$userId\"\n+                            },\n+                            {\n+                                \"description\": \"The ID of the AMQP Cluster\",\n+                                \"name\": \"amqp$clusterId\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that are sent to the AMQP destination are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be routed to the AMQP destination are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"kafka\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"amqp\",\n+                            \"message\",\n+                            \"publish\",\n+                            \"put\",\n+                            \"rabbit\",\n+                            \"send\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\",\n-                        \"typeDescription\": \"Provides a service to write records to a Kafka 2.6+ topic.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.amqp.processors.PublishAMQP\",\n+                        \"typeDescription\": \"Creates an AMQP Message from the contents of a FlowFile and sends the message to an AMQP Exchange. In a typical AMQP exchange model, the message that is sent to the AMQP Exchange will be routed based on the 'Routing Key' to its final destination in the queue (the binding). If due to some misconfiguration the binding between the Exchange, Routing Key and Queue is not set up, the message will have no final destination and will return (i.e., the data will not make it to the queue). If that happens you will see a log in both app-log and bulletin stating to that effect, and the FlowFile will be routed to the 'failure' relationship.\",\n                         \"version\": \"1.27.0\"\n                     }\n                 ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-mqtt-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"artifact\": \"nifi-mqtt-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -72488,719 +70902,470 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Commit Offsets\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not this Processor should commit the offsets to Kafka after receiving messages. This value should be false when a PublishKafkaRecord processor is expected to commit the offsets using Exactly Once semantics, and should be reserved for dataflows that are designed to run within Stateless NiFi. See Processor's Usage / Additional Details for more information. Note that setting this value to false can lead to significant data duplication or potentially even data loss if the dataflow is not properly configured.\",\n-                                \"displayName\": \"Commit Offsets\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Commit Offsets\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"auto.offset.reset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"Broker URI\": {\n+                                \"description\": \"The URI(s) to use to connect to the MQTT broker (e.g., tcp://localhost:1883). The 'tcp', 'ssl', 'ws' and 'wss' schemes are supported. In order to use 'ssl', the SSL Context Service property must be set. When a comma-separated URI list is set (e.g., tcp://localhost:1883,tcp://localhost:1884), the processor will use a round-robin algorithm to connect to the brokers on connection failure.\",\n+                                \"displayName\": \"Broker URI\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"name\": \"Broker URI\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"group.id\": {\n-                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n-                                \"displayName\": \"Group ID\",\n+                            \"Client ID\": {\n+                                \"description\": \"MQTT client ID to use. If not set, a UUID will be generated.\",\n+                                \"displayName\": \"Client ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"group.id\",\n-                                \"required\": true,\n+                                \"name\": \"Client ID\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"header-name-regex\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"output-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n-                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n+                            \"Connection Timeout (seconds)\": {\n+                                \"defaultValue\": \"30\",\n+                                \"description\": \"Maximum time interval the client will wait for the network connection to the MQTT server to be established. The default timeout is 30 seconds. A value of 0 disables timeout processing meaning the client will wait until the network connection is made successfully or fails.\",\n+                                \"displayName\": \"Connection Timeout (seconds)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n+                                \"name\": \"Connection Timeout (seconds)\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"honor-transactions\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n+                            \"Group ID\": {\n+                                \"description\": \"MQTT consumer group ID to use. If group ID not set, client will connect as individual consumer.\",\n+                                \"displayName\": \"Group ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"honor-transactions\",\n-                                \"required\": true,\n+                                \"name\": \"Group ID\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"Keep Alive Interval (seconds)\": {\n+                                \"defaultValue\": \"60\",\n+                                \"description\": \"Defines the maximum time interval between messages sent or received. It enables the client to detect if the server is no longer available, without having to wait for the TCP/IP timeout. The client will ensure that at least one message travels across the network within each keep alive period. In the absence of a data-related message during the time period, the client sends a very small \\\"ping\\\" message, which the server will acknowledge. A value of 0 disables keepalive processing in the client.\",\n+                                \"displayName\": \"Keep Alive Interval (seconds)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"name\": \"Keep Alive Interval (seconds)\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"Last Will Message\": {\n+                                \"description\": \"The message to send as the client's Last Will.\",\n+                                \"displayName\": \"Last Will Message\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"name\": \"Last Will Message\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"key-attribute-encoding\": {\n+                            \"Last Will QoS Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n+                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n+                                        \"displayName\": \"0 - At most once\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n+                                        \"displayName\": \"1 - At least once\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n+                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n+                                        \"displayName\": \"2 - Exactly once\",\n+                                        \"value\": \"2\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"utf-8\",\n+                                \"defaultValue\": \"0\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"output-strategy\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n                                     }\n                                 ],\n-                                \"description\": \"If the <Separate By Key> property is set to true, FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"description\": \"QoS level to be used when publishing the Last Will Message.\",\n+                                \"displayName\": \"Last Will QoS Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n+                                \"name\": \"Last Will QoS Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-format\": {\n+                            \"Last Will Retain\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a UTF-8 string.\",\n-                                        \"displayName\": \"String\",\n-                                        \"value\": \"string\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a byte array.\",\n-                                        \"displayName\": \"Byte Array\",\n-                                        \"value\": \"byte-array\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a record.\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"record\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"byte-array\",\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"output-strategy\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies how to represent the Kafka Record's Key in the output\",\n-                                \"displayName\": \"Key Format\",\n+                                \"description\": \"Whether to retain the client's Last Will.\",\n+                                \"displayName\": \"Last Will Retain\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-format\",\n+                                \"name\": \"Last Will Retain\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-record-reader\": {\n+                            \"Last Will Topic\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"record\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Key Format\",\n-                                        \"propertyName\": \"key-format\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Reader to use for parsing the Kafka Record's key into a Record\",\n-                                \"displayName\": \"Key Record Reader\",\n+                                \"description\": \"The topic to send the client's Last Will to.\",\n+                                \"displayName\": \"Last Will Topic\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-record-reader\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Last Will Topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"dependencies\": [\n+                            \"MQTT Specification Version\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Commit Offsets\",\n-                                        \"propertyName\": \"Commit Offsets\"\n+                                        \"description\": \"Start with v3.1.1 and fallback to v3.1.0 if not supported by a broker\",\n+                                        \"displayName\": \"v3 AUTO\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v5.0\",\n+                                        \"value\": \"5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.1\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.0\",\n+                                        \"value\": \"3\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The MQTT specification version when connecting with the broker. See the allowable value descriptions for more details.\",\n+                                \"displayName\": \"MQTT Specification Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-uncommit-offset-wait\",\n-                                \"required\": false,\n+                                \"name\": \"MQTT Specification Version\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n+                            \"Max Queue Size\": {\n+                                \"description\": \"The MQTT messages are always being sent to subscribers on a topic regardless of how frequently the processor is scheduled to run. If the 'Run Schedule' is significantly behind the rate at which the messages are arriving to this processor, then a back up can occur in the internal queue of this processor. This property specifies the maximum number of messages this processor will hold in memory at one time in the internal queue. This data would be lost in case of a NiFi restart.\",\n+                                \"displayName\": \"Max Queue Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n-                                \"required\": false,\n+                                \"name\": \"Max Queue Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"Password\": {\n+                                \"description\": \"Password to use when connecting to the broker\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"output-strategy\": {\n+                            \"Quality of Service(QoS)\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Write only the Kafka Record value to the FlowFile record.\",\n-                                        \"displayName\": \"Use Content as Value\",\n-                                        \"value\": \"USE_VALUE\"\n+                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n+                                        \"displayName\": \"0 - At most once\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the FlowFile record. (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Wrapper\",\n-                                        \"value\": \"USE_WRAPPER\"\n+                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n+                                        \"displayName\": \"1 - At least once\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n+                                        \"displayName\": \"2 - Exactly once\",\n+                                        \"value\": \"2\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"description\": \"The format used to output the Kafka record into a FlowFile record.\",\n-                                \"displayName\": \"Output Strategy\",\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The Quality of Service (QoS) to receive the message with. Accepts values '0', '1' or '2'; '0' for 'at most once', '1' for 'at least once', '2' for 'exactly once'.\",\n+                                \"displayName\": \"Quality of Service (QoS)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"output-strategy\",\n+                                \"name\": \"Quality of Service(QoS)\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Value Record Reader\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Value Writer\",\n+                            \"Session Expiry Interval\": {\n+                                \"defaultValue\": \"24 hrs\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"5\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n+                                        \"propertyName\": \"MQTT Specification Version\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"false\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Session state\",\n+                                        \"propertyName\": \"Session state\"\n+                                    }\n+                                ],\n+                                \"description\": \"After this interval the broker will expire the client and clear the session state.\",\n+                                \"displayName\": \"Session Expiry Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"name\": \"Session Expiry Interval\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n+                            \"Session state\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n+                                        \"description\": \"Client and Server discard any previous session and start a new one. This session lasts as long as the network connection. State data associated with this session is not reused in any subsequent session\",\n+                                        \"displayName\": \"Clean Session\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n+                                        \"description\": \"Server resumes communications with the client based on state from the current session (as identified by the ClientID). The client and server store the session after the client and server are disconnected. After the disconnection of a session that was not a clean session, the server stores further QoS 1 and QoS 2 messages that match any subscriptions that the client had at the time of disconnection as part of the session state\",\n+                                        \"displayName\": \"Resume Session\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to start a fresh or resume previous flows. See the allowable value descriptions for more details.\",\n+                                \"displayName\": \"Session state\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"name\": \"Session state\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n+                            \"Topic Filter\": {\n+                                \"description\": \"The MQTT topic filter to designate the topics to subscribe to.\",\n+                                \"displayName\": \"Topic Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n+                                \"name\": \"Topic Filter\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to use when connecting to the broker\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"sasl.token.auth\": {\n+                            \"add-attributes-as-fields\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n+                                \"defaultValue\": \"true\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n                                     }\n                                 ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n+                                \"description\": \"If setting this property to true, default fields are going to be added in each record: _topic, _qos, _isDuplicate, _isRetained.\",\n+                                \"displayName\": \"Add attributes as fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n+                                \"name\": \"add-attributes-as-fields\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n+                            \"message-demarcator\": {\n+                                \"description\": \"With this property, you have an option to output FlowFiles which contains multiple messages. This property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple messages. This is an optional property ; if not provided, and if not defining a Record Reader/Writer, each message received will result in a single FlowFile. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS.\",\n+                                \"displayName\": \"Message Demarcator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n+                                \"name\": \"message-demarcator\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"separate-by-key\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, two Records will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n-                                \"displayName\": \"Separate By Key\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for parsing received MQTT Messages into Records.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"separate-by-key\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records before writing them to a FlowFile.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topic Name(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"topic_type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Name Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"topic_type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n+                            \"org.apache.nifi.processors.mqtt.PublishMQTT\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles received from Kafka.  Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If a message cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             },\n                             {\n-                                \"description\": \"If a message from Kafka cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n+                                \"description\": \"The MQTT message output\",\n+                                \"name\": \"Message\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The 'Max Queue Size' specifies the maximum number of messages that can be hold in memory by NiFi by a single instance of this processor. A high value for this property could represent a lot of data being stored in memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Record\",\n-                            \"Topic\",\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\"\n+                            \"IOT\",\n+                            \"MQTT\",\n+                            \"consume\",\n+                            \"listen\",\n+                            \"subscribe\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.6 Consumer API. The complementary NiFi processor for sending messages is PublishKafkaRecord_2_6. Please note that, at this time, the Processor assumes that all records that are retrieved from a given partition have the same schema. If any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n+                        \"type\": \"org.apache.nifi.processors.mqtt.ConsumeMQTT\",\n+                        \"typeDescription\": \"Subscribes to a topic and receives messages from an MQTT broker\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n                                 \"description\": \"The number of records received\",\n                                 \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"MQTT broker that was the message source\",\n+                                \"name\": \"mqtt.broker\"\n                             },\n                             {\n-                                \"description\": \"The partition of the topic the records are from\",\n-                                \"name\": \"kafka.partition\"\n+                                \"description\": \"MQTT topic on which message was received\",\n+                                \"name\": \"mqtt.topic\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n+                                \"description\": \"The quality of service for this message.\",\n+                                \"name\": \"mqtt.qos\"\n                             },\n                             {\n-                                \"description\": \"The topic records are from\",\n-                                \"name\": \"kafka.topic\"\n+                                \"description\": \"Whether or not this message might be a duplicate of one which has already been received.\",\n+                                \"name\": \"mqtt.isDuplicate\"\n+                            },\n+                            {\n+                                \"description\": \"Whether or not this message was from a current publisher, or was \\\"retained\\\" by the server as the last message published on the topic.\",\n+                                \"name\": \"mqtt.isRetained\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mqtt-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -73208,1090 +71373,871 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Commit Offsets\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not this Processor should commit the offsets to Kafka after receiving messages. Typically, we want this value set to true so that messages that are received are not duplicated. However, in certain scenarios, we may want to avoid committing the offsets, that the data can be processed and later acknowledged by PublishKafkaRecord in order to provide Exactly Once semantics. See Processor's Usage / Additional Details for more information.\",\n-                                \"displayName\": \"Commit Offsets\",\n+                            \"Broker URI\": {\n+                                \"description\": \"The URI(s) to use to connect to the MQTT broker (e.g., tcp://localhost:1883). The 'tcp', 'ssl', 'ws' and 'wss' schemes are supported. In order to use 'ssl', the SSL Context Service property must be set. When a comma-separated URI list is set (e.g., tcp://localhost:1883,tcp://localhost:1884), the processor will use a round-robin algorithm to connect to the brokers on connection failure.\",\n+                                \"displayName\": \"Broker URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Broker URI\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client ID\": {\n+                                \"description\": \"MQTT client ID to use. If not set, a UUID will be generated.\",\n+                                \"displayName\": \"Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Client ID\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout (seconds)\": {\n+                                \"defaultValue\": \"30\",\n+                                \"description\": \"Maximum time interval the client will wait for the network connection to the MQTT server to be established. The default timeout is 30 seconds. A value of 0 disables timeout processing meaning the client will wait until the network connection is made successfully or fails.\",\n+                                \"displayName\": \"Connection Timeout (seconds)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Commit Offsets\",\n+                                \"name\": \"Connection Timeout (seconds)\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Keep Alive Interval (seconds)\": {\n+                                \"defaultValue\": \"60\",\n+                                \"description\": \"Defines the maximum time interval between messages sent or received. It enables the client to detect if the server is no longer available, without having to wait for the TCP/IP timeout. The client will ensure that at least one message travels across the network within each keep alive period. In the absence of a data-related message during the time period, the client sends a very small \\\"ping\\\" message, which the server will acknowledge. A value of 0 disables keepalive processing in the client.\",\n+                                \"displayName\": \"Keep Alive Interval (seconds)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n+                                \"name\": \"Keep Alive Interval (seconds)\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"auto.offset.reset\": {\n+                            \"Last Will Message\": {\n+                                \"description\": \"The message to send as the client's Last Will.\",\n+                                \"displayName\": \"Last Will Message\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Last Will Message\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Last Will QoS Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n+                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n+                                        \"displayName\": \"0 - At most once\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n+                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n+                                        \"displayName\": \"1 - At least once\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n+                                        \"displayName\": \"2 - Exactly once\",\n+                                        \"value\": \"2\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws.profile.name\": {\n+                                \"defaultValue\": \"0\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n                                     }\n                                 ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"group.id\": {\n-                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n-                                \"displayName\": \"Group ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"group.id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"header-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n-                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n+                                \"description\": \"QoS level to be used when publishing the Last Will Message.\",\n+                                \"displayName\": \"Last Will QoS Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n-                                \"required\": false,\n+                                \"name\": \"Last Will QoS Level\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"honor-transactions\": {\n+                            \"Last Will Retain\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether to retain the client's Last Will.\",\n+                                \"displayName\": \"Last Will Retain\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"honor-transactions\",\n+                                \"name\": \"Last Will Retain\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"Last Will Topic\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n+                                    }\n+                                ],\n+                                \"description\": \"The topic to send the client's Last Will to.\",\n+                                \"displayName\": \"Last Will Topic\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Last Will Topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"key-attribute-encoding\": {\n+                            \"MQTT Specification Version\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n+                                        \"description\": \"Start with v3.1.1 and fallback to v3.1.0 if not supported by a broker\",\n+                                        \"displayName\": \"v3 AUTO\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v5.0\",\n+                                        \"value\": \"5\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.1\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.0\",\n+                                        \"value\": \"3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The MQTT specification version when connecting with the broker. See the allowable value descriptions for more details.\",\n+                                \"displayName\": \"MQTT Specification Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n+                                \"name\": \"MQTT Specification Version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Commit Offsets\",\n-                                        \"propertyName\": \"Commit Offsets\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n+                            \"Password\": {\n+                                \"description\": \"Password to use when connecting to the broker\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-uncommit-offset-wait\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n+                            \"Quality of Service(QoS)\": {\n+                                \"description\": \"The Quality of Service (QoS) to send the message with. Accepts three values '0', '1' and '2'; '0' for 'at most once', '1' for 'at least once', '2' for 'exactly once'. Expression language is allowed in order to support publishing messages with different QoS but the end value of the property must be either '0', '1' or '2'. \",\n+                                \"displayName\": \"Quality of Service (QoS)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Quality of Service(QoS)\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-demarcator\": {\n-                                \"description\": \"Since KafkaConsumer receives messages in batches, you have an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n-                                \"displayName\": \"Message Demarcator\",\n+                            \"Retain Message\": {\n+                                \"description\": \"Whether or not the retain flag should be set on the MQTT message.\",\n+                                \"displayName\": \"Retain Message\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"message-demarcator\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Retain Message\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n+                            \"Session Expiry Interval\": {\n+                                \"defaultValue\": \"24 hrs\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n+                                        \"dependentValues\": [\n+                                            \"5\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n+                                        \"propertyName\": \"MQTT Specification Version\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n                                         \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n+                                            \"false\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n+                                        \"propertyDisplayName\": \"Session state\",\n+                                        \"propertyName\": \"Session state\"\n                                     }\n                                 ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n+                                \"description\": \"After this interval the broker will expire the client and clear the session state.\",\n+                                \"displayName\": \"Session Expiry Interval\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Session Expiry Interval\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"sasl.token.auth\": {\n+                            \"Session state\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n+                                        \"description\": \"Client and Server discard any previous session and start a new one. This session lasts as long as the network connection. State data associated with this session is not reused in any subsequent session\",\n+                                        \"displayName\": \"Clean Session\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n+                                        \"description\": \"Server resumes communications with the client based on state from the current session (as identified by the ClientID). The client and server store the session after the client and server are disconnected. After the disconnection of a session that was not a clean session, the server stores further QoS 1 and QoS 2 messages that match any subscriptions that the client had at the time of disconnection as part of the session state\",\n+                                        \"displayName\": \"Resume Session\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to start a fresh or resume previous flows. See the allowable value descriptions for more details.\",\n+                                \"displayName\": \"Session state\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n+                                \"name\": \"Session state\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                            \"Topic\": {\n+                                \"description\": \"The topic to publish the message to.\",\n+                                \"displayName\": \"Topic\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to use when connecting to the broker\",\n                                 \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                            \"message-demarcator\": {\n+                                \"description\": \"With this property, you have an option to publish multiple messages from a single FlowFile. This property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart the FlowFile content. This is an optional property ; if not provided, and if not defining a Record Reader/Writer, each FlowFile will be published as a single message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS.\",\n+                                \"displayName\": \"Message Demarcator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"separate-by-key\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, and the <Message Demarcator> property is set, two messages will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n-                                \"displayName\": \"Separate By Key\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for parsing the incoming FlowFile into Records.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"separate-by-key\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records before publishing them as an MQTT Message.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.mqtt.ConsumeMQTT\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topic Name(s)\",\n+                            {\n+                                \"description\": \"FlowFiles that failed to send to the destination are transferred to this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"IOT\",\n+                            \"MQTT\",\n+                            \"publish\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mqtt.PublishMQTT\",\n+                        \"typeDescription\": \"Publishes a message to an MQTT topic\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-box-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-box-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"box-client-service\": {\n+                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n+                                \"displayName\": \"Box Client Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"box-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"topic_type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Name Format\",\n+                            \"box-file-id\": {\n+                                \"defaultValue\": \"${box.id}\",\n+                                \"description\": \"The ID of the File to fetch\",\n+                                \"displayName\": \"File ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"topic_type\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"box-file-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"box.id\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.box.ListBoxFile\",\n+                            \"org.apache.nifi.processors.box.PutBoxFile\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles received from Kafka. Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n+                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Topic\"\n+                            \"box\",\n+                            \"fetch\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.6 Consumer API. The complementary NiFi processor for sending messages is PublishKafka_2_6.\",\n+                        \"type\": \"org.apache.nifi.processors.box.FetchBoxFile\",\n+                        \"typeDescription\": \"Fetches files from a Box Folder. Designed to be used in tandem with ListBoxFile.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of messages written if more than one\",\n-                                \"name\": \"kafka.count\"\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"box.id\"\n                             },\n                             {\n-                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n-                                \"name\": \"kafka.key\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The offset of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.offset\"\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"box.size\"\n                             },\n                             {\n-                                \"description\": \"The partition of the topic the message or message bundle is from\",\n-                                \"name\": \"kafka.partition\"\n+                                \"description\": \"The last modified time of the file\",\n+                                \"name\": \"box.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The topic the message or message bundle is from\",\n-                                \"name\": \"kafka.topic\"\n+                                \"description\": \"The error code returned by Box\",\n+                                \"name\": \"error.code\"\n                             },\n                             {\n-                                \"description\": \"Set to true if the consumed message is a tombstone message\",\n-                                \"name\": \"kafka.tombstone\"\n+                                \"description\": \"The error message returned by Box\",\n+                                \"name\": \"error.message\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"artifact\": \"nifi-box-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Failure Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n-                                        \"displayName\": \"Route to Failure\",\n-                                        \"value\": \"Route to Failure\"\n-                                    },\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n-                                        \"displayName\": \"Rollback\",\n-                                        \"value\": \"Rollback\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Route to Failure\",\n-                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n-                                \"displayName\": \"Failure Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Failure Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Record Metadata Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The Kafka Record's Topic will be determined using the 'Topic Name' processor property. The partition will be determined using the 'Partition' and 'Partitioner class' properties.\",\n-                                        \"displayName\": \"Use Configured Values\",\n-                                        \"value\": \"Use Configured Values\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Kafka Record's Topic and Partition will be determined by looking at the /metadata/topic and /metadata/partition fields of the Record, respectively. If these fields are invalid or not present, the Topic Name and Partition/Partitioner class properties of the processor will be considered.\",\n-                                        \"displayName\": \"Metadata From Record\",\n-                                        \"value\": \"Metadata From Record\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Use Configured Values\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether the Record's metadata (topic and partition) should come from the Record's metadata field or if it should come from the configured Topic Name and Partition / Partitioner class properties\",\n-                                \"displayName\": \"Record Metadata Strategy\",\n+                            \"box-client-service\": {\n+                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n+                                \"displayName\": \"Box Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Metadata Strategy\",\n+                                \"name\": \"box-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n+                            \"box-folder-id\": {\n+                                \"description\": \"The ID of the folder from which to pull list of files.\",\n+                                \"displayName\": \"Folder ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"box-folder-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n                                         \"value\": \"all\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"all\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"attribute-name-regex\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"USE_VALUE\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"aws.profile.name\": {\n+                            \"et-state-cache\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"compression.type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"name\": \"et-state-cache\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-key-field\": {\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"USE_VALUE\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n-                                \"displayName\": \"Message Key Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"message-key-field\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to. How this value is interpreted is dictated by the <Partitioner class> property.\",\n-                                \"displayName\": \"Partition\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioner.class\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"The default partitioning strategy will choose the sticky partition that changes when the batch is full (See KIP-480 for details about sticky partitioning).\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as a RecordPath that will be evaluated against each Record to determine which partition the Record will go to. All Records that have the same value for the given RecordPath will go to the same Partition.\",\n-                                        \"displayName\": \"RecordPath Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RecordPathPartitioner\"\n+                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n+                                        \"displayName\": \"Time Window\",\n+                                        \"value\": \"time-window\"\n                                     },\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n-                                \"displayName\": \"Partitioner class\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\n-                                \"required\": false,\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"publish-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Write only the FlowFile content to the Kafka Record value.\",\n-                                        \"displayName\": \"Use Content as Record Value\",\n-                                        \"value\": \"USE_VALUE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the Kafka Record value.  (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Wrapper\",\n-                                        \"value\": \"USE_WRAPPER\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"description\": \"The format used to publish the incoming FlowFile record to Kafka.\",\n-                                \"displayName\": \"Publish Strategy\",\n+                            \"min-age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age a file must be in order to be considered; any files younger than this will be ignored.\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"publish-strategy\",\n+                                \"name\": \"min-age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-key-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Key Writer to use for outgoing FlowFiles\",\n-                                \"displayName\": \"Record Key Writer\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-key-writer\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"recursive-search\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When 'true', will include list of files from sub-folders. Otherwise, will return only files that are within the folder defined by the 'Folder ID' property.\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"recursive-search\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.box.FetchBoxFile\",\n+                            \"org.apache.nifi.processors.box.PutBoxFile\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"box\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.box.ListBoxFile\",\n+                        \"typeDescription\": \"Lists files in a Box folder. Each listed file may result in one FlowFile, the metadata being written as FlowFile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single FlowFile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"box.id\"\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Writer\",\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"box.size\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time of the file\",\n+                                \"name\": \"box.timestamp\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-box-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"box-client-service\": {\n+                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n+                                \"displayName\": \"Box Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"box-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-box-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"box-folder-id\": {\n+                                \"description\": \"The ID of the folder where the file is uploaded. Please see Additional Details to obtain Folder ID.\",\n+                                \"displayName\": \"Folder ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"box-folder-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n+                            \"chunked-upload-threshold\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks. Chunked upload is allowed for files larger than 20 MB. It is recommended to use chunked upload for files exceeding 50 MB.\",\n+                                \"displayName\": \"Chunked Upload Threshold\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"chunked-upload-threshold\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n+                            \"conflict-resolution-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n+                                        \"description\": \"Handle file conflict as failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n+                                        \"description\": \"Ignore conflict, do not change the original file.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n+                                        \"description\": \"Replace existing file in case of conflict.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Box folder.\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"name\": \"conflict-resolution-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"sasl.token.auth\": {\n+                            \"create-folder\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n@@ -74299,845 +72245,717 @@\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"propertyDisplayName\": \"Subfolder Name\",\n+                                        \"propertyName\": \"subfolder-name\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"description\": \"Specifies whether to check if the subfolder exists and to automatically create it if it does not. Permission to list folders is required. \",\n+                                \"displayName\": \"Create Subfolder\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"create-folder\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The name of the file to upload to the specified Box folder.\",\n+                                \"displayName\": \"Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"topic\",\n+                                \"name\": \"file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"transactional-id-prefix\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Use Transactions\",\n-                                        \"propertyName\": \"use-transactions\"\n-                                    }\n-                                ],\n-                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n-                                \"displayName\": \"Transactional Id Prefix\",\n+                            \"subfolder-name\": {\n+                                \"description\": \"The name (path) of the subfolder where files are uploaded. The subfolder name is relative to the folder specified by 'Folder ID'. Example: subFolder, subFolder1/subfolder2\",\n+                                \"displayName\": \"Subfolder Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"transactional-id-prefix\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"subfolder-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"use-transactions\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n-                                \"displayName\": \"Use Transactions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-transactions\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Uses the FlowFile's filename as the filename for the Box object.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n+                            \"org.apache.nifi.processors.box.FetchBoxFile\",\n+                            \"org.apache.nifi.processors.box.ListBoxFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n+                                \"description\": \"Files that have been successfully written to Box are transferred to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"description\": \"Files that could not be written to Box for some reason are transferred to this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Record\",\n-                            \"Send\",\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\",\n-                            \"logs\"\n+                            \"box\",\n+                            \"put\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as individual records to Apache Kafka using the Kafka 2.6 Producer API. The contents of the FlowFile are expected to be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafkaRecord_2_6.\",\n+                        \"type\": \"org.apache.nifi.processors.box.PutBoxFile\",\n+                        \"typeDescription\": \"Puts content to a Box folder.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n-                                \"name\": \"msg.count\"\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"box.id\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"box.size\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time of the file\",\n+                                \"name\": \"box.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The error code returned by Box\",\n+                                \"name\": \"error.code\"\n+                            },\n+                            {\n+                                \"description\": \"The error message returned by Box\",\n+                                \"name\": \"error.message\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-mongodb-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Failure Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n-                                        \"displayName\": \"Route to Failure\",\n-                                        \"value\": \"Route to Failure\"\n-                                    },\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n-                                        \"displayName\": \"Rollback\",\n-                                        \"value\": \"Rollback\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Route to Failure\",\n-                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n-                                \"displayName\": \"Failure Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Failure Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"acks\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attribute-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n+                                \"name\": \"Mongo Database Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"Mongo URI\": {\n+                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n+                                \"displayName\": \"Mongo URI\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n+                                \"name\": \"Mongo URI\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n+                            \"Write Concern\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n+                                        \"displayName\": \"ACKNOWLEDGED\",\n+                                        \"value\": \"ACKNOWLEDGED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"displayName\": \"UNACKNOWLEDGED\",\n+                                        \"value\": \"UNACKNOWLEDGED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"displayName\": \"FSYNCED\",\n+                                        \"value\": \"FSYNCED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n+                                        \"displayName\": \"JOURNALED\",\n+                                        \"value\": \"JOURNALED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n+                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MAJORITY\",\n+                                        \"value\": \"MAJORITY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W1\",\n+                                        \"value\": \"W1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W2\",\n+                                        \"value\": \"W2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W3\",\n+                                        \"value\": \"W3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"defaultValue\": \"ACKNOWLEDGED\",\n+                                \"description\": \"The write concern to use\",\n+                                \"displayName\": \"Write Concern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n+                                \"name\": \"Write Concern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kafka-key\": {\n-                                \"description\": \"The Key to use for the Message. If not specified, the flow file attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n-                                \"displayName\": \"Kafka Key\",\n+                            \"delete-mongo-delete-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Delete only the first document that matches the query.\",\n+                                        \"displayName\": \"Delete One\",\n+                                        \"value\": \"one\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Delete every document that matches the query.\",\n+                                        \"displayName\": \"Delete Many\",\n+                                        \"value\": \"many\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Read the 'mongodb.delete.mode attribute and use that mode. Acceptable values are 'many' and 'one.'\",\n+                                        \"displayName\": \"Use 'mongodb.delete.mode' attribute\",\n+                                        \"value\": \"attr\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"one\",\n+                                \"description\": \"Choose between deleting one document by query or many documents by query.\",\n+                                \"displayName\": \"Delete Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"kafka-key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"delete-mongo-delete-mode\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"delete-mongo-fail-on-no-delete\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Fail when no documents are deleted.\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Do not fail when nothing is deleted.\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines whether to send the flowfile to the success or failure relationship if nothing is successfully deleted.\",\n+                                \"displayName\": \"Fail When Nothing Is Deleted\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"name\": \"delete-mongo-fail-on-no-delete\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"name\": \"mongo-client-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"key-attribute-encoding\": {\n+                            \"ssl-client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data that is encoded using hexadecimal characters with uppercase letters.\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-client-auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Configurable parameter for controlling delete mode on a per-flowfile basis. The process must be configured to use this option. Acceptable values are 'one' and 'many.'\",\n+                                \"name\": \"mongodb.delete.mode\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n-                            \"message-demarcator\": {\n-                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n-                                \"displayName\": \"Message Demarcator\",\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"delete\",\n+                            \"mongo\",\n+                            \"mongodb\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mongodb.DeleteMongo\",\n+                        \"typeDescription\": \"Executes a delete query against a MongoDB collection. The query is provided in the body of the flowfile and the user can select whether it will delete one or many documents that match it.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Batch Size\": {\n+                                \"description\": \"The number of elements to be returned from the server in one batch\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"message-demarcator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to.\",\n-                                \"displayName\": \"Partition\",\n+                            \"Limit\": {\n+                                \"description\": \"The maximum number of elements to return\",\n+                                \"displayName\": \"Limit\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n+                                \"name\": \"Limit\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioner.class\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The default partitioning strategy will choose the sticky partition that changes when the batch is full (See KIP-480 for details about sticky partitioning).\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n-                                \"displayName\": \"Partitioner class\",\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"Mongo URI\": {\n+                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n+                                \"displayName\": \"Mongo URI\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n+                                \"name\": \"Mongo URI\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n+                            \"Projection\": {\n+                                \"description\": \"The fields to be returned from the documents in the result set; must be a valid BSON document\",\n+                                \"displayName\": \"Projection\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Projection\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                            \"Query\": {\n+                                \"description\": \"The selection criteria to do the lookup. If the field is left blank, it will look for input from an incoming connection from another processor to provide the query as a valid JSON document inside of the FlowFile's body. If this field is left blank and a timer is enabled instead of an incoming connection, that will result in a full collection fetch using a \\\"{}\\\" query.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Query\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n+                            \"Sort\": {\n+                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n+                                \"displayName\": \"Sort\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Sort\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"sasl.token.auth\": {\n+                            \"get-mongo-send-empty\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n+                                \"description\": \"If a query executes successfully, but returns no results, send an empty JSON document signifying no result.\",\n+                                \"displayName\": \"Send Empty Result\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n+                                \"name\": \"get-mongo-send-empty\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n+                            \"json-type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n+                                        \"description\": \"Use MongoDB's \\\"extended JSON\\\". This is the JSON generated with toJson() on a MongoDB Document from the Java driver\",\n+                                        \"displayName\": \"Extended JSON\",\n+                                        \"value\": \"Extended\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generate a JSON document that conforms to typical JSON conventions instead of Mongo-specific conventions.\",\n+                                        \"displayName\": \"Standard JSON\",\n+                                        \"value\": \"Standard\"\n                                     }\n                                 ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n+                                \"defaultValue\": \"Extended\",\n+                                \"description\": \"By default, MongoDB's Java driver returns \\\"extended JSON\\\". Some of the features of this variant of JSON may cause problems for other JSON parsers that expect only standard JSON types and conventions. This configuration setting  controls whether to use extended JSON or provide a clean view that conforms to standard JSON.\",\n+                                \"displayName\": \"JSON Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"json-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"mongo-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-charset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mongo-client-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"mongo-date-format\": {\n+                                \"defaultValue\": \"yyyy-MM-dd'T'HH:mm:ss'Z'\",\n+                                \"description\": \"The date format string to use for formatting Date fields that are returned from Mongo. It is only applied when the JSON output format is set to Standard JSON. Full documentation for format characters can be found here: https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html\",\n+                                \"displayName\": \"Date Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-date-format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"mongo-query-attribute\": {\n+                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n+                                \"displayName\": \"Query Output Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-query-attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"results-per-flowfile\": {\n+                                \"description\": \"How many results to put into a FlowFile at once. The whole body will be treated as a JSON array of results.\",\n+                                \"displayName\": \"Results Per FlowFile\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"results-per-flowfile\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl-client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-client-auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"transactional-id-prefix\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Use Transactions\",\n-                                        \"propertyName\": \"use-transactions\"\n-                                    }\n-                                ],\n-                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n-                                \"displayName\": \"Transactional Id Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"transactional-id-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"use-transactions\": {\n+                            \"use-pretty-printing\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n+                                        \"displayName\": \"True\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n+                                        \"displayName\": \"False\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n-                                \"displayName\": \"Use Transactions\",\n+                                \"description\": \"Choose whether or not to pretty print the JSON from the results of the query. Choosing 'True' can greatly increase the space requirements on disk depending on the complexity of the JSON document\",\n+                                \"displayName\": \"Pretty Print Results JSON\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-transactions\",\n+                                \"name\": \"use-pretty-printing\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If this attribute is set to 'true', if the processor is not configured with a demarcator and if the FlowFile's content is null, then a tombstone message with zero bytes will be sent to Kafka.\",\n-                                \"name\": \"kafka.tombstone\"\n-                            }\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n+                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"All input FlowFiles that are part of a successful query execution go here.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Send\"\n+                            \"get\",\n+                            \"mongodb\",\n+                            \"read\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as a message to Apache Kafka using the Kafka 2.6 Producer API.The messages to send may be individual FlowFiles or may be delimited, using a user-specified delimiter, such as a new-line. The complementary NiFi processor for fetching messages is ConsumeKafka_2_6.\",\n+                        \"type\": \"org.apache.nifi.processors.mongodb.GetMongo\",\n+                        \"typeDescription\": \"Creates FlowFiles from documents in MongoDB loaded by a user-specified query.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success. If the <Message Demarcator> Property is not set, this will always be 1, but if the Property is set, it may be greater than 1.\",\n-                                \"name\": \"msg.count\"\n+                                \"description\": \"The database where the results came from.\",\n+                                \"name\": \"mongo.database.name\"\n+                            },\n+                            {\n+                                \"description\": \"The collection where the results came from.\",\n+                                \"name\": \"mongo.collection.name\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-smb-client-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-server-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-spring-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-spring-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -75145,1449 +72963,1220 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"Alternative event-handling solutions should be used\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Application Context class path\": {\n-                                \"description\": \"Path to the directory with resources (i.e., JARs, configuration files etc.) required to be on the classpath of the ApplicationContext.\",\n-                                \"displayName\": \"Application Context class path\",\n+                            \"Batch Size\": {\n+                                \"description\": \"The number of elements to be returned from the server in one batch\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application Context class path\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Limit\": {\n+                                \"description\": \"The maximum number of elements to return\",\n+                                \"displayName\": \"Limit\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Limit\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Application Context config path\": {\n-                                \"description\": \"The path to the Spring Application Context configuration file relative to the classpath\",\n-                                \"displayName\": \"Application Context config path\",\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application Context config path\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Receive Timeout\": {\n-                                \"description\": \"Timeout for receiving date from Spring context. Defaults to 0.\",\n-                                \"displayName\": \"Receive Timeout\",\n+                            \"Projection\": {\n+                                \"description\": \"The fields to be returned from the documents in the result set; must be a valid BSON document\",\n+                                \"displayName\": \"Projection\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Projection\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Send Timeout\": {\n-                                \"description\": \"Timeout for sending data to Spring Application Context. Defaults to 0.\",\n-                                \"displayName\": \"Send Timeout\",\n+                            \"Query\": {\n+                                \"description\": \"The selection criteria to do the lookup. If the field is left blank, it will look for input from an incoming connection from another processor to provide the query as a valid JSON document inside of the FlowFile's body. If this field is left blank and a timer is enabled instead of an incoming connection, that will result in a full collection fetch using a \\\"{}\\\" query.\",\n+                                \"displayName\": \"Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Sort\": {\n+                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n+                                \"displayName\": \"Sort\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Sort\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"get-mongo-record-writer-factory\": {\n+                                \"description\": \"The record writer to use to write the result sets.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Timeout\",\n+                                \"name\": \"get-mongo-record-writer-factory\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mongo-client-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"mongo-query-attribute\": {\n+                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n+                                \"displayName\": \"Query Output Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"mongodb-schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"description\": \"The name of the schema in the configured schema registry to use for the query results.\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongodb-schema-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are successfully received from Spring Application Context are routed to this relationship\",\n+                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot be sent to Spring Application Context are routed to this relationship\",\n+                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"All input FlowFiles that are part of a successful query execution go here.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Get\",\n-                            \"Integration\",\n-                            \"Message\",\n-                            \"Put\",\n-                            \"Spring\"\n+                            \"fetch\",\n+                            \"get\",\n+                            \"json\",\n+                            \"mongo\",\n+                            \"mongodb\",\n+                            \"record\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.spring.SpringContextProcessor\",\n-                        \"typeDescription\": \"A Processor that supports sending and receiving data from application defined in Spring Application Context via predefined in/out MessageChannels.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jms-cf-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-zendesk-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mongodb.GetMongoRecord\",\n+                        \"typeDescription\": \"A record-based version of GetMongo that uses the Record writers to write the MongoDB result set.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The database where the results came from.\",\n+                                \"name\": \"mongo.database.name\"\n+                            },\n+                            {\n+                                \"description\": \"The collection where the results came from.\",\n+                                \"name\": \"mongo.collection.name\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-zendesk-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"20 sec\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"web-client-service-provider\": {\n-                                \"description\": \"Controller service for HTTP client operations.\",\n-                                \"displayName\": \"Web Client Service Provider\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the data is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"zendesk-authentication-type-name\": {\n+                            \"Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Password of Zendesk login user.\",\n-                                        \"displayName\": \"Password\",\n-                                        \"value\": \"password\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"insert\",\n+                                        \"value\": \"insert\"\n                                     },\n                                     {\n-                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n-                                        \"displayName\": \"Token\",\n-                                        \"value\": \"token\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"update\",\n+                                        \"value\": \"update\"\n                                     }\n                                 ],\n-                                \"description\": \"Type of authentication to Zendesk API.\",\n-                                \"displayName\": \"Authentication Type\",\n+                                \"defaultValue\": \"insert\",\n+                                \"description\": \"Indicates whether the processor should insert or update content\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-authentication-type-name\",\n+                                \"name\": \"Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-authentication-value-name\": {\n-                                \"description\": \"Password or authentication token for Zendesk login user.\",\n-                                \"displayName\": \"Authentication Credential\",\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-authentication-value-name\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"zendesk-export-method\": {\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Mongo URI\": {\n+                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n+                                \"displayName\": \"Mongo URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Mongo URI\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Update Query Key\": {\n+                                \"description\": \"Key name used to build the update query criteria; this property is valid only when using update mode, otherwise it is ignored. Example: _id\",\n+                                \"displayName\": \"Update Query Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Update Query Key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Upsert\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"In cursor-based incremental exports, each page of results includes an \\\"after\\\" cursor pointer to use as the starting cursor for the next page of results.\",\n-                                        \"displayName\": \"Cursor Based\",\n-                                        \"value\": \"cursor\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"In time-based incremental exports, each page of results includes an end time to use as the start time for the next page of results.\",\n-                                        \"displayName\": \"Time Based\",\n-                                        \"value\": \"time\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Method for incremental export.\",\n-                                \"displayName\": \"Export Method\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"When true, inserts a document if no document matches the update query criteria; this property is valid only when using update mode, otherwise it is ignored\",\n+                                \"displayName\": \"Upsert\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-export-method\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"zendesk-query-start-timestamp\": {\n-                                \"description\": \"Initial timestamp to query Zendesk API from in Unix timestamp seconds format.\",\n-                                \"displayName\": \"Query Start Timestamp\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-query-start-timestamp\",\n+                                \"name\": \"Upsert\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-resource\": {\n+                            \"Write Concern\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Tickets are the means through which end users (customers) communicate with agents in Zendesk Support.\",\n-                                        \"displayName\": \"Tickets\",\n-                                        \"value\": \"/api/v2/incremental/tickets\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ACKNOWLEDGED\",\n+                                        \"value\": \"ACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"Stream of changes that occurred on tickets. Each event is tied to an update on a ticket and contains all the fields that were updated in that change.\",\n-                                        \"displayName\": \"Ticket Events\",\n-                                        \"value\": \"/api/v2/incremental/ticket_events\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UNACKNOWLEDGED\",\n+                                        \"value\": \"UNACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"Ticket metric events API can be used to track reply times, agent work times, and requester wait times.\",\n-                                        \"displayName\": \"Ticket Metric Events\",\n-                                        \"value\": \"/api/v2/incremental/ticket_metric_events\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FSYNCED\",\n+                                        \"value\": \"FSYNCED\"\n                                     },\n                                     {\n-                                        \"description\": \"Zendesk Support has three types of users: end users (customers), agents, and administrators.\",\n-                                        \"displayName\": \"Users\",\n-                                        \"value\": \"/api/v2/incremental/users\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JOURNALED\",\n+                                        \"value\": \"JOURNALED\"\n                                     },\n                                     {\n-                                        \"description\": \"Just as agents can be segmented into groups in Zendesk Support, customers (end-users) can be segmented into organizations.\",\n-                                        \"displayName\": \"Organizations\",\n-                                        \"value\": \"/api/v2/incremental/organizations\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n+                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"Articles are content items such as help topics or tech notes contained in sections.\",\n-                                        \"displayName\": \"Articles\",\n-                                        \"value\": \"/api/v2/help_center/incremental/articles\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MAJORITY\",\n+                                        \"value\": \"MAJORITY\"\n                                     },\n                                     {\n-                                        \"description\": \"When a recipient responds to an NPS survey, their rating, comment, and last survey date are captured.\",\n-                                        \"displayName\": \"NPS - Responses\",\n-                                        \"value\": \"/api/v2/nps/incremental/responses\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W1\",\n+                                        \"value\": \"W1\"\n                                     },\n                                     {\n-                                        \"description\": \"Every NPS survey is delivered to one or multiple recipients. For most businesses that use Zendesk Support, the recipients are customers. Agents and admins will never receive surveys.\",\n-                                        \"displayName\": \"NPS - Recipients\",\n-                                        \"value\": \"/api/v2/nps/incremental/recipients\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W2\",\n+                                        \"value\": \"W2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W3\",\n+                                        \"value\": \"W3\"\n                                     }\n                                 ],\n-                                \"description\": \"The particular Zendesk resource which is meant to be exported.\",\n-                                \"displayName\": \"Resource\",\n+                                \"defaultValue\": \"ACKNOWLEDGED\",\n+                                \"description\": \"The write concern to use\",\n+                                \"displayName\": \"Write Concern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-resource\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"zendesk-subdomain\": {\n-                                \"description\": \"Name of the Zendesk subdomain.\",\n-                                \"displayName\": \"Subdomain Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-subdomain\",\n+                                \"name\": \"Write Concern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-user\": {\n-                                \"description\": \"Login user to Zendesk subdomain.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-user\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Paging cursor for Zendesk API is stored. Cursor is updated after each successful request.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"zendesk\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.zendesk.GetZendesk\",\n-                        \"typeDescription\": \"Incrementally fetches data from Zendesk API.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of records fetched by the processor.\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-zendesk-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Additional property to be added to the Zendesk request object.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The path in the request object to add. The value needs be a valid JsonPointer.\",\n-                                \"value\": \"The path in the incoming record to get the value from.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"web-client-service-provider\": {\n-                                \"description\": \"Controller service for HTTP client operations.\",\n-                                \"displayName\": \"Web Client Service Provider\",\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n-                                \"required\": true,\n+                                \"name\": \"mongo-client-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"zendesk-authentication-type-name\": {\n+                            \"put-mongo-update-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Password of Zendesk login user.\",\n-                                        \"displayName\": \"Password\",\n-                                        \"value\": \"password\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"With whole document\",\n+                                        \"value\": \"doc\"\n                                     },\n                                     {\n-                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n-                                        \"displayName\": \"Token\",\n-                                        \"value\": \"token\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"With operators enabled\",\n+                                        \"value\": \"operators\"\n                                     }\n                                 ],\n-                                \"description\": \"Type of authentication to Zendesk API.\",\n-                                \"displayName\": \"Authentication Type\",\n+                                \"defaultValue\": \"doc\",\n+                                \"description\": \"Choose an update mode. You can either supply a JSON document to use as a direct replacement or specify a document that contains update operators like $set, $unset, and $inc. When Operators mode is enabled, the flowfile content is expected to be the operator part for example: {$set:{\\\"key\\\": \\\"value\\\"},$inc:{\\\"count\\\":1234}} and the update query will come from the configured Update Query property.\",\n+                                \"displayName\": \"Update Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-authentication-type-name\",\n+                                \"name\": \"put-mongo-update-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-authentication-value-name\": {\n-                                \"description\": \"Password or authentication token for Zendesk login user.\",\n-                                \"displayName\": \"Authentication Credential\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-authentication-value-name\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"zendesk-comment-body\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"zendesk-record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The content or the path to the comment body in the incoming record.\",\n-                                \"displayName\": \"Comment Body\",\n+                            \"putmongo-update-query\": {\n+                                \"description\": \"Specify a full MongoDB query to be used for the lookup query to do an update/upsert.\",\n+                                \"displayName\": \"Update Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-comment-body\",\n-                                \"required\": true,\n+                                \"name\": \"putmongo-update-query\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-priority\": {\n-                                \"dependencies\": [\n+                            \"ssl-client-auth\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"zendesk-record-reader\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"description\": \"The content or the path to the priority in the incoming record.\",\n-                                \"displayName\": \"Priority\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-priority\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-client-auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-record-reader\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"zendesk-subdomain\": {\n-                                \"description\": \"Name of the Zendesk subdomain.\",\n-                                \"displayName\": \"Subdomain Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-subdomain\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"zendesk-subject\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"zendesk-record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The content or the path to the subject in the incoming record.\",\n-                                \"displayName\": \"Subject\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-subject\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"zendesk-type\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"zendesk-record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The content or the path to the type in the incoming record.\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"zendesk-user\": {\n-                                \"description\": \"Login user to Zendesk subdomain.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-user\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n+                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the operation failed and retrying the operation will also fail, such as an invalid data or schema.\",\n+                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"zendesk, ticket\"\n+                            \"insert\",\n+                            \"mongodb\",\n+                            \"put\",\n+                            \"update\",\n+                            \"write\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.zendesk.PutZendeskTicket\",\n-                        \"typeDescription\": \"Create Zendesk tickets using the Zendesk API.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of records processed.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The error code of from the response.\",\n-                                \"name\": \"error.code\"\n-                            },\n-                            {\n-                                \"description\": \"The error message of from the response.\",\n-                                \"name\": \"error.message\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-shopify-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongo\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to MongoDB\",\n+                        \"version\": \"1.27.0\"\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-shopify-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"CUSTOMERS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The Customer resource stores information about a shop's customers, such as their contact details, their order history, and whether they've agreed to receive email marketing.\",\n-                                        \"displayName\": \"Customers\",\n-                                        \"value\": \"customers\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"CUSTOMERS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Customer resource to query\",\n-                                \"displayName\": \"Customer Category\",\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CUSTOMERS\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"DISCOUNTS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The PriceRule resource can be used to get discounts using conditions\",\n-                                        \"displayName\": \"Price Rules\",\n-                                        \"value\": \"price_rules\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"DISCOUNTS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Discount resource to query\",\n-                                \"displayName\": \"Discount Category\",\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DISCOUNTS\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"INVENTORY\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"A location represents a geographical location where your stores, pop-up stores, headquarters and warehouses exist.\",\n-                                        \"displayName\": \"Locations\",\n-                                        \"value\": \"locations\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"INVENTORY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Inventory resource to query\",\n-                                \"displayName\": \"Inventory Category\",\n+                            \"Mongo URI\": {\n+                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n+                                \"displayName\": \"Mongo URI\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"INVENTORY\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Mongo URI\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ONLINE_STORE\": {\n+                            \"Write Concern\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Shopify shops come with a built-in blogging engine, allowing a shop to have one or more blogs.\",\n-                                        \"displayName\": \"Blogs\",\n-                                        \"value\": \"blogs\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ACKNOWLEDGED\",\n+                                        \"value\": \"ACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"A comment is a reader's response to an article in a blog.\",\n-                                        \"displayName\": \"Comments\",\n-                                        \"value\": \"comments\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UNACKNOWLEDGED\",\n+                                        \"value\": \"UNACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"Shopify stores come with a tool for creating basic HTML web pages.\",\n-                                        \"displayName\": \"Pages\",\n-                                        \"value\": \"pages\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FSYNCED\",\n+                                        \"value\": \"FSYNCED\"\n                                     },\n                                     {\n-                                        \"description\": \"A redirect causes a visitor on a specific path on the shop's site to be automatically sent to a different location.\",\n-                                        \"displayName\": \"Redirects\",\n-                                        \"value\": \"redirects\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JOURNALED\",\n+                                        \"value\": \"JOURNALED\"\n                                     },\n                                     {\n-                                        \"description\": \"The ScriptTag resource represents remote JavaScript code that is loaded into the pages of a shop's storefront or the order status page of checkout.\",\n-                                        \"displayName\": \"Script Tags\",\n-                                        \"value\": \"script_tags\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n+                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"A theme controls the look and feel of a Shopify online store.\",\n-                                        \"displayName\": \"Themes\",\n-                                        \"value\": \"themes\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"ONLINE_STORE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Online Store resource to query\",\n-                                \"displayName\": \"Online Store Category\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ONLINE_STORE\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ORDERS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"A checkout is considered abandoned after the customer has added contact information, but before the customer has completed their purchase.\",\n-                                        \"displayName\": \"Abandoned Checkouts\",\n-                                        \"value\": \"checkouts\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MAJORITY\",\n+                                        \"value\": \"MAJORITY\"\n                                     },\n                                     {\n-                                        \"description\": \"Merchants can use draft orders to create orders on behalf of their customers.\",\n-                                        \"displayName\": \"Draft Orders\",\n-                                        \"value\": \"draft_orders\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W1\",\n+                                        \"value\": \"W1\"\n                                     },\n                                     {\n-                                        \"description\": \"An order is a customer's request to purchase one or more products from a shop.\",\n-                                        \"displayName\": \"Orders\",\n-                                        \"value\": \"orders\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W2\",\n+                                        \"value\": \"W2\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"ORDERS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W3\",\n+                                        \"value\": \"W3\"\n                                     }\n                                 ],\n-                                \"description\": \"Order resource to query\",\n-                                \"displayName\": \"Order Category\",\n+                                \"defaultValue\": \"ACKNOWLEDGED\",\n+                                \"description\": \"The write concern to use\",\n+                                \"displayName\": \"Write Concern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ORDERS\",\n+                                \"name\": \"Write Concern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"PRODUCT\": {\n+                            \"bypass-validation\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Collects are meant for managing the relationship between products and custom collections.\",\n-                                        \"displayName\": \"Collects\",\n-                                        \"value\": \"collects\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A custom collection is a grouping of products that a merchant can create to make their store easier to browse. \",\n-                                        \"displayName\": \"Custom Collections\",\n-                                        \"value\": \"custom_collections\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Get products in a merchant's store \",\n-                                        \"displayName\": \"Products\",\n-                                        \"value\": \"products\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n                                     },\n                                     {\n-                                        \"description\": \"A smart collection is a grouping of products defined by rules that are set by the merchant.\",\n-                                        \"displayName\": \"Smart Collections\",\n-                                        \"value\": \"smart_collections\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PRODUCT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"description\": \"Product resource to query\",\n-                                \"displayName\": \"Product Category\",\n+                                \"defaultValue\": \"True\",\n+                                \"description\": \"Bypass schema validation during insert/upsert\",\n+                                \"displayName\": \"Bypass Validation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"PRODUCT\",\n+                                \"name\": \"bypass-validation\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SALES_CHANNELS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"A CollectionListing resource represents a product collection that a merchant has made available to your sales channel.\",\n-                                        \"displayName\": \"Collection Listings\",\n-                                        \"value\": \"collection_listings\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A ProductListing resource represents a Product which is available to your sales channel.\",\n-                                        \"displayName\": \"Product Listings\",\n-                                        \"value\": \"product_listings\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SALES_CHANNELS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Sales Channel resource to query\",\n-                                \"displayName\": \"Sales Channel Category\",\n+                            \"insert_count\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The number of records to group together for one single insert/upsert operation against MongoDB.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SALES_CHANNELS\",\n+                                \"name\": \"insert_count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"STORE_PROPERTIES\": {\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mongo-client-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"ordered\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The Country resource represents the tax rates applied to orders from the different countries where a shop sells its products.\",\n-                                        \"displayName\": \"Countries\",\n-                                        \"value\": \"countries\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Merchants who use Shopify Payments can allow customers to pay in their local currency on the online store.\",\n-                                        \"displayName\": \"Currencies\",\n-                                        \"value\": \"currencies\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Policy resource can be used to access the policies that a merchant has configured for their shop, such as their refund and privacy policies.\",\n-                                        \"displayName\": \"Policies\",\n-                                        \"value\": \"policies\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n                                     },\n                                     {\n-                                        \"description\": \"ShippingZone resource can be used to view shipping zones and their countries, provinces, and shipping rates.\",\n-                                        \"displayName\": \"Shipping Zones\",\n-                                        \"value\": \"shipping_zones\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"STORE_PROPERTIES\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"description\": \"Store Property resource to query\",\n-                                \"displayName\": \"Store Property Category\",\n+                                \"defaultValue\": \"False\",\n+                                \"description\": \"Perform ordered or unordered operations\",\n+                                \"displayName\": \"Ordered\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"STORE_PROPERTIES\",\n+                                \"name\": \"ordered\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"access-token\": {\n-                                \"description\": \"Access Token to authenticate requests\",\n-                                \"displayName\": \"Access Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"access-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"api-version\": {\n-                                \"defaultValue\": \"2022-10\",\n-                                \"description\": \"The Shopify REST API version\",\n-                                \"displayName\": \"API Version\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"api-version\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"incremental-delay\": {\n-                                \"defaultValue\": \"3 sec\",\n-                                \"dependencies\": [\n+                            \"ssl-client-auth\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Incremental Loading\",\n-                                        \"propertyName\": \"is-incremental\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35. Set this property to avoid missing objects when the clock of your local machines and Shopify servers' clock are not in sync.\",\n-                                \"displayName\": \"Incremental Delay\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"incremental-delay\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-client-auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"incremental-initial-start-time\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Incremental Loading\",\n-                                        \"propertyName\": \"is-incremental\"\n-                                    }\n-                                ],\n-                                \"description\": \"This property specifies the start time when running the first request. Represents an ISO 8601-encoded date and time string. For example, 3:50 pm on September 7, 2019 in the time zone of UTC (Coordinated Universal Time) is represented as \\\"2019-09-07T15:50:00Z\\\".\",\n-                                \"displayName\": \"Incremental Initial Start Time\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"incremental-initial-start-time\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"is-incremental\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"The processor can incrementally load the queried objects so that each object is queried exactly once. For each query, the processor queries objects which were created or modified after the previous run time but before the current time.\",\n-                                \"displayName\": \"Incremental Loading\",\n+                            \"update-key-fields\": {\n+                                \"description\": \"Comma separated list of fields based on which to identify documents that need to be updated. If this property is set NiFi will attempt an upsert operation on all documents. If this property is not set all documents will be inserted.\",\n+                                \"displayName\": \"Update Key Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"is-incremental\",\n-                                \"required\": true,\n+                                \"name\": \"update-key-fields\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"object-category\": {\n+                            \"update-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Query a Customer resource\",\n-                                        \"displayName\": \"Customers\",\n-                                        \"value\": \"CUSTOMERS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Query a Discount resource\",\n-                                        \"displayName\": \"Discounts\",\n-                                        \"value\": \"DISCOUNTS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Query an Inventory resource\",\n-                                        \"displayName\": \"Inventory\",\n-                                        \"value\": \"INVENTORY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Query an Online Store resource\",\n-                                        \"displayName\": \"Online Store\",\n-                                        \"value\": \"ONLINE_STORE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Query an Order resource\",\n-                                        \"displayName\": \"Orders\",\n-                                        \"value\": \"ORDERS\"\n+                                        \"description\": \"Updates only the first document that matches the query.\",\n+                                        \"displayName\": \"Update One\",\n+                                        \"value\": \"one\"\n                                     },\n                                     {\n-                                        \"description\": \"Query a Product resource\",\n-                                        \"displayName\": \"Products\",\n-                                        \"value\": \"PRODUCT\"\n+                                        \"description\": \"Updates every document that matches the query.\",\n+                                        \"displayName\": \"Update Many\",\n+                                        \"value\": \"many\"\n                                     },\n                                     {\n-                                        \"description\": \"Query a Sales Channel resource\",\n-                                        \"displayName\": \"Sales Channels\",\n-                                        \"value\": \"SALES_CHANNELS\"\n-                                    },\n+                                        \"description\": \"Use the value of the 'mongodb.update.mode' attribute of the incoming flowfile. Acceptable values are 'one' and 'many'.\",\n+                                        \"displayName\": \"Use 'mongodb.update.mode' flowfile attribute.\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"one\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Query a Store Property resource\",\n-                                        \"displayName\": \"Store Properties\",\n-                                        \"value\": \"STORE_PROPERTIES\"\n+                                        \"propertyDisplayName\": \"Update Key Fields\",\n+                                        \"propertyName\": \"update-key-fields\"\n                                     }\n                                 ],\n-                                \"description\": \"Shopify object category\",\n-                                \"displayName\": \"Object Category\",\n+                                \"description\": \"Choose between updating a single document or multiple documents per incoming record.\",\n+                                \"displayName\": \"Update Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"object-category\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"result-limit\": {\n-                                \"description\": \"The maximum number of results to request for each invocation of the Processor\",\n-                                \"displayName\": \"Result Limit\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"result-limit\",\n+                                \"name\": \"update-mode\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"store-domain\": {\n-                                \"description\": \"The domain of the Shopify store, e.g. nifistore.myshopify.com\",\n-                                \"displayName\": \"Store Domain\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"store-domain\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"web-client-service-provider\": {\n-                                \"description\": \"Controller service for HTTP client operations\",\n-                                \"displayName\": \"Web Client Service Provider\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Configurable parameter for controlling update mode on a per-flowfile basis. Acceptable values are 'one' and 'many' and controls whether a single incoming record should update a single or multiple Mongo documents.\",\n+                                \"name\": \"mongodb.update.mode\"\n+                            }\n+                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"For a few resources the processor supports incremental loading. The list of the resources with the supported parameters can be found in the additional details.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n+                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"shopify\"\n+                            \"insert\",\n+                            \"mongodb\",\n+                            \"put\",\n+                            \"record\",\n+                            \"update\",\n+                            \"upsert\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.shopify.GetShopify\",\n-                        \"typeDescription\": \"Retrieves objects from a custom Shopify store. The processor yield time must be set to the account's rate limit accordingly.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the MIME type to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-solr-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongoRecord\",\n+                        \"typeDescription\": \"This processor is a record-aware processor for inserting/upserting data into MongoDB. It uses a configured record reader and schema to read an incoming record set from the body of a flowfile and then inserts/upserts batches of those records into a configured MongoDB collection. This processor does not support deletes. The number of documents to insert/upsert at a time is controlled by the \\\"Batch Size\\\" configuration property. This value should be set to a reasonable size to ensure that MongoDB is not overloaded with too many operations at once.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-solr-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"The SOLR processors are deprecated and will be removed in NiFi 2.x.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n                             \"Batch Size\": {\n                                 \"defaultValue\": \"100\",\n-                                \"description\": \"Number of rows per Solr query\",\n+                                \"description\": \"The number of elements returned from the server in one batch.\",\n                                 \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Batch Size\",\n-                                \"required\": true,\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Collection\": {\n-                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n-                                \"displayName\": \"Collection\",\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Collection\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Date Field\": {\n-                                \"description\": \"The name of a date field in Solr used to filter results\",\n-                                \"displayName\": \"Date Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Field\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Initial Date Filter\": {\n-                                \"description\": \"Date value to filter results. Documents with an earlier date will not be fetched. The format has to correspond to the date pattern of Solr 'YYYY-MM-DDThh:mm:ssZ'\",\n-                                \"displayName\": \"Initial Date Filter\",\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Initial Date Filter\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Password\",\n+                            \"Mongo URI\": {\n+                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n+                                \"displayName\": \"Mongo URI\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use in order to write Solr documents to FlowFiles. Must be set if \\\"Records\\\" is used as return type.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Record Writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Return Fields\": {\n-                                \"description\": \"Comma-separated list of field names to return\",\n-                                \"displayName\": \"Return Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Return Fields\",\n+                                \"name\": \"Mongo URI\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Return Type\": {\n+                            \"allow-disk-use\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"XML\",\n-                                        \"value\": \"XML\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Records\",\n-                                        \"value\": \"Records\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"XML\",\n-                                \"description\": \"Write Solr documents to FlowFiles as XML or using a Record Writer\",\n-                                \"displayName\": \"Return Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Set this to true to enable writing data to temporary files to prevent exceeding the maximum memory use limit during aggregation pipeline staged when handling large datasets.\",\n+                                \"displayName\": \"Allow Disk Use\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Return Type\",\n+                                \"name\": \"allow-disk-use\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Solr Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Connection Timeout\",\n+                            \"json-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Use MongoDB's \\\"extended JSON\\\". This is the JSON generated with toJson() on a MongoDB Document from the Java driver\",\n+                                        \"displayName\": \"Extended JSON\",\n+                                        \"value\": \"Extended\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generate a JSON document that conforms to typical JSON conventions instead of Mongo-specific conventions.\",\n+                                        \"displayName\": \"Standard JSON\",\n+                                        \"value\": \"Standard\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Extended\",\n+                                \"description\": \"By default, MongoDB's Java driver returns \\\"extended JSON\\\". Some of the features of this variant of JSON may cause problems for other JSON parsers that expect only standard JSON types and conventions. This configuration setting  controls whether to use extended JSON or provide a clean view that conforms to standard JSON.\",\n+                                \"displayName\": \"JSON Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Connection Timeout\",\n+                                \"name\": \"json-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Location\": {\n-                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n-                                \"displayName\": \"Solr Location\",\n+                            \"mongo-agg-query\": {\n+                                \"description\": \"The aggregation query to be executed.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Solr Location\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-agg-query\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Maximum Connections\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n-                                \"displayName\": \"Solr Maximum Connections\",\n+                            \"mongo-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-charset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Maximum Connections Per Host\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n-                                \"displayName\": \"Solr Maximum Connections Per Host\",\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections Per Host\",\n-                                \"required\": true,\n+                                \"name\": \"mongo-client-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"mongo-date-format\": {\n+                                \"defaultValue\": \"yyyy-MM-dd'T'HH:mm:ss'Z'\",\n+                                \"description\": \"The date format string to use for formatting Date fields that are returned from Mongo. It is only applied when the JSON output format is set to Standard JSON. Full documentation for format characters can be found here: https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html\",\n+                                \"displayName\": \"Date Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-date-format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Query\": {\n-                                \"description\": \"A query to execute against Solr\",\n-                                \"displayName\": \"Solr Query\",\n+                            \"mongo-query-attribute\": {\n+                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n+                                \"displayName\": \"Query Output Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Query\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Socket Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Socket Timeout\",\n+                            \"results-per-flowfile\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"How many results to put into a flowfile at once. The whole body will be treated as a JSON array of results.\",\n+                                \"displayName\": \"Results Per FlowFile\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Socket Timeout\",\n-                                \"required\": true,\n+                                \"name\": \"results-per-flowfile\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Type\": {\n+                            \"ssl-client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A SolrCloud instance.\",\n-                                        \"displayName\": \"Cloud\",\n-                                        \"value\": \"Cloud\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"A stand-alone Solr instance.\",\n-                                        \"displayName\": \"Standard\",\n-                                        \"value\": \"Standard\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Standard\",\n-                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n-                                \"displayName\": \"Solr Type\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"ssl-client-auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ZooKeeper Client Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Client Timeout\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Client Timeout\",\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The result set of the aggregation will be sent to this relationship.\",\n+                                \"name\": \"results\"\n+                            },\n+                            {\n+                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The input flowfile gets sent to this relationship when the query succeeds.\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"aggregate\",\n+                            \"aggregation\",\n+                            \"mongo\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mongodb.RunMongoAggregation\",\n+                        \"typeDescription\": \"A processor that runs an aggregation query whenever a flowfile is received.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"delete-gridfs-query\": {\n+                                \"description\": \"A valid MongoDB query to use to find and delete one or more files from GridFS.\",\n+                                \"displayName\": \"Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"delete-gridfs-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ZooKeeper Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Connection Timeout\",\n+                            \"gridfs-bucket-name\": {\n+                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n+                                \"displayName\": \"Bucket Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Connection Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-bucket-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"gridfs-client-service\": {\n+                                \"description\": \"The MongoDB client service to use for database connections.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n+                                \"name\": \"gridfs-client-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"gridfs-database-name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-database-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"gridfs-file-name\": {\n+                                \"description\": \"The name of the file in the bucket that is the target of this processor. GridFS file names do not include path information because GridFS does not sort files into folders within a bucket.\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kerberos-principal\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-file-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"mongo-query-attribute\": {\n+                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n+                                \"displayName\": \"Query Output Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-query-attribute\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Stores latest date of Date Field so that the same data will not be fetched multiple times.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The results of querying Solr\",\n+                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Apache\",\n-                            \"Get\",\n-                            \"Pull\",\n-                            \"Records\",\n-                            \"Solr\"\n+                            \"delete\",\n+                            \"gridfs\",\n+                            \"mongodb\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.solr.GetSolr\",\n-                        \"typeDescription\": \"Queries Solr and outputs the results as a FlowFile in the format of XML or using a Record Writer\",\n+                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.DeleteGridFS\",\n+                        \"typeDescription\": \"Deletes a file from GridFS using a file name or a query.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-solr-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -76595,1307 +74184,1364 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"The SOLR processors are deprecated and will be removed in NiFi 2.x.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These parameters will be passed to Solr on the request\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A Solr request parameter name\",\n-                                \"value\": \"A Solr request parameter value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Collection\": {\n-                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n-                                \"displayName\": \"Collection\",\n+                            \"gridfs-bucket-name\": {\n+                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n+                                \"displayName\": \"Bucket Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Collection\",\n+                                \"name\": \"gridfs-bucket-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Commit Within\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The number of milliseconds before the given update is committed\",\n-                                \"displayName\": \"Commit Within\",\n+                            \"gridfs-client-service\": {\n+                                \"description\": \"The MongoDB client service to use for database connections.\",\n+                                \"displayName\": \"Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gridfs-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"gridfs-database-name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Commit Within\",\n+                                \"name\": \"gridfs-database-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gridfs-file-name\": {\n+                                \"description\": \"The name of the file in the bucket that is the target of this processor.\",\n+                                \"displayName\": \"File Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-file-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Content Stream Path\": {\n-                                \"defaultValue\": \"/update/json/docs\",\n-                                \"description\": \"The path in Solr to post the ContentStream\",\n-                                \"displayName\": \"Content Stream Path\",\n+                            \"gridfs-query\": {\n+                                \"description\": \"A valid MongoDB query to use to fetch one or more files from GridFS.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Content Stream Path\",\n+                                \"name\": \"gridfs-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"mongo-operation-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Fetch the entire query result and then make it available to downstream processors.\",\n+                                        \"displayName\": \"Full Query Fetch\",\n+                                        \"value\": \"all-at-once\"\n+                                    },\n+                                    {\n+                                        \"description\": \"As soon as the query start sending results to the downstream processors at regular intervals.\",\n+                                        \"displayName\": \"Stream Query Results\",\n+                                        \"value\": \"streaming\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all-at-once\",\n+                                \"description\": \"This option controls when results are made available to downstream processors. If Stream Query Results is enabled, provenance will not be tracked relative to the input flowfile if an input flowfile is received and starts the query. In Stream Query Results mode errors will be handled by sending a new flowfile with the original content and attributes of the input flowfile to the failure relationship. Streaming should only be used if there is reliable connectivity between MongoDB and NiFi.\",\n+                                \"displayName\": \"Operation Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mongo-operation-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Content-Type\": {\n-                                \"defaultValue\": \"application/json\",\n-                                \"description\": \"Content-Type being sent to Solr\",\n-                                \"displayName\": \"Content-Type\",\n+                            \"mongo-query-attribute\": {\n+                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n+                                \"displayName\": \"Query Output Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Content-Type\",\n-                                \"required\": true,\n+                                \"name\": \"mongo-query-attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Password\",\n+                            {\n+                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original input flowfile goes to this relationship if the query does not cause an error\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"fetch\",\n+                            \"gridfs\",\n+                            \"mongo\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.FetchGridFS\",\n+                        \"typeDescription\": \"Retrieves one or more files from a GridFS bucket by file name or by a user-defined query.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The custom metadata stored with a file is attached to this property if it exists.\",\n+                                \"name\": \"gridfs.file.metadata\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"gridfs-bucket-name\": {\n+                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n+                                \"displayName\": \"Bucket Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-bucket-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"gridfs-client-service\": {\n+                                \"description\": \"The MongoDB client service to use for database connections.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"gridfs-client-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Solr Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Location\": {\n-                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n-                                \"displayName\": \"Solr Location\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Solr Location\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Maximum Connections\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n-                                \"displayName\": \"Solr Maximum Connections\",\n+                            \"gridfs-database-name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-database-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Maximum Connections Per Host\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n-                                \"displayName\": \"Solr Maximum Connections Per Host\",\n+                            \"gridfs-file-name\": {\n+                                \"description\": \"The name of the file in the bucket that is the target of this processor. GridFS file names do not include path information because GridFS does not sort files into folders within a bucket.\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections Per Host\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Socket Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Socket Timeout\",\n+                            \"putgridfs-chunk-size\": {\n+                                \"defaultValue\": \"256 KB\",\n+                                \"description\": \"Controls the maximum size of each chunk of a file uploaded into GridFS.\",\n+                                \"displayName\": \"Chunk Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Socket Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"putgridfs-chunk-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Type\": {\n+                            \"putgridfs-enforce-uniqueness\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A SolrCloud instance.\",\n-                                        \"displayName\": \"Cloud\",\n-                                        \"value\": \"Cloud\"\n+                                        \"description\": \"No uniqueness will be enforced.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"A stand-alone Solr instance.\",\n-                                        \"displayName\": \"Standard\",\n-                                        \"value\": \"Standard\"\n+                                        \"description\": \"Both the filename and hash must be unique.\",\n+                                        \"displayName\": \"Both\",\n+                                        \"value\": \"both\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Only the filename must be unique.\",\n+                                        \"displayName\": \"Name\",\n+                                        \"value\": \"name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Only the file hash must be unique.\",\n+                                        \"displayName\": \"Hash\",\n+                                        \"value\": \"hash\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Standard\",\n-                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n-                                \"displayName\": \"Solr Type\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"When enabled, this option will ensure that uniqueness is enforced on the bucket. It will do so by creating a MongoDB index that matches your selection. It should ideally be configured once when the bucket is created for the first time because it could take a long time to build on an existing bucket wit a lot of data.\",\n+                                \"displayName\": \"Enforce Uniqueness\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Type\",\n+                                \"name\": \"putgridfs-enforce-uniqueness\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Username\",\n+                            \"putgridfs-hash-attribute\": {\n+                                \"defaultValue\": \"hash.value\",\n+                                \"description\": \"If uniquness enforcement is enabled and the file hash is part of the constraint, this must be set to an attribute that exists on all incoming flowfiles.\",\n+                                \"displayName\": \"Hash Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ZooKeeper Client Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Client Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Client Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ZooKeeper Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Connection Timeout\",\n+                                \"name\": \"putgridfs-hash-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"putgridfs-properties-prefix\": {\n+                                \"description\": \"Attributes that have this prefix will be added to the file stored in GridFS as metadata.\",\n+                                \"displayName\": \"File Properties Prefix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kerberos-principal\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"putgridfs-properties-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original FlowFile\",\n+                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed for any reason other than Solr being unreachable\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Flowfiles that fail the duplicate check are sent to this relationship.\",\n+                                \"name\": \"duplicate\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed because Solr is unreachable\",\n-                                \"name\": \"connection_failure\"\n+                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Apache\",\n-                            \"Put\",\n-                            \"Send\",\n-                            \"Solr\"\n+                            \"file\",\n+                            \"gridfs\",\n+                            \"mongo\",\n+                            \"put\",\n+                            \"store\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.solr.PutSolrContentStream\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as a ContentStream to Solr\",\n+                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.PutGridFS\",\n+                        \"typeDescription\": \"Writes a file to a GridFS bucket.\",\n                         \"version\": \"1.27.0\"\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-pgp-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-rethinkdb-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-solr-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-rethinkdb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"deprecated\": true,\n-                        \"deprecationReason\": \"The SOLR processors are deprecated and will be removed in NiFi 2.x.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These parameters will be passed to Solr on the request\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A Solr request parameter name\",\n-                                \"value\": \"A Solr request parameter value\"\n-                            }\n-                        ],\n+                        \"deprecationReason\": \"RethinkDB 2.4 requires API changes that would alter the configuration and behavior of this Processor\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"500\",\n-                                \"description\": \"The number of solr documents to index per batch\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"rethinkdb-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": false,\n+                                \"name\": \"rethinkdb-charset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Collection\": {\n-                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n-                                \"displayName\": \"Collection\",\n+                            \"rethinkdb-dbname\": {\n+                                \"description\": \"RethinkDB database to connect to\",\n+                                \"displayName\": \"DB Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Collection\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-dbname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Commit Within\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The number of milliseconds before the given update is committed\",\n-                                \"displayName\": \"Commit Within\",\n+                            \"rethinkdb-document-identifier\": {\n+                                \"description\": \"A FlowFile attribute, or attribute expression used for determining RethinkDB key for the Flow File content\",\n+                                \"displayName\": \"Document Identifier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Commit Within\",\n-                                \"required\": false,\n+                                \"name\": \"rethinkdb-document-identifier\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Fields To Index\": {\n-                                \"description\": \"Comma-separated list of field names to write\",\n-                                \"displayName\": \"Fields To Index\",\n+                            \"rethinkdb-durability\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Save change to disk before ack\",\n+                                        \"displayName\": \"Hard\",\n+                                        \"value\": \"hard\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Don't save changes to disk before ack\",\n+                                        \"displayName\": \"Soft\",\n+                                        \"value\": \"soft\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"hard\",\n+                                \"description\": \"Durability of documents being inserted\",\n+                                \"displayName\": \"Durablity of documents\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Fields To Index\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Solr Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Location\": {\n-                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n-                                \"displayName\": \"Solr Location\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Solr Location\",\n+                                \"name\": \"rethinkdb-durability\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Maximum Connections\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n-                                \"displayName\": \"Solr Maximum Connections\",\n+                            \"rethinkdb-host\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"RethinkDB hostname\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections\",\n+                                \"name\": \"rethinkdb-host\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Maximum Connections Per Host\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n-                                \"displayName\": \"Solr Maximum Connections Per Host\",\n+                            \"rethinkdb-password\": {\n+                                \"description\": \"Password for user\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections Per Host\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"rethinkdb-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Solr Socket Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Socket Timeout\",\n+                            \"rethinkdb-port\": {\n+                                \"defaultValue\": \"28015\",\n+                                \"description\": \"RethinkDB database port to connect to\",\n+                                \"displayName\": \"DB Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Socket Timeout\",\n+                                \"name\": \"rethinkdb-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Type\": {\n+                            \"rethinkdb-return-result\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A SolrCloud instance.\",\n-                                        \"displayName\": \"Cloud\",\n-                                        \"value\": \"Cloud\"\n+                                        \"description\": \"Return changed document\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"A stand-alone Solr instance.\",\n-                                        \"displayName\": \"Standard\",\n-                                        \"value\": \"Standard\"\n+                                        \"description\": \"Do not return changed document\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Standard\",\n-                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n-                                \"displayName\": \"Solr Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Update Path\": {\n-                                \"defaultValue\": \"/update\",\n-                                \"description\": \"The path in Solr to post the Flowfile Records\",\n-                                \"displayName\": \"Solr Update Path\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Return old value which were deleted\",\n+                                \"displayName\": \"Return deleted value\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Solr Update Path\",\n+                                \"name\": \"rethinkdb-return-result\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ZooKeeper Client Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Client Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Client Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ZooKeeper Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Connection Timeout\",\n+                            \"rethinkdb-table\": {\n+                                \"description\": \"RethinkDB table to connect to\",\n+                                \"displayName\": \"Table name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Connection Timeout\",\n-                                \"required\": false,\n+                                \"name\": \"rethinkdb-table\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"rethinkdb-username\": {\n+                                \"description\": \"Username for accessing RethinkDB\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kerberos-principal\",\n+                                \"name\": \"rethinkdb-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"put-solr-record-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-solr-record-record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.rethinkdb.GetRethinkDB\",\n+                            \"org.apache.nifi.processors.rethinkdb.PutRethinkDB\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original FlowFile\",\n+                                \"description\": \"Sucessful FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed for any reason other than Solr being unreachable\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Document not found are routed to this relationship\",\n+                                \"name\": \"not_found\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed because Solr is unreachable\",\n-                                \"name\": \"connection_failure\"\n+                                \"description\": \"Failed FlowFiles are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Apache\",\n-                            \"Put\",\n-                            \"Record\",\n-                            \"Send\",\n-                            \"Solr\"\n+                            \"delete\",\n+                            \"remove\",\n+                            \"rethinkdb\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.solr.PutSolrRecord\",\n-                        \"typeDescription\": \"Indexes the Records from a FlowFile into Solr\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.rethinkdb.DeleteRethinkDB\",\n+                        \"typeDescription\": \"Processor to remove a JSON document from RethinkDB (https://www.rethinkdb.com/) using the document id.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"RethinkDB error message\",\n+                                \"name\": \"rethinkdb.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"Error count while delete documents\",\n+                                \"name\": \"rethinkdb.delete.errors\"\n+                            },\n+                            {\n+                                \"description\": \"Number of documents deleted\",\n+                                \"name\": \"rethinkdb.delete.deleted\"\n+                            },\n+                            {\n+                                \"description\": \"Number of documents inserted\",\n+                                \"name\": \"rethinkdb.delete.inserted\"\n+                            },\n+                            {\n+                                \"description\": \"Number of documents replaced\",\n+                                \"name\": \"rethinkdb.delete.replaced\"\n+                            },\n+                            {\n+                                \"description\": \"Number of documents skipped\",\n+                                \"name\": \"rethinkdb.delete.skipped\"\n+                            },\n+                            {\n+                                \"description\": \"Number of documents unchanged since they already existed\",\n+                                \"name\": \"rethinkdb.delete.unchanged\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-solr-nar\",\n+                        \"artifact\": \"nifi-rethinkdb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"deprecated\": true,\n-                        \"deprecationReason\": \"The SOLR processors are deprecated and will be removed in NiFi 2.x.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These parameters will be passed to Solr on the request\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A Solr request parameter name\",\n-                                \"value\": \"A Solr request parameter value\"\n-                            }\n-                        ],\n+                        \"deprecationReason\": \"RethinkDB 2.4 requires API changes that would alter the configuration and behavior of this Processor\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Collection\": {\n-                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n-                                \"displayName\": \"Collection\",\n+                            \"rethinkdb-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Collection\",\n-                                \"required\": false,\n+                                \"name\": \"rethinkdb-charset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use in order to write Solr documents to FlowFiles. Must be set if \\\"Records\\\" is used as return type.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Record Writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Solr Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Connection Timeout\",\n+                            \"rethinkdb-dbname\": {\n+                                \"description\": \"RethinkDB database to connect to\",\n+                                \"displayName\": \"DB Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Connection Timeout\",\n+                                \"name\": \"rethinkdb-dbname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Location\": {\n-                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n-                                \"displayName\": \"Solr Location\",\n+                            \"rethinkdb-document-identifier\": {\n+                                \"description\": \"A FlowFile attribute, or attribute expression used for determining RethinkDB key for the Flow File content\",\n+                                \"displayName\": \"Document Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Solr Location\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"rethinkdb-document-identifier\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Maximum Connections\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n-                                \"displayName\": \"Solr Maximum Connections\",\n+                            \"rethinkdb-host\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"RethinkDB hostname\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections\",\n+                                \"name\": \"rethinkdb-host\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Maximum Connections Per Host\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n-                                \"displayName\": \"Solr Maximum Connections Per Host\",\n+                            \"rethinkdb-max-document-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Maximum size of documents allowed to be posted in one batch\",\n+                                \"displayName\": \"Max size of documents\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections Per Host\",\n+                                \"name\": \"rethinkdb-max-document-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Socket Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Socket Timeout\",\n+                            \"rethinkdb-password\": {\n+                                \"description\": \"Password for user\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Socket Timeout\",\n+                                \"name\": \"rethinkdb-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"rethinkdb-port\": {\n+                                \"defaultValue\": \"28015\",\n+                                \"description\": \"RethinkDB database port to connect to\",\n+                                \"displayName\": \"DB Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Type\": {\n+                            \"rethinkdb-read-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A SolrCloud instance.\",\n-                                        \"displayName\": \"Cloud\",\n-                                        \"value\": \"Cloud\"\n+                                        \"description\": \"Read values from memory from primary replica (Default)\",\n+                                        \"displayName\": \"Single\",\n+                                        \"value\": \"single\"\n                                     },\n                                     {\n-                                        \"description\": \"A stand-alone Solr instance.\",\n-                                        \"displayName\": \"Standard\",\n-                                        \"value\": \"Standard\"\n+                                        \"description\": \"Read values committed to disk on majority of replicas\",\n+                                        \"displayName\": \"Majority\",\n+                                        \"value\": \"majority\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Read values from memory from an arbitrary replica \",\n+                                        \"displayName\": \"Outdated\",\n+                                        \"value\": \"outdated\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Standard\",\n-                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n-                                \"displayName\": \"Solr Type\",\n+                                \"defaultValue\": \"single\",\n+                                \"description\": \"Read mode used for consistency\",\n+                                \"displayName\": \"Read Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Type\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"rethinkdb-read-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Username\",\n+                            \"rethinkdb-table\": {\n+                                \"description\": \"RethinkDB table to connect to\",\n+                                \"displayName\": \"Table name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-table\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ZooKeeper Client Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Client Timeout\",\n+                            \"rethinkdb-username\": {\n+                                \"description\": \"Username for accessing RethinkDB\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Client Timeout\",\n+                                \"name\": \"rethinkdb-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.rethinkdb.DeleteRethinkDB\",\n+                            \"org.apache.nifi.processors.rethinkdb.PutRethinkDB\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Sucessful FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n-                            \"ZooKeeper Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Connection Timeout\",\n+                            {\n+                                \"description\": \"Document not found are routed to this relationship\",\n+                                \"name\": \"not_found\"\n+                            },\n+                            {\n+                                \"description\": \"Failed FlowFiles are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"fetch\",\n+                            \"get\",\n+                            \"read\",\n+                            \"rethinkdb\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.rethinkdb.GetRethinkDB\",\n+                        \"typeDescription\": \"Processor to get a JSON document from RethinkDB (https://www.rethinkdb.com/) using the document id. The FlowFile will contain the retrieved document\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"RethinkDB error message\",\n+                                \"name\": \"rethinkdb.error.message\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-rethinkdb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"RethinkDB 2.4 requires API changes that would alter the configuration and behavior of this Processor\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"rethinkdb-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Connection Timeout\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"rethinkdb-charset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"amount_documents_to_return\": {\n+                            \"rethinkdb-conflict-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Entire results\",\n-                                        \"value\": \"return_all_results\"\n+                                        \"description\": \"Update the document having same id with new values\",\n+                                        \"displayName\": \"Update\",\n+                                        \"value\": \"update\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Only top results\",\n-                                        \"value\": \"return_only_top_results\"\n+                                        \"description\": \"Replace the document with having same id new document\",\n+                                        \"displayName\": \"Replace\",\n+                                        \"value\": \"replace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Return error if the document with same id exists\",\n+                                        \"displayName\": \"Error\",\n+                                        \"value\": \"error\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"return_only_top_results\",\n-                                \"description\": \"Total amount of Solr documents to be returned. If this property is set to \\\"Only top results\\\", only single requests will be sent to Solr and the results will be written into single FlowFiles. If it is set to \\\"Entire results\\\", all results matching to the query are retrieved via multiple Solr requests and returned in multiple FlowFiles. For both options, the number of Solr documents to be returned in a FlowFile depends on the configuration of the \\\"Rows\\\" property\",\n-                                \"displayName\": \"Total amount of returned results\",\n+                                \"defaultValue\": \"update\",\n+                                \"description\": \"Conflict strategy to be used in case of inserting existing document.\",\n+                                \"displayName\": \"Conflict strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amount_documents_to_return\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"rethinkdb-conflict-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"rethinkdb-dbname\": {\n+                                \"description\": \"RethinkDB database to connect to\",\n+                                \"displayName\": \"DB Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kerberos-principal\",\n-                                \"required\": false,\n+                                \"name\": \"rethinkdb-dbname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"return_type\": {\n+                            \"rethinkdb-durability\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"XML\",\n-                                        \"value\": \"XML\"\n+                                        \"description\": \"Save change to disk before ack\",\n+                                        \"displayName\": \"Hard\",\n+                                        \"value\": \"hard\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Records\",\n-                                        \"value\": \"Records\"\n+                                        \"description\": \"Don't save changes to disk before ack\",\n+                                        \"displayName\": \"Soft\",\n+                                        \"value\": \"soft\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"XML\",\n-                                \"description\": \"Output format of Solr results. Write Solr documents to FlowFiles as XML or using a Record Writer\",\n-                                \"displayName\": \"Return Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"return_type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"solr_param_field_list\": {\n-                                \"description\": \"Comma separated list of fields to be included into results, e. g. field1,field2\",\n-                                \"displayName\": \"Field List\",\n+                                \"defaultValue\": \"hard\",\n+                                \"description\": \"Durability of documents being inserted\",\n+                                \"displayName\": \"Durablity of documents\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"solr_param_field_list\",\n-                                \"required\": false,\n+                                \"name\": \"rethinkdb-durability\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"solr_param_query\": {\n-                                \"defaultValue\": \"*:*\",\n-                                \"description\": \"Solr Query, e. g. field:value\",\n-                                \"displayName\": \"Solr Query\",\n+                            \"rethinkdb-host\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"RethinkDB hostname\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"solr_param_query\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-host\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"solr_param_request_handler\": {\n-                                \"defaultValue\": \"/select\",\n-                                \"description\": \"Define a request handler here, e. g. /query\",\n-                                \"displayName\": \"Request Handler\",\n+                            \"rethinkdb-max-document-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Maximum size of documents allowed to be posted in one batch\",\n+                                \"displayName\": \"Max size of documents\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"solr_param_request_handler\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-max-document-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"solr_param_rows\": {\n-                                \"description\": \"Number of results to be returned for a single request\",\n-                                \"displayName\": \"Rows\",\n+                            \"rethinkdb-password\": {\n+                                \"description\": \"Password for user\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"solr_param_rows\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-password\",\n                                 \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"rethinkdb-port\": {\n+                                \"defaultValue\": \"28015\",\n+                                \"description\": \"RethinkDB database port to connect to\",\n+                                \"displayName\": \"DB Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"solr_param_sort\": {\n-                                \"description\": \"Comma separated sort clauses to define the sorting of results, e. g. field1 asc, field2 desc\",\n-                                \"displayName\": \"Sorting of result list\",\n+                            \"rethinkdb-table\": {\n+                                \"description\": \"RethinkDB table to connect to\",\n+                                \"displayName\": \"Table name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"solr_param_sort\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-table\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"solr_param_start\": {\n-                                \"description\": \"Offset of result set\",\n-                                \"displayName\": \"Start of results\",\n+                            \"rethinkdb-username\": {\n+                                \"description\": \"Username for accessing RethinkDB\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"solr_param_start\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.rethinkdb.DeleteRethinkDB\",\n+                            \"org.apache.nifi.processors.rethinkdb.GetRethinkDB\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Stats about Solr index\",\n-                                \"name\": \"stats\"\n-                            },\n-                            {\n-                                \"description\": \"Results of Solr queries\",\n-                                \"name\": \"results\"\n-                            },\n-                            {\n-                                \"description\": \"Results of faceted search\",\n-                                \"name\": \"facets\"\n+                                \"description\": \"Sucessful FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Failure relationship\",\n+                                \"description\": \"Failed FlowFiles are routed to this relationship\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Original flowfile\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Apache\",\n-                            \"Get\",\n-                            \"Query\",\n-                            \"Records\",\n-                            \"Solr\"\n+                            \"insert\",\n+                            \"put\",\n+                            \"rethinkdb\",\n+                            \"stream\",\n+                            \"update\",\n+                            \"write\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.solr.QuerySolr\",\n-                        \"typeDescription\": \"Queries Solr and outputs the results as a FlowFile in the format of XML or using a Record Writer\",\n+                        \"type\": \"org.apache.nifi.processors.rethinkdb.PutRethinkDB\",\n+                        \"typeDescription\": \"Processor to write the JSON content of a FlowFile to RethinkDB (https://www.rethinkdb.com/). The flow file should contain either JSON Object an array of JSON documents\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Solr connect string\",\n-                                \"name\": \"solr.connect\"\n-                            },\n-                            {\n-                                \"description\": \"Solr collection\",\n-                                \"name\": \"solr.collection\"\n-                            },\n-                            {\n-                                \"description\": \"Query string sent to Solr\",\n-                                \"name\": \"solr.query\"\n+                                \"description\": \"RethinkDB error message\",\n+                                \"name\": \"rethinkdb.error.message\"\n                             },\n                             {\n-                                \"description\": \"Cursor mark can be used for scrolling Solr\",\n-                                \"name\": \"solr.cursor.mark\"\n+                                \"description\": \"Error count while inserting documents\",\n+                                \"name\": \"rethinkdb.insert.errors\"\n                             },\n                             {\n-                                \"description\": \"Status code of Solr request. A status code of 0 indicates that the request was successfully processed\",\n-                                \"name\": \"solr.status.code\"\n+                                \"description\": \"Number of documents deleted\",\n+                                \"name\": \"rethinkdb.insert.deleted\"\n                             },\n                             {\n-                                \"description\": \"The elapsed time to process the query (in ms)\",\n-                                \"name\": \"solr.query.time\"\n+                                \"description\": \"Keys generated on inserting documents\",\n+                                \"name\": \"rethinkdb.insert.generated_keys\"\n                             },\n                             {\n-                                \"description\": \"Solr start parameter (result offset) for the query\",\n-                                \"name\": \"solr.start\"\n+                                \"description\": \"Number of documents inserted\",\n+                                \"name\": \"rethinkdb.insert.inserted\"\n                             },\n                             {\n-                                \"description\": \"Number of Solr documents to be returned for the query\",\n-                                \"name\": \"solr.rows\"\n+                                \"description\": \"Number of documents replaced\",\n+                                \"name\": \"rethinkdb.insert.replaced\"\n                             },\n                             {\n-                                \"description\": \"Number of Solr documents that match the query\",\n-                                \"name\": \"solr.number.results\"\n+                                \"description\": \"Number of documents skipped because they already existed\",\n+                                \"name\": \"rethinkdb.insert.skipped\"\n                             },\n                             {\n-                                \"description\": \"The mime type of the data format\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"Number of documents unchanged since they already existed\",\n+                                \"name\": \"rethinkdb.insert.unchanged\"\n                             },\n                             {\n-                                \"description\": \"The Java exception class raised when the processor fails\",\n-                                \"name\": \"querysolr.exeption.class\"\n+                                \"description\": \"First error while inserting documents\",\n+                                \"name\": \"rethinkdb.insert.first_error\"\n                             },\n                             {\n-                                \"description\": \"The Java exception message raised when the processor fails\",\n-                                \"name\": \"querysolr.exeption.message\"\n+                                \"description\": \"Warning message in case of large number of ids being returned on insertion\",\n+                                \"name\": \"rethinkdb.insert.warnings\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-jms-processors-nar\",\n+            \"artifact\": \"nifi-stateless-nar\",\n             \"componentManifest\": {\n-                \"controllerServices\": [\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jolt-record-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-jolt-record-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"The properties that are set following Java Beans convention where a property name is derived from the 'set*' method of the vendor specific ConnectionFactory's implementation. For example, 'com.ibm.mq.jms.MQConnectionFactory.setChannel(String)' would imply 'channel' property and 'com.ibm.mq.jms.MQConnectionFactory.setTransportType(int)' would imply 'transportType' property.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Connection Factory configuration property.\",\n-                                \"value\": \"The value of a given Connection Factory configuration property.\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Client Library Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"JMS SSL Context Service\",\n+                            \"jolt-record-custom-class\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"jolt-transform-custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Jolt Transformation DSL\",\n+                                        \"propertyName\": \"jolt-record-transform\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fully Qualified Class Name for Custom Transformation\",\n+                                \"displayName\": \"Custom Transformation Class Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"jolt-record-custom-class\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"jolt-record-custom-modules\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"jolt-transform-custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Jolt Transformation DSL\",\n+                                        \"propertyName\": \"jolt-record-transform\"\n+                                    }\n+                                ],\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules containing custom transformations (that are not included on NiFi's classpath).\",\n+                                \"displayName\": \"Custom Module Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"jolt-record-custom-modules\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"jolt-record-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"jolt-record-record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"broker\": {\n-                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n-                                \"displayName\": \"JMS Broker URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"broker\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cf\": {\n-                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n-                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n+                            \"jolt-record-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cf\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"jolt-record-record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"cflib\": {\n-                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n-                                \"displayName\": \"JMS Client Libraries\",\n+                            \"jolt-record-spec\": {\n+                                \"description\": \"Jolt Specification for transform of record data. The value for this property may be the text of a JOLT specification or the path to a file containing a JOLT specification. This value is ignored if the Jolt Sort Transformation is selected.\",\n+                                \"displayName\": \"Jolt Specification\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cflib\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"jolt-record-spec\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\",\n-                                        \"DIRECTORY\",\n-                                        \"URL\"\n+                                        \"TEXT\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n+                            },\n+                            \"jolt-record-transform\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Change the cardinality of input elements to create the output.\",\n+                                        \"displayName\": \"Cardinality\",\n+                                        \"value\": \"jolt-transform-card\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Execute list of Jolt transformations.\",\n+                                        \"displayName\": \"Chain\",\n+                                        \"value\": \"jolt-transform-chain\"\n+                                    },\n+                                    {\n+                                        \"description\": \" Apply default values to the output.\",\n+                                        \"displayName\": \"Default\",\n+                                        \"value\": \"jolt-transform-default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Writes when field name is missing or value is null\",\n+                                        \"displayName\": \"Modify - Default\",\n+                                        \"value\": \"jolt-transform-modify-default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Writes when key is missing\",\n+                                        \"displayName\": \"Modify - Define\",\n+                                        \"value\": \"jolt-transform-modify-define\"\n+                                    },\n+                                    {\n+                                        \"description\": \" Always overwrite value\",\n+                                        \"displayName\": \"Modify - Overwrite\",\n+                                        \"value\": \"jolt-transform-modify-overwrite\"\n+                                    },\n+                                    {\n+                                        \"description\": \" Remove values from input data to create the output.\",\n+                                        \"displayName\": \"Remove\",\n+                                        \"value\": \"jolt-transform-remove\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Shift input data to create the output.\",\n+                                        \"displayName\": \"Shift\",\n+                                        \"value\": \"jolt-transform-shift\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Sort input field name values alphabetically. Any specification set is ignored.\",\n+                                        \"displayName\": \"Sort\",\n+                                        \"value\": \"jolt-transform-sort\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Custom Transformation. Requires Custom Transformation Class Name\",\n+                                        \"displayName\": \"Custom\",\n+                                        \"value\": \"jolt-transform-custom\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"jolt-transform-chain\",\n+                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n+                                \"displayName\": \"Jolt Transformation DSL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"jolt-record-transform\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"jolt-record-transform-cache-size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Compiling a Jolt Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n+                                \"displayName\": \"Transform Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"jolt-record-transform-cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-jms-cf-service-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile records cannot be parsed), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile that was transformed. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.jms.processors.ConsumeJMS\",\n-                            \"org.apache.nifi.jms.processors.PublishJMS\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"integration\",\n-                            \"jms\",\n-                            \"messaging\",\n-                            \"publish\",\n-                            \"queue\",\n-                            \"subscribe\",\n-                            \"topic\"\n+                            \"cardinality\",\n+                            \"chainr\",\n+                            \"defaultr\",\n+                            \"jolt\",\n+                            \"record\",\n+                            \"removr\",\n+                            \"shiftr\",\n+                            \"sort\",\n+                            \"transform\"\n                         ],\n-                        \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n-                        \"typeDescription\": \"Provides a generic service to create vendor specific javax.jms.ConnectionFactory implementations. The Connection Factory can be served once this service is configured successfully.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.jolt.record.JoltTransformRecord\",\n+                        \"typeDescription\": \"Applies a JOLT specification to each record in the FlowFile payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of records in an outgoing FlowFile\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type that the configured Record Writer indicates is appropriate\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-db-schema-registry-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-db-schema-registry-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"In order to perform a JNDI Lookup, an Initial Context must be established. When this is done, an Environment can be established for the context. Any dynamic/user-defined property that is added to this Controller Service will be added as an Environment configuration/variable to this Context.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a JNDI Initial Context environment variable.\",\n-                                \"value\": \"The value of the JNDI Initial Context environment variable.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"connection.factory.name\": {\n-                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n-                                \"displayName\": \"JNDI Name of the Connection Factory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection.factory.name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"java.naming.factory.initial\": {\n-                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n-                                \"displayName\": \"JNDI Initial Context Factory Class\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.factory.initial\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"java.naming.provider.url\": {\n-                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n-                                \"displayName\": \"JNDI Provider URL\",\n+                            \"Catalog Name\": {\n+                                \"description\": \"The name of the catalog used to locate the desired table. This may not apply for the database that you are querying. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n+                                \"displayName\": \"Catalog Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.provider.url\",\n-                                \"required\": true,\n+                                \"name\": \"Catalog Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"java.naming.security.credentials\": {\n-                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n-                                \"displayName\": \"JNDI Credentials\",\n+                            \"Database Connection Pooling Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database for retrieving table information.\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"java.naming.security.credentials\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"java.naming.security.principal\": {\n-                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n-                                \"displayName\": \"JNDI Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.security.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"Database Connection Pooling Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"naming.factory.libraries\": {\n-                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n-                                \"displayName\": \"JNDI / JMS Client Libraries\",\n+                            \"Schema Name\": {\n+                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly. Also notice that if the same table name exists in multiple schemas and Schema Name is not specified, the service will find those tables and give an error if the different tables have the same column name(s).\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"naming.factory.libraries\",\n+                                \"name\": \"Schema Name\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-jms-cf-service-nar\",\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                 \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n-                            \"org.apache.nifi.jms.processors.ConsumeJMS\",\n-                            \"org.apache.nifi.jms.processors.PublishJMS\"\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"integration\",\n-                            \"jms\",\n-                            \"jndi\",\n-                            \"messaging\",\n-                            \"publish\",\n-                            \"queue\",\n-                            \"subscribe\",\n-                            \"topic\"\n+                            \"database\",\n+                            \"registry\",\n+                            \"schema\",\n+                            \"table\"\n                         ],\n-                        \"type\": \"org.apache.nifi.jms.cf.JndiJmsConnectionFactoryProvider\",\n-                        \"typeDescription\": \"Provides a service to lookup an existing JMS ConnectionFactory using the Java Naming and Directory Interface (JNDI).\",\n+                        \"type\": \"org.apache.nifi.db.schemaregistry.DatabaseTableSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a service for generating a record schema from a database table definition. The service is configured to use a table name and a database connection fetches the table metadata (i.e. table definition) such as column names, data types, nullability, etc.\",\n                         \"version\": \"1.27.0\"\n                     }\n                 ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-social-media-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-social-media-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -77903,535 +75549,254 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Additional configuration property for the Connection Factory. It can be used when the Connection Factory is being configured via the 'JNDI *' or the 'JMS *'properties of the processor. For more information, see the Additional Details page.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Connection Factory configuration property.\",\n-                                \"value\": \"The value of a given Connection Factory configuration property.\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Client Library Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Acknowledgement Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically acknowledges a client's receipt of a message, regardless if NiFi session has been commited. Can result in data loss in the event where NiFi abruptly stopped before session was commited.\",\n-                                        \"displayName\": \"AUTO_ACKNOWLEDGE (1)\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"(DEFAULT) Manually acknowledges a client's receipt of a message after NiFi Session was commited, thus ensuring no data loss\",\n-                                        \"displayName\": \"CLIENT_ACKNOWLEDGE (2)\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This acknowledgment mode instructs the session to lazily acknowledge the delivery of messages. May result in both data duplication and data loss while achieving the best throughput.\",\n-                                        \"displayName\": \"DUPS_OK_ACKNOWLEDGE (3)\",\n-                                        \"value\": \"3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"The JMS Acknowledgement Mode. Using Auto Acknowledge can cause messages to be lost on restart of NiFi but may provide better performance than Client Acknowledge.\",\n-                                \"displayName\": \"Acknowledgement Mode\",\n+                            \"backfill-minutes\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of minutes (up to 5 minutes) of streaming data to be requested after a disconnect. Only available for project with academic research access. See https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/integrate/recovery-and-redundancy-features\",\n+                                \"displayName\": \"Backfill Minutes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Acknowledgement Mode\",\n+                                \"name\": \"backfill-minutes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Client ID\": {\n-                                \"description\": \"The client id to be set on the connection, if set. For durable non shared consumer this is mandatory, for all others it is optional, typically with shared consumers it is undesirable to be set. Please see JMS spec for further details\",\n-                                \"displayName\": \"Connection Client ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Connection Client ID\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Factory Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain Connection Factory. Alternatively, the 'JNDI *' or the 'JMS *' properties can also be be used to configure the Connection Factory.\",\n-                                \"displayName\": \"Connection Factory Service\",\n+                            \"backoff-attempts\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The number of reconnection tries the processor will attempt in the event of a disconnection of the stream for any reason, before throwing an exception. To start a stream after this exception occur and the connection is fixed, please stop and restart the processor. If the valueof this property is 0, then backoff will never occur and the processor will always need to be restartedif the stream fails.\",\n+                                \"displayName\": \"Backoff Attempts\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Factory Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Destination Name\": {\n-                                \"description\": \"The name of the JMS Destination. Usually provided by the administrator (e.g., 'topic://myTopic' or 'myTopic').\",\n-                                \"displayName\": \"Destination Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Destination Name\",\n+                                \"name\": \"backoff-attempts\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Destination Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"QUEUE\",\n-                                        \"value\": \"QUEUE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TOPIC\",\n-                                        \"value\": \"TOPIC\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"QUEUE\",\n-                                \"description\": \"The type of the JMS Destination. Could be one of 'QUEUE' or 'TOPIC'. Usually provided by the administrator. Defaults to 'QUEUE'\",\n-                                \"displayName\": \"Destination Type\",\n+                            \"backoff-time\": {\n+                                \"defaultValue\": \"1 mins\",\n+                                \"description\": \"The duration to backoff before requesting a new stream ifthe current one fails for any reason. Will increase by factor of 2 every time a restart fails\",\n+                                \"displayName\": \"Backoff Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Type\",\n+                                \"name\": \"backoff-time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Durable subscription\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If destination is Topic if present then make it the consumer durable. @see https://docs.oracle.com/javaee/7/api/javax/jms/Session.html#createDurableConsumer-javax.jms.Topic-java.lang.String-\",\n-                                \"displayName\": \"Durable Subscription\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Durable subscription\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Error Queue Name\": {\n-                                \"description\": \"The name of a JMS Queue where - if set - unprocessed messages will be routed. Usually provided by the administrator (e.g., 'queue://myErrorQueue' or 'myErrorQueue').Only applicable if 'Destination Type' is set to 'QUEUE'\",\n-                                \"displayName\": \"Error Queue Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Error Queue Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message Selector\": {\n-                                \"description\": \"The JMS Message Selector to filter the messages that the processor will receive\",\n-                                \"displayName\": \"Message Selector\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Message Selector\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization.\",\n-                                \"displayName\": \"Password\",\n+                            \"base-path\": {\n+                                \"defaultValue\": \"https://api.twitter.com\",\n+                                \"description\": \"The base path that the processor will use for making HTTP requests. The default value should be sufficient for most use cases.\",\n+                                \"displayName\": \"Base Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"base-path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"JMS SSL Context Service\",\n+                            \"batch-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum size of the number of Tweets to be written to a single FlowFile. Will write fewer Tweets based on the number available in the queue at the time of processor invocation.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Session Cache size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"This property is deprecated and no longer has any effect on the Processor. It will be removed in a later version.\",\n-                                \"displayName\": \"Session Cache Size\",\n+                            \"bearer-token\": {\n+                                \"description\": \"The Bearer Token provided by Twitter.\",\n+                                \"displayName\": \"Bearer Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session Cache size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Shared subscription\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If destination is Topic if present then make it the consumer shared. @see https://docs.oracle.com/javaee/7/api/javax/jms/Session.html#createSharedConsumer-javax.jms.Topic-java.lang.String-\",\n-                                \"displayName\": \"Shared Subscription\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Shared subscription\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Subscription Name\": {\n-                                \"description\": \"The name of the subscription to use if destination is Topic and is shared or durable.\",\n-                                \"displayName\": \"Subscription Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Subscription Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"1 sec\",\n-                                \"description\": \"How long to wait to consume a message from the remote broker before giving up.\",\n-                                \"displayName\": \"Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Timeout\",\n+                                \"name\": \"bearer-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"User Name\": {\n-                                \"description\": \"User Name used for authentication and authorization.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"User Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"broker\": {\n-                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n-                                \"displayName\": \"JMS Broker URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"broker\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cf\": {\n-                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n-                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cf\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cflib\": {\n-                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n-                                \"displayName\": \"JMS Client Libraries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cflib\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The name of the character set to use to construct or interpret TextMessages\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"character-set\",\n+                            \"connect-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The maximum time in which client should establish a connection with the Twitter API before a time out. Setting the value to 0 disables connection timeouts.\",\n+                                \"displayName\": \"Connect Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"connect-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"connection.factory.name\": {\n-                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n-                                \"displayName\": \"JNDI Name of the Connection Factory\",\n+                            \"expansions\": {\n+                                \"description\": \"A comma-separated list of expansions for objects in the returned tweet. See https://developer.twitter.com/en/docs/twitter-api/expansions for proper usage. Possible field values include: author_id, referenced_tweets.id, referenced_tweets.id.author_id, entities.mentions.username, attachments.poll_ids, attachments.media_keys ,in_reply_to_user_id, geo.place_id\",\n+                                \"displayName\": \"Expansions\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection.factory.name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"expansions\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"java.naming.factory.initial\": {\n-                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n-                                \"displayName\": \"JNDI Initial Context Factory Class\",\n+                            \"maximum-backoff-time\": {\n+                                \"defaultValue\": \"5 mins\",\n+                                \"description\": \"The maximum duration to backoff to start attempting a new stream.It is recommended that this number be much higher than the 'Backoff Time' property\",\n+                                \"displayName\": \"Maximum Backoff Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.factory.initial\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"maximum-backoff-time\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"java.naming.provider.url\": {\n-                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n-                                \"displayName\": \"JNDI Provider URL\",\n+                            \"media-fields\": {\n+                                \"description\": \"A comma-separated list of media fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/media for proper usage. Possible field values include: alt_text, duration_ms, height, media_key, non_public_metrics, organic_metrics, preview_image_url, promoted_metrics, public_metrics, type, url, width\",\n+                                \"displayName\": \"Media Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.provider.url\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"media-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"java.naming.security.credentials\": {\n-                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n-                                \"displayName\": \"JNDI Credentials\",\n+                            \"place-fields\": {\n+                                \"description\": \"A comma-separated list of place fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/place for proper usage. Possible field values include: contained_within, country, country_code, full_name, geo, id, name, place_type\",\n+                                \"displayName\": \"Place Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"java.naming.security.credentials\",\n+                                \"name\": \"place-fields\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"java.naming.security.principal\": {\n-                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n-                                \"displayName\": \"JNDI Principal\",\n+                            \"poll-fields\": {\n+                                \"description\": \"A comma-separated list of poll fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/poll for proper usage. Possible field values include: duration_minutes, end_datetime, id, options, voting_status\",\n+                                \"displayName\": \"Poll Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.security.principal\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"poll-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"naming.factory.libraries\": {\n-                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n-                                \"displayName\": \"JNDI / JMS Client Libraries\",\n+                            \"queue-size\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Maximum size of internal queue for streamed messages\",\n+                                \"displayName\": \"Queue Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"naming.factory.libraries\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"queue-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"output-strategy\": {\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The maximum time of inactivity between receiving tweets from Twitter through the API before a timeout. Setting the value to 0 disables read timeouts.\",\n+                                \"displayName\": \"Read Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"read-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"stream-endpoint\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Write only the message to the FlowFile record.\",\n-                                        \"displayName\": \"Use Content as Value\",\n-                                        \"value\": \"USE_VALUE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write the additional attributes into the FlowFile record on a separate leaf. (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Wrapper\",\n-                                        \"value\": \"USE_WRAPPER\"\n+                                        \"description\": \"Streams about one percent of all Tweets. https://developer.twitter.com/en/docs/twitter-api/tweets/volume-streams/api-reference/get-tweets-sample-stream\",\n+                                        \"displayName\": \"Sample Stream\",\n+                                        \"value\": \"Sample Endpoint\"\n                                     },\n                                     {\n-                                        \"description\": \"Write the additional attributes into the FlowFile record prefixed with \\\"_\\\". (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Appender\",\n-                                        \"value\": \"USE_APPENDER\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n+                                        \"description\": \"The search stream produces Tweets that match filtering rules configured on Twitter services. At least one well-formed filtering rule must be configured. https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/get-tweets-search-stream\",\n+                                        \"displayName\": \"Search Stream\",\n+                                        \"value\": \"Search Endpoint\"\n                                     }\n                                 ],\n-                                \"description\": \"The format used to output the JMS message into a FlowFile record.\",\n-                                \"displayName\": \"Output Strategy\",\n+                                \"defaultValue\": \"Sample Endpoint\",\n+                                \"description\": \"The source from which the processor will consume Tweets.\",\n+                                \"displayName\": \"Stream Endpoint\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"output-strategy\",\n+                                \"name\": \"stream-endpoint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for parsing received JMS Messages into Records.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"tweet-fields\": {\n+                                \"description\": \"A comma-separated list of tweet fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/tweet for proper usage. Possible field values include: attachments, author_id, context_annotations, conversation_id, created_at, entities, geo, id, in_reply_to_user_id, lang, non_public_metrics, organic_metrics, possibly_sensitive, promoted_metrics, public_metrics, referenced_tweets, reply_settings, source, text, withheld\",\n+                                \"displayName\": \"Tweet Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"tweet-fields\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Writer to use for serializing Records before writing them to a FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"user-fields\": {\n+                                \"description\": \"A comma-separated list of user fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/user for proper usage. Possible field values include: created_at, description, entities, id, location, name, pinned_tweet_id, profile_image_url, protected, public_metrics, url, username, verified, withheld\",\n+                                \"displayName\": \"User Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"user-fields\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n-                            \"org.apache.nifi.jms.processors.PublishJMS\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received from the JMS Destination are routed to this relationship\",\n+                                \"description\": \"FlowFiles containing an array of one or more Tweets\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a message cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"consume\",\n-                            \"get\",\n-                            \"jms\",\n-                            \"message\",\n-                            \"receive\"\n+                            \"json\",\n+                            \"social media\",\n+                            \"status\",\n+                            \"tweets\",\n+                            \"twitter\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.jms.processors.ConsumeJMS\",\n-                        \"typeDescription\": \"Consumes JMS Message of type BytesMessage, TextMessage, ObjectMessage, MapMessage or StreamMessage transforming its content to a FlowFile and transitioning it to 'success' relationship. JMS attributes such as headers and properties will be copied as FlowFile attributes. MapMessages will be transformed into JSONs and then into byte arrays. The other types will have their raw contents as byte array transferred into the flowfile.\",\n+                        \"type\": \"org.apache.nifi.processors.twitter.ConsumeTwitter\",\n+                        \"typeDescription\": \"Streams tweets from Twitter's streaming API v2. The stream provides a sample stream or a search stream based on previously uploaded rules. This processor also provides a pass through for certain fields of the tweet to be returned as part of the response. See https://developer.twitter.com/en/docs/twitter-api/data-dictionary/introduction for more information regarding the Tweet object model.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The JMSDeliveryMode from the message header.\",\n-                                \"name\": \"jms_deliveryMode\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSExpiration from the message header.\",\n-                                \"name\": \"jms_expiration\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSPriority from the message header.\",\n-                                \"name\": \"jms_priority\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSRedelivered from the message header.\",\n-                                \"name\": \"jms_redelivered\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSTimestamp from the message header.\",\n-                                \"name\": \"jms_timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSCorrelationID from the message header.\",\n-                                \"name\": \"jms_correlationId\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSMessageID from the message header.\",\n-                                \"name\": \"jms_messageId\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSType from the message header.\",\n-                                \"name\": \"jms_type\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSReplyTo from the message header.\",\n-                                \"name\": \"jms_replyTo\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSDestination from the message header.\",\n-                                \"name\": \"jms_destination\"\n-                            },\n-                            {\n-                                \"description\": \"The JMS message type, can be TextMessage, BytesMessage, ObjectMessage, MapMessage or StreamMessage).\",\n-                                \"name\": \"jms.messagetype\"\n+                                \"description\": \"The MIME Type set to application/json\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"Each message property is written to an attribute.\",\n-                                \"name\": \"other attributes\"\n+                                \"description\": \"The number of Tweets in the FlowFile\",\n+                                \"name\": \"tweets\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-social-media-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -78439,941 +75804,751 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Additional configuration property for the Connection Factory. It can be used when the Connection Factory is being configured via the 'JNDI *' or the 'JMS *'properties of the processor. For more information, see the Additional Details page.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Connection Factory configuration property.\",\n-                                \"value\": \"The value of a given Connection Factory configuration property.\"\n-                            }\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.twitter.ConsumeTwitter\"\n                         ],\n-                        \"explicitRestrictions\": [\n+                        \"deprecationReason\": \"GetTwitter relies on the Twitter Hosebird client, which is not maintained. This processor will be removed in future releases.\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Client Library Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n+                                \"description\": \"Allows users to specify the name/value of a query parameter to add to the Twitter query\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name of a query parameter to add to the Twitter query\",\n+                                \"value\": \"The value of a query parameter to add to the Twitter query\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Connection Client ID\": {\n-                                \"description\": \"The client id to be set on the connection, if set. For durable non shared consumer this is mandatory, for all others it is optional, typically with shared consumers it is undesirable to be set. Please see JMS spec for further details\",\n-                                \"displayName\": \"Connection Client ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Connection Client ID\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Factory Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain Connection Factory. Alternatively, the 'JNDI *' or the 'JMS *' properties can also be be used to configure the Connection Factory.\",\n-                                \"displayName\": \"Connection Factory Service\",\n+                            \"Access Token\": {\n+                                \"description\": \"The Access Token provided by Twitter\",\n+                                \"displayName\": \"Access Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Factory Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Destination Name\": {\n-                                \"description\": \"The name of the JMS Destination. Usually provided by the administrator (e.g., 'topic://myTopic' or 'myTopic').\",\n-                                \"displayName\": \"Destination Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Destination Name\",\n+                                \"name\": \"Access Token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Destination Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"QUEUE\",\n-                                        \"value\": \"QUEUE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TOPIC\",\n-                                        \"value\": \"TOPIC\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"QUEUE\",\n-                                \"description\": \"The type of the JMS Destination. Could be one of 'QUEUE' or 'TOPIC'. Usually provided by the administrator. Defaults to 'QUEUE'\",\n-                                \"displayName\": \"Destination Type\",\n+                            \"Access Token Secret\": {\n+                                \"description\": \"The Access Token Secret provided by Twitter\",\n+                                \"displayName\": \"Access Token Secret\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Type\",\n+                                \"name\": \"Access Token Secret\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization.\",\n-                                \"displayName\": \"Password\",\n+                            \"Consumer Key\": {\n+                                \"description\": \"The Consumer Key provided by Twitter\",\n+                                \"displayName\": \"Consumer Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n+                                \"name\": \"Consumer Key\",\n+                                \"required\": true,\n                                 \"sensitive\": true\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"JMS SSL Context Service\",\n+                            \"Consumer Secret\": {\n+                                \"description\": \"The Consumer Secret provided by Twitter\",\n+                                \"displayName\": \"Consumer Secret\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Consumer Secret\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Session Cache size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"This property is deprecated and no longer has any effect on the Processor. It will be removed in a later version.\",\n-                                \"displayName\": \"Session Cache Size\",\n+                            \"IDs to Follow\": {\n+                                \"description\": \"A comma-separated list of Twitter User ID's to follow. Ignored unless Endpoint is set to 'Filter Endpoint'.\",\n+                                \"displayName\": \"IDs to Follow\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session Cache size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"User Name\": {\n-                                \"description\": \"User Name used for authentication and authorization.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"User Name\",\n+                                \"name\": \"IDs to Follow\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"allow-illegal-chars-in-jms-header-names\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether illegal characters in header names should be sent to the JMS broker. Usually hyphens and full-stops.\",\n-                                \"displayName\": \"Allow Illegal Characters in Header Names\",\n+                            \"Languages\": {\n+                                \"description\": \"A comma-separated list of languages for which tweets should be fetched\",\n+                                \"displayName\": \"Languages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"allow-illegal-chars-in-jms-header-names\",\n-                                \"required\": true,\n+                                \"name\": \"Languages\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"attributes-to-send-as-jms-headers-regex\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be sent as JMS Headers\",\n-                                \"displayName\": \"Attributes to Send as JMS Headers (Regex)\",\n+                            \"Locations to Filter On\": {\n+                                \"description\": \"A comma-separated list of coordinates specifying one or more bounding boxes to filter on.Each bounding box is specified by a pair of coordinates in the format: swLon,swLat,neLon,neLat. Multiple bounding boxes can be specified as such: swLon1,swLat1,neLon1,neLat1,swLon2,swLat2,neLon2,neLat2.Ignored unless Endpoint is set to 'Filter Endpoint'.\",\n+                                \"displayName\": \"Locations to Filter On\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attributes-to-send-as-jms-headers-regex\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"broker\": {\n-                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n-                                \"displayName\": \"JMS Broker URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"broker\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cf\": {\n-                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n-                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cf\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cflib\": {\n-                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n-                                \"displayName\": \"JMS Client Libraries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cflib\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The name of the character set to use to construct or interpret TextMessages\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"character-set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"connection.factory.name\": {\n-                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n-                                \"displayName\": \"JNDI Name of the Connection Factory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection.factory.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"java.naming.factory.initial\": {\n-                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n-                                \"displayName\": \"JNDI Initial Context Factory Class\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.factory.initial\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"java.naming.provider.url\": {\n-                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n-                                \"displayName\": \"JNDI Provider URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.provider.url\",\n+                                \"name\": \"Locations to Filter On\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"java.naming.security.credentials\": {\n-                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n-                                \"displayName\": \"JNDI Credentials\",\n+                            \"Terms to Filter On\": {\n+                                \"description\": \"A comma-separated list of terms to filter on. Ignored unless Endpoint is set to 'Filter Endpoint'. The filter works such that if any term matches, the status update will be retrieved; multiple terms separated by a space function as an 'AND'. I.e., 'it was, hello' will retrieve status updates that have either 'hello' or both 'it' AND 'was'\",\n+                                \"displayName\": \"Terms to Filter On\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"java.naming.security.credentials\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"java.naming.security.principal\": {\n-                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n-                                \"displayName\": \"JNDI Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.security.principal\",\n+                                \"name\": \"Terms to Filter On\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"message-body-type\": {\n+                            \"Twitter Endpoint\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"bytes\",\n-                                        \"value\": \"bytes\"\n+                                        \"description\": \"The endpoint that provides public data, aka a 'garden hose'\",\n+                                        \"displayName\": \"Sample Endpoint\",\n+                                        \"value\": \"Sample Endpoint\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\n+                                        \"description\": \"The endpoint that provides access to all tweets\",\n+                                        \"displayName\": \"Firehose Endpoint\",\n+                                        \"value\": \"Firehose Endpoint\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Endpoint that allows the stream to be filtered by specific terms or User IDs\",\n+                                        \"displayName\": \"Filter Endpoint\",\n+                                        \"value\": \"Filter Endpoint\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"bytes\",\n-                                \"description\": \"The type of JMS message body to construct.\",\n-                                \"displayName\": \"Message Body Type\",\n+                                \"defaultValue\": \"Sample Endpoint\",\n+                                \"description\": \"Specifies which endpoint data should be pulled from\",\n+                                \"displayName\": \"Twitter Endpoint\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-body-type\",\n+                                \"name\": \"Twitter Endpoint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"naming.factory.libraries\": {\n-                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n-                                \"displayName\": \"JNDI / JMS Client Libraries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"naming.factory.libraries\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for parsing the incoming FlowFile into Records.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Writer to use for serializing Records before publishing them as an JMS Message.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"max-client-error-retries\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The maximum number of retries to attempt when client experience retryable connection errors. Client continues attempting to reconnect using an exponential back-off pattern until it successfully reconnects or until it reaches the retry limit.  It is recommended to raise this value when client is getting rate limited by Twitter API. Default value is 5.\",\n+                                \"displayName\": \"Max Client Error Retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"max-client-error-retries\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"This attribute becomes the JMSDeliveryMode message header. Must be an integer.\",\n-                                \"name\": \"jms_deliveryMode\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSExpiration message header. Must be an integer.\",\n-                                \"name\": \"jms_expiration\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSPriority message header. Must be an integer.\",\n-                                \"name\": \"jms_priority\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSRedelivered message header.\",\n-                                \"name\": \"jms_redelivered\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSTimestamp message header. Must be a long.\",\n-                                \"name\": \"jms_timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSCorrelationID message header.\",\n-                                \"name\": \"jms_correlationId\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSType message header. Must be an integer.\",\n-                                \"name\": \"jms_type\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSReplyTo message header. Must be an integer.\",\n-                                \"name\": \"jms_replyTo\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSDestination message header. Must be an integer.\",\n-                                \"name\": \"jms_destination\"\n-                            },\n-                            {\n-                                \"description\": \"All other attributes that do not start with jms_ are added as message properties.\",\n-                                \"name\": \"other attributes\"\n-                            },\n-                            {\n-                                \"description\": \"When an attribute will be added as a message property, a second attribute of the same name but with an extra `.type` at the end will cause the message property to be sent using that strong type. For example, attribute `delay` with value `12000` and another attribute `delay.type` with value `integer` will cause a JMS message property `delay` to be sent as an Integer rather than a String. Supported types are boolean, byte, short, integer, long, float, double, and string (which is the default).\",\n-                                \"name\": \"other attributes .type\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n-                            \"org.apache.nifi.jms.processors.ConsumeJMS\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are sent to the JMS destination are routed to this relationship\",\n+                                \"description\": \"All status updates will be routed to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be sent to JMS destination are routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"jms\",\n-                            \"message\",\n-                            \"publish\",\n-                            \"put\",\n-                            \"send\"\n+                            \"json\",\n+                            \"social media\",\n+                            \"status\",\n+                            \"tweets\",\n+                            \"twitter\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.jms.processors.PublishJMS\",\n-                        \"typeDescription\": \"Creates a JMS Message from the contents of a FlowFile and sends it to a JMS Destination (queue or topic) as JMS BytesMessage or TextMessage. FlowFile attributes will be added as JMS headers and/or properties to the outgoing JMS message.\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.twitter.GetTwitter\",\n+                        \"typeDescription\": \"Pulls status changes from Twitter's streaming API. In versions starting with 1.9.0, the Consumer Key and Access Token are marked as sensitive according to https://developer.twitter.com/en/docs/basics/authentication/guides/securing-keys-and-tokens\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets mime type to application/json\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         },\n         {\n-            \"artifact\": \"nifi-redis-nar\",\n+            \"artifact\": \"nifi-image-viewer-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-asana-services-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n+                        \"artifact\": \"nifi-asana-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Cluster Max Redirects\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The maximum number of redirects that can be performed when clustered.\",\n-                                \"displayName\": \"Cluster Max Redirects\",\n+                            \"asana-api-url\": {\n+                                \"defaultValue\": \"https://app.asana.com/api/1.0\",\n+                                \"description\": \"Base URL of Asana API. Leave it as default, unless you have your own Asana instance serving on a different URL. (typical for on-premise installations)\",\n+                                \"displayName\": \"API URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cluster Max Redirects\",\n+                                \"name\": \"asana-api-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Communication Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout to use when attempting to communicate with Redis.\",\n-                                \"displayName\": \"Communication Timeout\",\n+                            \"asana-personal-access-token\": {\n+                                \"description\": \"Similarly to entering your username/password into a website, when you access your Asana data via the API you need to authenticate. Personal Access Token (PAT) is an authentication mechanism for accessing the API. You can generate a PAT from the Asana developer console. Refer to Asana Authentication Quick Start for detailed instructions on getting started.\",\n+                                \"displayName\": \"Personal Access Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communication Timeout\",\n+                                \"name\": \"asana-personal-access-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Connection String\": {\n-                                \"description\": \"The connection string for Redis. In a standalone instance this value will be of the form hostname:port. In a sentinel instance this value will be the comma-separated list of sentinels, such as host1:port1,host2:port2,host3:port3. In a clustered instance this value will be the comma-separated list of cluster masters, such as host1:port,host2:port,host3:port.\",\n-                                \"displayName\": \"Connection String\",\n+                            \"asana-workspace-name\": {\n+                                \"description\": \"Specify which Asana workspace to use. Case sensitive. A workspace is the highest-level organizational unit in Asana. All projects and tasks have an associated workspace. An organization is a special kind of workspace that represents a company. In an organization, you can group your projects into teams.\",\n+                                \"displayName\": \"Workspace\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Connection String\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-workspace-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Database Index\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The database index to be used by connections created from this connection pool. See the databases property in redis.conf, by default databases 0-15 will be available.\",\n-                                \"displayName\": \"Database Index\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-asana-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.controller.asana.AsanaClientProviderService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"asana\",\n+                            \"authentication\",\n+                            \"service\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.controller.asana.StandardAsanaClientProviderService\",\n+                        \"typeDescription\": \"Common service to authenticate with Asana, and to work on a specified workspace.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-standard-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"attribute-list\": {\n+                                \"description\": \"Comma separated list of attributes to be included in the resulting CSV. If this value is left empty then all existing Attributes will be included. This list of attributes is case sensitive and supports attribute names that contain commas. If an attribute specified in the list is not found it will be emitted to the resulting CSV with an empty string or null depending on the 'Null Value' property. If a core attribute is specified in this list and the 'Include Core Attributes' property is false, the core attribute will be included. The attribute list ALWAYS wins.\",\n+                                \"displayName\": \"Attribute List\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database Index\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"attribute-list\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password used to authenticate to the Redis server. See the 'requirepass' property in redis.conf.\",\n-                                \"displayName\": \"Password\",\n+                            \"attributes-regex\": {\n+                                \"description\": \"Regular expression that will be evaluated against the flow file attributes to select the matching attributes. This property can be used in combination with the attributes list property.  The final output will contain a combination of matches found in the ATTRIBUTE_LIST and ATTRIBUTE_REGEX.\",\n+                                \"displayName\": \"Attributes Regular Expression\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"attributes-regex\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Pool - Block When Exhausted\": {\n+                            \"destination\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The resulting CSV string will be placed into a new flowfile attribute named 'CSVData'.  The content of the flowfile will not be changed.\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The resulting CSV string will be placed into the content of the flowfile.Existing flowfile context will be overwritten. 'CSVData' will not be written to at all (neither null nor empty string).\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-attribute\",\n+                                \"description\": \"Control if CSV value is written as a new flowfile attribute 'CSVData' or written in the flowfile content.\",\n+                                \"displayName\": \"Destination\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"destination\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"include-core-attributes\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not clients should block and wait when trying to obtain a connection from the pool when the pool has no available connections. Setting this to false means an error will occur immediately when a client requests a connection and none are available.\",\n-                                \"displayName\": \"Pool - Block When Exhausted\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Block When Exhausted\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Pool - Max Idle\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of idle connections that can be held in the pool, or a negative value if there is no limit.\",\n-                                \"displayName\": \"Pool - Max Idle\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Max Idle\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Pool - Max Total\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of connections that can be allocated by the pool (checked out to clients, or idle awaiting checkout). A negative value indicates that there is no limit.\",\n-                                \"displayName\": \"Pool - Max Total\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Max Total\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Pool - Max Wait Time\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for an available connection when Block When Exhausted is set to true.\",\n-                                \"displayName\": \"Pool - Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Max Wait Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Pool - Min Evictable Idle Time\": {\n-                                \"defaultValue\": \"60 seconds\",\n-                                \"description\": \"The minimum amount of time an object may sit idle in the pool before it is eligible for eviction.\",\n-                                \"displayName\": \"Pool - Min Evictable Idle Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Min Evictable Idle Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Pool - Min Idle\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The target for the minimum number of idle connections to maintain in the pool. If the configured value of Min Idle is greater than the configured value for Max Idle, then the value of Max Idle will be used instead.\",\n-                                \"displayName\": \"Pool - Min Idle\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Min Idle\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Pool - Num Tests Per Eviction Run\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The number of connections to tests per eviction attempt. A negative value indicates to test all connections.\",\n-                                \"displayName\": \"Pool - Num Tests Per Eviction Run\",\n+                                \"description\": \"Determines if the FlowFile org.apache.nifi.flowfile.attributes.CoreAttributes, which are contained in every FlowFile, should be included in the final CSV value generated.  Core attributes will be added to the end of the CSVData and CSVSchema strings.  The Attribute List property overrides this setting.\",\n+                                \"displayName\": \"Include Core Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Num Tests Per Eviction Run\",\n+                                \"name\": \"include-core-attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Test On Borrow\": {\n+                            \"include-schema\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not connections should be tested upon borrowing from the pool.\",\n-                                \"displayName\": \"Pool - Test On Borrow\",\n+                                \"description\": \"If true the schema (attribute names) will also be converted to a CSV string which will either be applied to a new attribute named 'CSVSchema' or applied at the first row in the content depending on the DESTINATION property setting.\",\n+                                \"displayName\": \"Include Schema\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Test On Borrow\",\n+                                \"name\": \"include-schema\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Test On Create\": {\n+                            \"null-value\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not connections should be tested upon creation.\",\n-                                \"displayName\": \"Pool - Test On Create\",\n+                                \"description\": \"If true a non existing or empty attribute will be 'null' in the resulting CSV. If false an empty string will be placed in the CSV\",\n+                                \"displayName\": \"Null Value\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Test On Create\",\n+                                \"name\": \"null-value\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Successfully converted attributes to CSV\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Pool - Test On Return\": {\n+                            {\n+                                \"description\": \"Failed to convert attributes to CSV\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"attributes\",\n+                            \"csv\",\n+                            \"flowfile\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.AttributesToCSV\",\n+                        \"typeDescription\": \"Generates a CSV representation of the input FlowFile Attributes. The resulting CSV can be written to either a newly generated attribute named 'CSVAttributes' or written to the FlowFile as content.  If the attribute value contains a comma, newline or double quote, then the attribute value will be escaped with double quotes.  Any double quote characters in the attribute value are escaped with another double quote.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"CSV representation of the Schema\",\n+                                \"name\": \"CSVSchema\"\n+                            },\n+                            {\n+                                \"description\": \"CSV representation of Attributes\",\n+                                \"name\": \"CSVData\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Attributes List\": {\n+                                \"description\": \"Comma separated list of attributes to be included in the resulting JSON. If this value is left empty then all existing Attributes will be included. This list of attributes is case sensitive. If an attribute specified in the list is not found it will be be emitted to the resulting JSON with an empty string or NULL value.\",\n+                                \"displayName\": \"Attributes List\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Attributes List\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Destination\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not connections should be tested upon returning to the pool.\",\n-                                \"displayName\": \"Pool - Test On Return\",\n+                                \"defaultValue\": \"flowfile-attribute\",\n+                                \"description\": \"Control if JSON value is written as a new flowfile attribute 'JSONAttributes' or written in the flowfile content. Writing to flowfile content will overwrite any existing flowfile content.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Test On Return\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Test While Idle\": {\n+                            \"Include Core Attributes\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not connections should be tested while idle.\",\n-                                \"displayName\": \"Pool - Test While Idle\",\n+                                \"description\": \"Determines if the FlowFile org.apache.nifi.flowfile.attributes.CoreAttributes which are contained in every FlowFile should be included in the final JSON value generated.\",\n+                                \"displayName\": \"Include Core Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Test While Idle\",\n+                                \"name\": \"Include Core Attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Time Between Eviction Runs\": {\n-                                \"defaultValue\": \"30 seconds\",\n-                                \"description\": \"The amount of time between attempting to evict idle connections from the pool.\",\n-                                \"displayName\": \"Pool - Time Between Eviction Runs\",\n+                            \"JSON Handling Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Escapes JSON attribute values to strings\",\n+                                        \"displayName\": \"Escaped\",\n+                                        \"value\": \"ESCAPED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Handles JSON attribute values as nested structured objects or arrays\",\n+                                        \"displayName\": \"Nested\",\n+                                        \"value\": \"NESTED\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ESCAPED\",\n+                                \"description\": \"Strategy to use for handling attributes which contain nested JSON.\",\n+                                \"displayName\": \"JSON Handling Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Time Between Eviction Runs\",\n+                                \"name\": \"JSON Handling Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Redis Mode\": {\n+                            \"Null Value\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A single standalone Redis instance.\",\n-                                        \"displayName\": \"Standalone\",\n-                                        \"value\": \"Standalone\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Redis Sentinel which provides high-availability. Described further at https://redis.io/topics/sentinel\",\n-                                        \"displayName\": \"Sentinel\",\n-                                        \"value\": \"Sentinel\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Clustered Redis which provides sharding and replication. Described further at https://redis.io/topics/cluster-spec\",\n-                                        \"displayName\": \"Cluster\",\n-                                        \"value\": \"Cluster\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Standalone\",\n-                                \"description\": \"The type of Redis being communicated with - standalone, sentinel, or clustered.\",\n-                                \"displayName\": \"Redis Mode\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true a non existing selected attribute will be NULL in the resulting JSON. If false an empty string will be placed in the JSON\",\n+                                \"displayName\": \"Null Value\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Redis Mode\",\n+                                \"name\": \"Null Value\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Pretty Print\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"flowfile-content\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Destination\",\n+                                        \"propertyName\": \"Destination\"\n+                                    }\n+                                ],\n+                                \"description\": \"Apply pretty print formatting to the output.\",\n+                                \"displayName\": \"Pretty Print\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Sentinel Master\": {\n-                                \"description\": \"The name of the sentinel master, require when Mode is set to Sentinel\",\n-                                \"displayName\": \"Sentinel Master\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Sentinel Master\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Sentinel Password\": {\n-                                \"description\": \"The password used to authenticate to the Redis Sentinel server. See the 'requirepass' and 'sentinel sentinel-pass' properties in sentinel.conf.\",\n-                                \"displayName\": \"Sentinel Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Sentinel Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Sentinel Username\": {\n-                                \"description\": \"The username used to authenticate to the Redis sentinel server.\",\n-                                \"displayName\": \"Sentinel Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Sentinel Username\",\n-                                \"required\": false,\n+                                \"name\": \"Pretty Print\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username used to authenticate to the Redis server.\",\n-                                \"displayName\": \"Username\",\n+                            \"attributes-to-json-regex\": {\n+                                \"description\": \"Regular expression that will be evaluated against the flow file attributes to select the matching attributes. This property can be used in combination with the attributes list property.\",\n+                                \"displayName\": \"Attributes Regular Expression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"attributes-to-json-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-redis-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Successfully converted attributes to JSON\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Failed to convert attributes to JSON\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"redis\"\n+                            \"attributes\",\n+                            \"flowfile\",\n+                            \"json\"\n                         ],\n-                        \"type\": \"org.apache.nifi.redis.service.RedisConnectionPoolService\",\n-                        \"typeDescription\": \"A service that provides connections to Redis.\",\n-                        \"version\": \"1.27.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.AttributesToJSON\",\n+                        \"typeDescription\": \"Generates a JSON representation of the input FlowFile Attributes. The resulting JSON can be written to either a new Attribute 'JSONAttributes' or written to the FlowFile as content. Attributes  which contain nested JSON objects can either be handled as JSON or as escaped JSON depending on the strategy chosen.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"JSON representation of Attributes\",\n+                                \"name\": \"JSONAttributes\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.standard.EncodeContent\"\n+                        ],\n+                        \"deprecationReason\": \"EncodeContent supports Base64 and additional encoding schemes\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"redis-cache-ttl\": {\n-                                \"defaultValue\": \"0 secs\",\n-                                \"description\": \"Indicates how long the data should exist in Redis. Setting '0 secs' would mean the data would exist forever\",\n-                                \"displayName\": \"TTL\",\n+                            \"Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Encode\",\n+                                        \"value\": \"Encode\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Decode\",\n+                                        \"value\": \"Decode\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Encode\",\n+                                \"description\": \"Specifies whether the content should be encoded or decoded\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redis-cache-ttl\",\n+                                \"name\": \"Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"redis-connection-pool\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Redis Connection Pool\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redis-connection-pool\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-redis-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Any FlowFile that is successfully encoded or decoded will be routed to success\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Any FlowFile that cannot be encoded or decoded will be routed to failure\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"redis\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.redis.service.RedisDistributedMapCacheClientService\",\n-                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Redis as the backing cache. This service relies on the WATCH, MULTI, and EXEC commands in Redis, which are not fully supported when Redis is clustered. As a result, this service can only be used with a Redis Connection Pool that is configured for standalone or sentinel mode. Sentinel mode can be used to provide high-availability configurations.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"redis-cache-ttl\": {\n-                                \"defaultValue\": \"0 secs\",\n-                                \"description\": \"Indicates how long the data should exist in Redis. Setting '0 secs' would mean the data would exist forever\",\n-                                \"displayName\": \"TTL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redis-cache-ttl\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"redis-connection-pool\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Redis Connection Pool\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redis-connection-pool\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-redis-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                \"version\": \"1.27.0\"\n-                            }\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"redis\"\n+                            \"base64\",\n+                            \"encode\"\n                         ],\n-                        \"type\": \"org.apache.nifi.redis.service.SimpleRedisDistributedMapCacheClientService\",\n-                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Redis as the backing cache. This service is intended to be used when a non-atomic DistributedMapCacheClient is required.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.Base64EncodeContent\",\n+                        \"typeDescription\": \"Encodes or decodes content to and from base64\",\n                         \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-tcp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-tcp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -79381,570 +76556,658 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"Unmaintained and planned for removal in version 2.0\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Sets a FlowFile attribute specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A FlowFile attribute to set\",\n-                                \"value\": \"The value to set it to\"\n+                                \"description\": \"A Record Path value, pointing to a field to be counted\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Record Path property\",\n+                                \"value\": \"The Record Path value\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"connection-attempt-timeout\": {\n-                                \"defaultValue\": \"3\",\n-                                \"description\": \"The number of times to try and establish a connection, before using a backup host if available. This same attempt count would be used for a backup host as well.\",\n-                                \"displayName\": \"Connection Attempt Count\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"connection-attempt-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"end-of-message-byte\": {\n-                                \"defaultValue\": \"13\",\n-                                \"description\": \"Byte value which denotes end of message. Must be specified as integer within the valid byte range (-128 thru 127). For example, '13' = Carriage return and '10' = New line. Default '13'.\",\n-                                \"displayName\": \"End of message delimiter byte\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"end-of-message-byte\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"endpoint-list\": {\n-                                \"description\": \"A comma delimited list of the endpoints to connect to. The format should be <server_address>:<port>. Only one server will be connected to at a time, the others will be used as fail overs.\",\n-                                \"displayName\": \"Endpoint List\",\n+                            \"record-stats-limit\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Limit the number of individual stats that are returned for each record path to the top N results.\",\n+                                \"displayName\": \"record-stats-limit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"endpoint-list\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"record-stats-limit\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"receive-buffer-size\": {\n-                                \"defaultValue\": \"16MB\",\n-                                \"description\": \"The size of the buffer to receive data in. Default 16384 (16MB).\",\n-                                \"displayName\": \"Receive Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"receive-buffer-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"reconnect-interval\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The number of seconds to wait before attempting to reconnect to the endpoint.\",\n-                                \"displayName\": \"Reconnect interval\",\n+                            \"record-stats-reader\": {\n+                                \"description\": \"A record reader to use for reading the records.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reconnect-interval\",\n+                                \"name\": \"record-stats-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The relationship that all incomplete messages from the endpoint will be sent to. Incomplete message is the message that doesn't end with 'End of message delimiter byte'. This can happen when 'Receive Buffer Size' is smaller then the incoming message. If that happens that the subsequent message that completes the previous incomplete message will also end up in this relationship, after which subsequent 'complete' messages will go to 'success'.\",\n-                                \"name\": \"Partial\"\n+                                \"description\": \"If a flowfile is successfully processed, it goes here.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The relationship that all sucessful messages from the endpoint will be sent to.\",\n-                                \"name\": \"Success\"\n+                                \"description\": \"If a flowfile fails to be processed, it goes here.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"poll\",\n-                            \"source\",\n-                            \"tcp\"\n+                            \"metrics\",\n+                            \"record\",\n+                            \"stats\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gettcp.GetTCP\",\n-                        \"typeDescription\": \"Connects over TCP to the provided endpoint(s). Received data will be written as content to the FlowFile\",\n+                        \"type\": \"org.apache.nifi.processors.standard.CalculateRecordStats\",\n+                        \"typeDescription\": \"A processor that can count the number of items in a record set, as well as provide counts based on user-defined criteria on subsets of the record set.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The address of the source endpoint the message came from\",\n-                                \"name\": \"source.endpoint\"\n+                                \"description\": \"A count of the records in the record set in the FlowFile.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"A count of the records that contain a value for the user defined property.\",\n+                                \"name\": \"recordStats.<User Defined Property Name>.count\"\n+                            },\n+                            {\n+                                \"description\": \"Each value discovered for the user defined property will have its own count attribute. Total number of top N value counts to be added is defined by the limit configuration.\",\n+                                \"name\": \"recordStats.<User Defined Property Name>.<value>.count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-language-translation-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-language-translation-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"User-defined properties are used to translate arbitrary text based on attributes.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of an attribute to set that will contain the translated text of the value\",\n-                                \"value\": \"The value to translate\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the data to be translated\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Compression Format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"use mime.type attribute\",\n+                                        \"value\": \"use mime.type attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"deflate\",\n+                                        \"value\": \"deflate\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"bzip2\",\n+                                        \"value\": \"bzip2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"xz-lzma2\",\n+                                        \"value\": \"xz-lzma2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lzma\",\n+                                        \"value\": \"lzma\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy-hadoop\",\n+                                        \"value\": \"snappy-hadoop\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy framed\",\n+                                        \"value\": \"snappy framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4-framed\",\n+                                        \"value\": \"lz4-framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"zstd\",\n+                                        \"value\": \"zstd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"brotli\",\n+                                        \"value\": \"brotli\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"use mime.type attribute\",\n+                                \"description\": \"The compression format to use. Valid values are: GZIP, Deflate, ZSTD, BZIP2, XZ-LZMA2, LZMA, Brotli, Snappy, Snappy Hadoop, Snappy Framed, and LZ4-Framed\",\n+                                \"displayName\": \"Compression Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Compression Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Input Language\": {\n-                                \"description\": \"The language of incoming data. If no language is set, Yandex will attempt to detect the incoming language automatically.\",\n-                                \"displayName\": \"Input Language\",\n+                            \"Compression Level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"0\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"3\",\n+                                        \"value\": \"3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"4\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"5\",\n+                                        \"value\": \"5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"6\",\n+                                        \"value\": \"6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"7\",\n+                                        \"value\": \"7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"8\",\n+                                        \"value\": \"8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"9\",\n+                                        \"value\": \"9\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"zstd\",\n+                                            \"use mime.type attribute\",\n+                                            \"deflate\",\n+                                            \"brotli\",\n+                                            \"gzip\",\n+                                            \"xz-lzma2\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Compression Format\",\n+                                        \"propertyName\": \"Compression Format\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"compress\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Mode\",\n+                                        \"propertyName\": \"Mode\"\n+                                    }\n+                                ],\n+                                \"description\": \"The compression level to use; this is valid only when using gzip, deflate or xz-lzma2 compression. A lower value results in faster processing but less compression; a value of 0 indicates no (that is, simple archiving) for gzip or minimal for xz-lzma2 compression. Higher levels can mean much larger memory usage such as the case with levels 7-9 for xz-lzma/2 so be careful relative to heap size.\",\n+                                \"displayName\": \"Compression Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Input Language\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Compression Level\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Target Language\": {\n-                                \"defaultValue\": \"en\",\n-                                \"description\": \"The language to translate the text into\",\n-                                \"displayName\": \"Target Language\",\n+                            \"Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"compress\",\n+                                        \"value\": \"compress\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"decompress\",\n+                                        \"value\": \"decompress\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"compress\",\n+                                \"description\": \"Indicates whether the processor should compress content or decompress content. Must be either 'compress' or 'decompress'\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Target Language\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Translate Content\": {\n+                            \"Update Filename\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the content should be translated. If false, only the text specified by user-defined properties will be translated.\",\n-                                \"displayName\": \"Translate Content\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Translate Content\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Yandex API Key\": {\n-                                \"description\": \"The API Key that is registered with Yandex\",\n-                                \"displayName\": \"Yandex API Key\",\n+                                \"description\": \"If true, will remove the filename extension when decompressing data (only if the extension indicates the appropriate compression format) and add the appropriate extension when compressing data\",\n+                                \"displayName\": \"Update Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Yandex API Key\",\n+                                \"name\": \"Update Filename\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"description\": \"This relationship is used if the translation cannot be performed for some reason other than communications failure\",\n-                                \"name\": \"translation.failure\"\n-                            },\n+                                \"description\": \"If the Compression Format is set to use mime.type attribute, this attribute is used to determine the compression type. Otherwise, this attribute is ignored.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"This relationship is used when the translation is successful\",\n+                                \"description\": \"FlowFiles will be transferred to the success relationship after successfully being compressed or decompressed\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"This relationship is used when the translation fails due to a problem such as a network failure, and for which the translation should be attempted again\",\n-                                \"name\": \"comms.failure\"\n+                                \"description\": \"FlowFiles will be transferred to the failure relationship if they fail to compress/decompress\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"CPU\"\n+                            },\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"language\",\n-                            \"translate\",\n-                            \"translation\",\n-                            \"yandex\"\n+                            \"brotli\",\n+                            \"bzip2\",\n+                            \"compress\",\n+                            \"content\",\n+                            \"decompress\",\n+                            \"deflate\",\n+                            \"gzip\",\n+                            \"lz4-framed\",\n+                            \"lzma\",\n+                            \"snappy\",\n+                            \"snappy framed\",\n+                            \"snappy-hadoop\",\n+                            \"xz-lzma2\",\n+                            \"zstd\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.yandex.YandexTranslate\",\n-                        \"typeDescription\": \"Translates content and attributes from one language to another\",\n+                        \"type\": \"org.apache.nifi.processors.standard.CompressContent\",\n+                        \"typeDescription\": \"Compresses or decompresses the contents of FlowFiles using a user-specified compression algorithm and updates the mime.type attribute as appropriate. A common idiom is to precede CompressContent with IdentifyMimeType and configure Mode='decompress' AND Compression Format='use mime.type attribute'. When used in this manner, the MIME type is automatically detected and the data is decompressed, if necessary. If decompression is unnecessary, the data is passed through to the 'success' relationship. This processor operates in a very memory efficient way so very large objects well beyond the heap size are generally fine to process.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"If the text cannot be translated, this attribute will be set indicating the reason for the failure\",\n-                                \"name\": \"yandex.translate.failure.reason\"\n-                            },\n-                            {\n-                                \"description\": \"When the translation succeeds, if the content was translated, this attribute will be set indicating the new language of the content\",\n-                                \"name\": \"language\"\n+                                \"description\": \"If the Mode property is set to compress, the appropriate MIME Type is set. If the Mode property is set to decompress and the file is successfully decompressed, this attribute is removed, as the MIME Type is no longer known.\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-poi-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-poi-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n+                            \"Grouping Attribute\": {\n+                                \"description\": \"By default, a single \\\"throttle\\\" is used for all FlowFiles. If this value is specified, a separate throttle is used for each value specified by the attribute with this name. Changing this value resets the rate counters.\",\n+                                \"displayName\": \"Grouping Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n+                                \"name\": \"Grouping Attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n+                            \"Maximum Data Rate\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"PASSWORD\"\n+                                            \"data rate or flowfile count\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Protection Type\",\n-                                        \"propertyName\": \"Protection Type\"\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\n                                     }\n                                 ],\n-                                \"description\": \"The password for a password protected Excel spreadsheet\",\n-                                \"displayName\": \"Password\",\n+                                \"description\": \"The maximum rate at which data should pass through this processor. The format of this property is expected to be a Data Size (such as '1 MB') representing bytes per Time Duration.\",\n+                                \"displayName\": \"Maximum Data Rate\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"name\": \"Maximum Data Rate\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Protection Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"An Excel spreadsheet not protected by a password\",\n-                                        \"displayName\": \"Unprotected\",\n-                                        \"value\": \"UNPROTECTED\"\n-                                    },\n+                            \"Maximum FlowFile Rate\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"An Excel spreadsheet protected by a password\",\n-                                        \"displayName\": \"Password Protected\",\n-                                        \"value\": \"PASSWORD\"\n+                                        \"dependentValues\": [\n+                                            \"data rate or flowfile count\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UNPROTECTED\",\n-                                \"description\": \"Specifies whether an Excel spreadsheet is protected by a password or not.\",\n-                                \"displayName\": \"Protection Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protection Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Required Sheets\": {\n-                                \"description\": \"Comma-separated list of Excel document sheet names whose rows should be extracted from the excel document. If this property is left blank then all the rows from all the sheets will be extracted from the Excel document. The list of names is case sensitive. Any sheets not specified in this value will be ignored. An exception will be thrown if a specified sheet(s) are not found.\",\n-                                \"displayName\": \"Required Sheets\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Required Sheets\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Starting Row\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The row number of the first row to start processing (One based). Use this to skip over rows of data at the top of a worksheet that are not part of the dataset.\",\n-                                \"displayName\": \"Starting Row\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Starting Row\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n+                                \"description\": \"The maximum rate at which FlowFiles should pass through this processor. The format of this property is expected to be a positive integer representing FlowFiles count per Time Duration\",\n+                                \"displayName\": \"Maximum FlowFile Rate\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n+                                \"name\": \"Maximum FlowFile Rate\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n+                            \"Maximum Rate\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"data rate\",\n+                                            \"attribute value\",\n+                                            \"flowfile count\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum rate at which data should pass through this processor. The format of this property is expected to be a positive integer, or a Data Size (such as '1 MB') if Rate Control Criteria is set to 'data rate'.\",\n+                                \"displayName\": \"Maximum Rate\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n+                                \"name\": \"Maximum Rate\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"Rate Control Criteria\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                        \"description\": \"Rate is controlled by counting bytes transferred per time duration.\",\n+                                        \"displayName\": \"data rate\",\n+                                        \"value\": \"data rate\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n+                                        \"description\": \"Rate is controlled by counting FlowFiles transferred per time duration\",\n+                                        \"displayName\": \"flowfile count\",\n+                                        \"value\": \"flowfile count\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n+                                        \"description\": \"Rate is controlled by accumulating the value of a specified attribute that is transferred per time duration\",\n+                                        \"displayName\": \"attribute value\",\n+                                        \"value\": \"attribute value\"\n                                     },\n                                     {\n-                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n-                                        \"displayName\": \"Infer Schema\",\n-                                        \"value\": \"infer-schema\"\n+                                        \"description\": \"Rate is controlled by counting bytes and FlowFiles transferred per time duration; if either threshold is met, throttling is enforced\",\n+                                        \"displayName\": \"data rate or flowfile count\",\n+                                        \"value\": \"data rate or flowfile count\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"infer-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"data rate\",\n+                                \"description\": \"Indicates the criteria that is used to control the throughput rate. Changing this value resets the rate counters.\",\n+                                \"displayName\": \"Rate Control Criteria\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"Rate Control Criteria\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n+                            \"Rate Controlled Attribute\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-name\"\n+                                            \"attribute value\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                                \"description\": \"The name of an attribute whose values build toward the rate limit if Rate Control Criteria is set to 'attribute value'. The value of the attribute referenced by this property must be a positive long, or the FlowFile will be routed to failure. This value is ignored if Rate Control Criteria is not set to 'attribute value'. Changing this value resets the rate counters.\",\n+                                \"displayName\": \"Rate Controlled Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Rate Controlled Attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"Time Duration\": {\n+                                \"defaultValue\": \"1 min\",\n+                                \"description\": \"The amount of time to which the Maximum Rate pertains. Changing this value resets the rate counters.\",\n+                                \"displayName\": \"Time Duration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Time Duration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles are transferred to this relationship under normal conditions\",\n+                                \"name\": \"success\"\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                            {\n+                                \"description\": \"FlowFiles will be routed to this relationship if they are missing a necessary Rate Controlled Attribute or the attribute is not in the expected format\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"rate\",\n+                            \"rate control\",\n+                            \"throttle\",\n+                            \"throughput\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ControlRate\",\n+                        \"typeDescription\": \"Controls the rate at which data is transferred to follow-on processors. If you configure a very small Time Duration, then the accuracy of the throttle gets worse. You can improve this accuracy by decreasing the Yield Duration, at the expense of more Tasks given to the processor.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Input Character Set\": {\n+                                \"description\": \"The name of the CharacterSet to expect for Input\",\n+                                \"displayName\": \"Input Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n+                                \"name\": \"Input Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"Output Character Set\": {\n+                                \"description\": \"The name of the CharacterSet to convert to\",\n+                                \"displayName\": \"Output Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"name\": \"Output Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cell\",\n-                            \"excel\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"row\",\n-                            \"spreadsheet\",\n-                            \"values\",\n-                            \"xlsx\"\n+                            \"character set\",\n+                            \"characterset\",\n+                            \"convert\",\n+                            \"text\"\n                         ],\n-                        \"type\": \"org.apache.nifi.excel.ExcelReader\",\n-                        \"typeDescription\": \"Parses a Microsoft Excel document returning each row in each sheet as a separate record. This reader allows for inferring a schema from all the required sheets or providing an explicit schema for interpreting the values.See Controller Service's Usage for further documentation. This reader is currently only capable of processing .xlsx (XSSF 2007 OOXML file format) Excel documents and not older .xls (HSSF '97(-2007) file format) documents.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ConvertCharacterSet\",\n+                        \"typeDescription\": \"Converts a FlowFile's content from one character set to another\",\n                         \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-poi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -79952,3952 +77215,5411 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.csv.CSVRecordSetWriter\",\n-                            \"org.apache.nifi.excel.ExcelReader\",\n-                            \"org.apache.nifi.processors.standard.ConvertRecord\"\n-                        ],\n-                        \"deprecationReason\": \"ConvertExcelToCSVProcessor is no longer needed since there is now the ExcelReader which along with CSVRecordSetWriter can be used in ConvertRecord to achieve the same thing.\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"CSV Format\": {\n+                            \"Catalog Name\": {\n+                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty\",\n+                                \"displayName\": \"Catalog Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Catalog Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"JDBC Connection Pool\": {\n+                                \"description\": \"Specifies the JDBC Connection Pool to use in order to convert the JSON message to a SQL statement. The Connection Pool is necessary in order to determine the appropriate database column types.\",\n+                                \"displayName\": \"JDBC Connection Pool\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"JDBC Connection Pool\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Schema Name\": {\n+                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Schema Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Statement Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n-                                        \"displayName\": \"Custom Format\",\n-                                        \"value\": \"custom\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n-                                        \"displayName\": \"RFC 4180\",\n-                                        \"value\": \"rfc-4180\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UPDATE\",\n+                                        \"value\": \"UPDATE\"\n                                     },\n                                     {\n-                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n-                                        \"displayName\": \"Microsoft Excel\",\n-                                        \"value\": \"excel\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INSERT\",\n+                                        \"value\": \"INSERT\"\n                                     },\n                                     {\n-                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n-                                        \"displayName\": \"Tab-Delimited\",\n-                                        \"value\": \"tdf\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DELETE\",\n+                                        \"value\": \"DELETE\"\n                                     },\n                                     {\n-                                        \"description\": \"CSV data follows the format used by MySQL\",\n-                                        \"displayName\": \"MySQL Format\",\n-                                        \"value\": \"mysql\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Use statement.type Attribute\",\n+                                        \"value\": \"Use statement.type Attribute\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the type of SQL Statement to generate\",\n+                                \"displayName\": \"Statement Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Statement Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Table Name\": {\n+                                \"description\": \"The name of the table that the statement should update\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Translate Field Names\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n-                                        \"displayName\": \"Informix Unload\",\n-                                        \"value\": \"informix-unload\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n-                                        \"displayName\": \"Informix Unload Escape Disabled\",\n-                                        \"value\": \"informix-unload-csv\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"custom\",\n-                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n-                                \"displayName\": \"CSV Format\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, the Processor will attempt to translate JSON field names into the appropriate column names for the table specified. If false, the JSON field names must match the column names exactly, or the column will not be updated\",\n+                                \"displayName\": \"Translate Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CSV Format\",\n-                                \"required\": true,\n+                                \"name\": \"Translate Field Names\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Comment Marker\": {\n-                                \"dependencies\": [\n+                            \"Unmatched Column Behavior\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"Any column in the database that does not have a field in the JSON document will be assumed to not be required.  No notification will be logged\",\n+                                        \"displayName\": \"Ignore Unmatched Columns\",\n+                                        \"value\": \"Ignore Unmatched Columns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Any column in the database that does not have a field in the JSON document will be assumed to not be required.  A warning will be logged\",\n+                                        \"displayName\": \"Warn on Unmatched Columns\",\n+                                        \"value\": \"Warn on Unmatched Columns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the JSON document.  An error will be logged\",\n+                                        \"displayName\": \"Fail on Unmatched Columns\",\n+                                        \"value\": \"Fail on Unmatched Columns\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n-                                \"displayName\": \"Comment Marker\",\n+                                \"defaultValue\": \"Fail on Unmatched Columns\",\n+                                \"description\": \"If an incoming JSON element does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Column Behavior\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Comment Marker\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Unmatched Column Behavior\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Escape Character\": {\n-                                \"defaultValue\": \"\\\\\",\n-                                \"dependencies\": [\n+                            \"Unmatched Field Behavior\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"Any field in the JSON document that cannot be mapped to a column in the database is ignored\",\n+                                        \"displayName\": \"Ignore Unmatched Fields\",\n+                                        \"value\": \"Ignore Unmatched Fields\"\n+                                    },\n+                                    {\n+                                        \"description\": \"If the JSON document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n+                                        \"displayName\": \"Fail\",\n+                                        \"value\": \"Fail\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n-                                \"displayName\": \"Escape Character\",\n+                                \"defaultValue\": \"Ignore Unmatched Fields\",\n+                                \"description\": \"If an incoming JSON element has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Field Behavior\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Unmatched Field Behavior\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Update Keys\": {\n+                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the table's Primary Keys are used. In this case, if no Primary Key exists, the conversion to SQL will fail if Unmatched Column Behaviour is set to FAIL. This property is ignored if the Statement Type is INSERT\",\n+                                \"displayName\": \"Update Keys\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n-                                \"required\": true,\n+                                \"name\": \"Update Keys\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Include Header Line\": {\n+                            \"jts-quoted-identifiers\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not the CSV column names should be written out as the first line.\",\n-                                \"displayName\": \"Include Header Line\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n+                                \"displayName\": \"Quote Column Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Header Line\",\n-                                \"required\": true,\n+                                \"name\": \"jts-quoted-identifiers\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Include Trailing Delimiter\": {\n+                            \"jts-quoted-table-identifiers\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"If true, a trailing delimiter will be added to each CSV Record that is written. If false, the trailing delimiter will be omitted.\",\n-                                \"displayName\": \"Include Trailing Delimiter\",\n+                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name\",\n+                                \"displayName\": \"Quote Table Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Trailing Delimiter\",\n+                                \"name\": \"jts-quoted-table-identifiers\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"jts-sql-param-attr-prefix\": {\n+                                \"defaultValue\": \"sql\",\n+                                \"description\": \"The string to be prepended to the outgoing flow file attributes, such as <sql>.args.1.value, where <sql> is replaced with the specified value\",\n+                                \"displayName\": \"SQL Parameter Attribute Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"jts-sql-param-attr-prefix\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Null String\": {\n-                                \"dependencies\": [\n+                            \"table-schema-cache-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies how many Table Schemas should be cached\",\n+                                \"displayName\": \"Table Schema Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"table-schema-cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.PutDatabaseRecord\",\n+                            \"org.apache.nifi.processors.standard.PutSQL\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship when its contents have successfully been converted into a SQL statement\",\n+                                \"name\": \"sql\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be converted into a SQL statement. Common causes include invalid JSON content or the JSON content missing a required field (if using an INSERT statement type).\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"When a FlowFile is converted to SQL, the original JSON FlowFile is routed to this relationship\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"database\",\n+                            \"delete\",\n+                            \"flat\",\n+                            \"insert\",\n+                            \"json\",\n+                            \"rdbms\",\n+                            \"relational\",\n+                            \"sql\",\n+                            \"update\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ConvertJSONToSQL\",\n+                        \"typeDescription\": \"Converts a JSON-formatted FlowFile into an UPDATE, INSERT, or DELETE SQL statement. The incoming FlowFile is expected to be \\\"flat\\\" JSON message, meaning that it consists of a single JSON element and each field maps to a simple type. If a field maps to a JSON object, that JSON object will be interpreted as Text. If the input is an array of JSON elements, each element in the array is output as a separate FlowFile to the 'sql' relationship. Upon successful conversion, the original FlowFile is routed to the 'original' relationship and the SQL is routed to the 'sql' relationship.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets mime.type of FlowFile that is routed to 'sql' to 'text/plain'.\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the <sql>.table attribute of FlowFile that is routed to 'sql' to the name of the table that is updated by the SQL statement. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n+                                \"name\": \"<sql>.table\"\n+                            },\n+                            {\n+                                \"description\": \"If the Catalog name is set for this database, specifies the name of the catalog that the SQL statement will update. If no catalog is used, this attribute will not be added. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n+                                \"name\": \"<sql>.catalog\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles routed to the 'sql' relationship for the same incoming FlowFile (multiple will be output for the same incoming FlowFile if the incoming FlowFile is a JSON Array) will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"The number of SQL FlowFiles that were produced for same incoming FlowFile. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming FlowFile.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same incoming FlowFile. This can be used in conjunction with the fragment.identifier and fragment.count attributes to know which FlowFiles originated from the same incoming FlowFile and in what order the SQL FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The output SQL statements are parametrized in order to avoid SQL Injection Attacks. The types of the Parameters to use are stored in attributes named <sql>.args.1.type, <sql>.args.2.type, <sql>.args.3.type, and so on. The type is a number representing a JDBC Type constant. Generally, this is useful only for software to read and interpret but is added so that a processor such as PutSQL can understand how to interpret the values. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n+                                \"name\": \"<sql>.args.N.type\"\n+                            },\n+                            {\n+                                \"description\": \"The output SQL statements are parametrized in order to avoid SQL Injection Attacks. The values of the Parameters to use are stored in the attributes named sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. Each of these attributes has a corresponding <sql>.args.N.type attribute that indicates how the value should be interpreted when inserting it into the database.The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n+                                \"name\": \"<sql>.args.N.value\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"include-zero-record-flowfiles\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies a String that, if present as a value in the CSV, should be considered a null field instead of using the literal value.\",\n-                                \"displayName\": \"Null String\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When converting an incoming FlowFile, if the conversion results in no data, this property specifies whether or not a FlowFile will be sent to the corresponding relationship\",\n+                                \"displayName\": \"Include Zero Record FlowFiles\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null String\",\n-                                \"required\": false,\n+                                \"name\": \"include-zero-record-flowfiles\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Character\": {\n-                                \"defaultValue\": \"\\\"\",\n-                                \"dependencies\": [\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"convert\",\n+                            \"csv\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"log\",\n+                            \"logs\",\n+                            \"record\",\n+                            \"schema\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ConvertRecord\",\n+                        \"typeDescription\": \"Converts records from one data format to another using configured Record Reader and Record Write Controller Services. The Reader and Writer must be configured with \\\"matching\\\" schemas. By this, we mean the schemas must have the same field names. The types of the fields do not have to be the same if a field value can be coerced from one type to another. For instance, if the input schema has a field named \\\"balance\\\" of type double, the output schema can have a field named \\\"balance\\\" with a type of string, double, or float. If any field is present in the input that is not present in the output, the field will be left out of the output. If any field is specified in the output schema but is not present in the input data/schema, then the field will not be present in the output or will have a null value, depending on the writer.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"ajust-immediately\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n-                                \"displayName\": \"Quote Character\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the counter will be updated immediately, without regard to whether the ProcessSession is commit or rolled back;otherwise, the counter will be incremented only if and when the ProcessSession is committed.\",\n+                                \"displayName\": \"Call Immediate Adjustment\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ajust-immediately\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Mode\": {\n+                            \"character-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"All values will be quoted using the configured quote character.\",\n-                                        \"displayName\": \"Quote All Values\",\n-                                        \"value\": \"ALL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n-                                        \"displayName\": \"Quote Minimal\",\n-                                        \"value\": \"MINIMAL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n                                     },\n                                     {\n-                                        \"description\": \"Values will be quoted unless the value is a number.\",\n-                                        \"displayName\": \"Quote Non-Numeric Values\",\n-                                        \"value\": \"NON_NUMERIC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16\",\n+                                        \"value\": \"UTF-16\"\n                                     },\n                                     {\n-                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n-                                        \"displayName\": \"Do Not Quote Values\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16LE\",\n+                                        \"value\": \"UTF-16LE\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16BE\",\n+                                        \"value\": \"UTF-16BE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US-ASCII\",\n+                                        \"value\": \"US-ASCII\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies how fields should be quoted when they are written\",\n-                                \"displayName\": \"Quote Mode\",\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies a character encoding to use.\",\n+                                \"displayName\": \"Character Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Quote Mode\",\n+                                \"name\": \"character-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Separator\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"dependencies\": [\n+                            \"split-words-on-symbols\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the characters to use in order to separate CSV Records\",\n-                                \"displayName\": \"Record Separator\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If enabled, the word count will identify strings separated by common logical delimiters [ _ - . ] as independent words (ex. split-words-on-symbols = 4 words).\",\n+                                \"displayName\": \"Split Words on Symbols\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Separator\",\n+                                \"name\": \"split-words-on-symbols\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Trim Fields\": {\n+                            \"text-character-count\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If enabled, will count the number of characters (including whitespace and symbols, but not including newlines and carriage returns) present in the incoming text.\",\n+                                \"displayName\": \"Count Characters\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim Fields\",\n+                                \"name\": \"text-character-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Value Separator\": {\n-                                \"defaultValue\": \",\",\n-                                \"dependencies\": [\n+                            \"text-line-count\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n-                                \"displayName\": \"Value Separator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"excel-extract-column-to-skip\": {\n-                                \"description\": \"Comma delimited list of column numbers to skip. Use the columns number and not the letter designation. Use this to skip over columns anywhere in your worksheet that you don't want extracted as part of the record.\",\n-                                \"displayName\": \"Columns To Skip\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"excel-extract-column-to-skip\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"excel-extract-first-row\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The row number of the first row to start processing.Use this to skip over rows of data at the top of your worksheet that are not part of the dataset.Empty rows of data anywhere in the spreadsheet will always be skipped, no matter what this value is set to.\",\n-                                \"displayName\": \"Number of Rows to Skip\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If enabled, will count the number of lines present in the incoming text.\",\n+                                \"displayName\": \"Count Lines\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"excel-extract-first-row\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"text-line-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"excel-format-booleans\": {\n+                            \"text-line-nonempty-count\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, true/false will be represented by TRUE/FALSE. If false, true/false will be represented by 0/1.\",\n-                                \"displayName\": \"Format Booleans\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If enabled, will count the number of lines that contain a non-whitespace character present in the incoming text.\",\n+                                \"displayName\": \"Count Non-Empty Lines\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"excel-format-booleans\",\n+                                \"name\": \"text-line-nonempty-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"excel-format-values\": {\n+                            \"text-word-count\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Should the cell values be written to CSV using the formatting applied in Excel, or should they be printed as raw values.\",\n-                                \"displayName\": \"Format Cell Values\",\n+                                \"description\": \"If enabled, will count the number of words (alphanumeric character groups bounded by whitespace) present in the incoming text. Common logical delimiters [_-.] do not bound a word unless 'Split Words on Symbols' is true.\",\n+                                \"displayName\": \"Count Words\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"excel-format-values\",\n+                                \"name\": \"text-word-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"extract-sheets\": {\n-                                \"description\": \"Comma separated list of Excel document sheet names that should be extracted from the excel document. If this property is left blank then all of the sheets will be extracted from the Excel document. The list of names is case in-sensitive. Any sheets not specified in this value will be ignored. A bulletin will be generated if a specified sheet(s) are not found.\",\n-                                \"displayName\": \"Sheets to Extract\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"extract-sheets\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.SplitText\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Original Excel document received by this processor\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"Excel data converted to csv\",\n+                                \"description\": \"The flowfile contains the original content with one or more attributes added containing the respective counts\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Failed to parse the Excel document\",\n+                                \"description\": \"If the flowfile text cannot be counted for some reason, the original file will be routed to this destination and nothing will be routed elsewhere\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"csv\",\n-                            \"excel\",\n-                            \"poi\"\n+                            \"character\",\n+                            \"count\",\n+                            \"line\",\n+                            \"text\",\n+                            \"word\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.poi.ConvertExcelToCSVProcessor\",\n-                        \"typeDescription\": \"Consumes a Microsoft Excel document and converts each worksheet to csv. Each sheet from the incoming Excel document will generate a new Flowfile that will be output from this processor. Each output Flowfile's contents will be formatted as a csv file where the each row from the excel sheet is output as a newline in the csv file. This processor is currently only capable of processing .xlsx (XSSF 2007 OOXML file format) Excel documents and not older .xls (HSSF '97(-2007) file format) documents. This processor also expects well formatted CSV content and will not escape cell's containing invalid content such as newlines or additional commas.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.CountText\",\n+                        \"typeDescription\": \"Counts various metrics on incoming text. The requested results will be recorded as attributes. The resulting flowfile will not have its content modified.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the Excel sheet that this particular row of data came from in the Excel document\",\n-                                \"name\": \"sheetname\"\n+                                \"description\": \"The number of lines of text present in the FlowFile content\",\n+                                \"name\": \"text.line.count\"\n                             },\n                             {\n-                                \"description\": \"The number of rows in this Excel Sheet\",\n-                                \"name\": \"numrows\"\n+                                \"description\": \"The number of lines of text (with at least one non-whitespace character) present in the original FlowFile\",\n+                                \"name\": \"text.line.nonempty.count\"\n                             },\n                             {\n-                                \"description\": \"The name of the Excel document file that this data originated from\",\n-                                \"name\": \"sourcefilename\"\n+                                \"description\": \"The number of words present in the original FlowFile\",\n+                                \"name\": \"text.word.count\"\n                             },\n                             {\n-                                \"description\": \"Error message that was encountered on a per Excel sheet basis. This attribute is only populated if an error was occured while processing the particular sheet. Having the error present at the sheet level will allow for the end user to better understand what syntax errors in their excel doc on a larger scale caused the error.\",\n-                                \"name\": \"convertexceltocsvprocessor.error\"\n+                                \"description\": \"The number of characters (given the specified character encoding) present in the original FlowFile\",\n+                                \"name\": \"text.character.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-poi-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.attributes.UpdateAttribute\"\n+                        ],\n+                        \"deprecationReason\": \"UpdateAttribute can be configured using the hash Expression Language function to digest one or more attributes\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"The property name defines the attribute to look for and hash in the incoming flowfile. The property value defines the name to give the generated attribute. Attribute names must be unique.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A flowfile attribute key for attribute inspection\",\n+                                \"value\": \"Attribute Name\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Password\": {\n-                                \"dependencies\": [\n+                            \"character_set\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"PASSWORD\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Protection Type\",\n-                                        \"propertyName\": \"Protection Type\"\n+                                        \"description\": \"US-ASCII\",\n+                                        \"displayName\": \"US-ASCII\",\n+                                        \"value\": \"US-ASCII\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ISO-8859-1\",\n+                                        \"displayName\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"UTF-8\",\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"UTF-16BE\",\n+                                        \"displayName\": \"UTF-16BE\",\n+                                        \"value\": \"UTF-16BE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"UTF-16LE\",\n+                                        \"displayName\": \"UTF-16LE\",\n+                                        \"value\": \"UTF-16LE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This character set normally decodes using an optional BOM at the beginning of the data but encodes by inserting a BE BOM. For hashing, it will be replaced with UTF-16BE. \",\n+                                        \"displayName\": \"UTF-16\",\n+                                        \"value\": \"UTF-16\"\n                                     }\n                                 ],\n-                                \"description\": \"The password for a password protected Excel spreadsheet\",\n-                                \"displayName\": \"Password\",\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set used to decode the attribute being hashed -- this applies to the incoming data encoding, not the resulting hash encoding. \",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"character_set\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Protection Type\": {\n+                            \"fail_when_empty\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"An Excel spreadsheet not protected by a password\",\n-                                        \"displayName\": \"Unprotected\",\n-                                        \"value\": \"UNPROTECTED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"An Excel spreadsheet protected by a password\",\n-                                        \"displayName\": \"Password Protected\",\n-                                        \"value\": \"PASSWORD\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UNPROTECTED\",\n-                                \"description\": \"Specifies whether an Excel spreadsheet is protected by a password or not.\",\n-                                \"displayName\": \"Protection Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Route to failure when none of the attributes that are configured for hashing are found. If set to false, then flow files that do not contain any of the attributes that are configured for hashing will just pass through to success.\",\n+                                \"displayName\": \"Fail when no attributes present\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protection Type\",\n+                                \"name\": \"fail_when_empty\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hash_algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"MD2 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n+                                        \"displayName\": \"MD2\",\n+                                        \"value\": \"MD2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"MD5 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-1 (20 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n+                                        \"displayName\": \"SHA-1\",\n+                                        \"value\": \"SHA-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-224 (28 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-224\",\n+                                        \"value\": \"SHA-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-256 (32 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-256\",\n+                                        \"value\": \"SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-384 (48 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-384\",\n+                                        \"value\": \"SHA-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512 (64 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-512\",\n+                                        \"value\": \"SHA-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512/224 (28 byte output) SHA-2 using SHA-512 with truncated output\",\n+                                        \"displayName\": \"SHA-512/224\",\n+                                        \"value\": \"SHA-512/224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512/256 (32 byte output) SHA-2 using SHA-512 with truncated output\",\n+                                        \"displayName\": \"SHA-512/256\",\n+                                        \"value\": \"SHA-512/256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-224 (28 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-224\",\n+                                        \"value\": \"SHA3-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-256 (32 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-256\",\n+                                        \"value\": \"SHA3-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-384 (48 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-384\",\n+                                        \"value\": \"SHA3-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-512 (64 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-512\",\n+                                        \"value\": \"SHA3-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-160 (20 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-160\",\n+                                        \"value\": \"BLAKE2-160\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-256 (32 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-256\",\n+                                        \"value\": \"BLAKE2-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-384 (48 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-384\",\n+                                        \"value\": \"BLAKE2-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-512 (64 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-512\",\n+                                        \"value\": \"BLAKE2-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SHA-256\",\n+                                \"description\": \"The cryptographic hash algorithm to use. Note that not all of the algorithms available are recommended for use (some are provided for legacy use). There are many things to consider when picking an algorithm; it is recommended to use the most secure algorithm possible.\",\n+                                \"displayName\": \"Hash Algorithm\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hash_algorithm\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"missing_attr_policy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Do not route to failure if there are attributes configured for hashing that are not present in the flowfile\",\n+                                        \"displayName\": \"Allow missing attributes\",\n+                                        \"value\": \"ALLOW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Route to failure if there are attributes configured for hashing that are not present in the flowfile\",\n+                                        \"displayName\": \"Fail if missing attributes\",\n+                                        \"value\": \"PROHIBIT\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ALLOW\",\n+                                \"description\": \"Policy for how the processor handles attributes that are configured for hashing but are not found in the flowfile.\",\n+                                \"displayName\": \"Missing attribute policy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"missing_attr_policy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"Used for flowfiles that have a hash value added\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The individual Excel 'segments' of the original Excel FlowFile will be routed to this relationship.\",\n-                                \"name\": \"split\"\n+                                \"description\": \"Used for flowfiles that are missing required attributes\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"split\",\n-                            \"text\"\n+                            \"attributes\",\n+                            \"blake2\",\n+                            \"cryptography\",\n+                            \"hash\",\n+                            \"keccak\",\n+                            \"md5\",\n+                            \"sha\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.poi.SplitExcel\",\n-                        \"typeDescription\": \"Splits a multi sheet Microsoft Excel spreadsheet into multiple Microsoft Excel spreadsheets where each sheet from the original file is converted to an individual spreadsheet in its own flow file.  This processor is currently only capable of processing .xlsx (XSSF 2007 OOXML file format) Excel documents and not older .xls (HSSF '97(-2007) file format) documents.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.CryptographicHashAttribute\",\n+                        \"typeDescription\": \"Calculates a hash value for each of the specified attributes using the given algorithm and writes it to an output attribute. Please refer to https://csrc.nist.gov/Projects/Hash-Functions/NIST-Policy-on-Hash-Functions for help to decide which algorithm to use. \",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All split Excel FlowFiles produced from the same parent Excel FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split Excel FlowFiles that were created from a single parent Excel FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of split Excel FlowFiles generated from the parent Excel FlowFile\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent Excel FlowFile\",\n-                                \"name\": \"segment.original.filename\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Excel sheet from the original spreadsheet.\",\n-                                \"name\": \"sheetname\"\n-                            },\n-                            {\n-                                \"description\": \"The number of rows in the Excel sheet from the original spreadsheet.\",\n-                                \"name\": \"total.rows\"\n+                                \"description\": \"This Processor adds an attribute whose value is the result of hashing the specified attribute. The name of this attribute is specified by the value of the dynamic property.\",\n+                                \"name\": \"<Specified Attribute Name per Dynamic Property>\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a Request Header in the Elasticsearch requests.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Request Header to add\",\n-                                \"value\": \"The value of the Header\"\n-                            }\n-                        ],\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"api-key\": {\n-                                \"dependencies\": [\n+                            \"fail_when_empty\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"API_KEY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Scheme\",\n-                                        \"propertyName\": \"authorization-scheme\"\n-                                    }\n-                                ],\n-                                \"description\": \"Encoded API key.\",\n-                                \"displayName\": \"API Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"api-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"api-key-id\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"API_KEY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Scheme\",\n-                                        \"propertyName\": \"authorization-scheme\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Unique identifier of the API key.\",\n-                                \"displayName\": \"API Key ID\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Route to failure if the content is empty. While hashing an empty value is valid, some flows may want to detect empty input.\",\n+                                \"displayName\": \"Fail if the content is empty\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"api-key-id\",\n-                                \"required\": false,\n+                                \"name\": \"fail_when_empty\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"authorization-scheme\": {\n+                            \"hash_algorithm\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No authorization scheme.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"MD2 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n+                                        \"displayName\": \"MD2\",\n+                                        \"value\": \"MD2\"\n                                     },\n                                     {\n-                                        \"description\": \"Mutual TLS with PKI certificate authorization scheme.\",\n-                                        \"displayName\": \"PKI\",\n-                                        \"value\": \"PKI\"\n+                                        \"description\": \"MD5 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n                                     },\n                                     {\n-                                        \"description\": \"Basic authorization scheme.\",\n-                                        \"displayName\": \"Basic\",\n-                                        \"value\": \"BASIC\"\n+                                        \"description\": \"SHA-1 (20 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n+                                        \"displayName\": \"SHA-1\",\n+                                        \"value\": \"SHA-1\"\n                                     },\n                                     {\n-                                        \"description\": \"API key authorization scheme.\",\n-                                        \"displayName\": \"API Key\",\n-                                        \"value\": \"API_KEY\"\n+                                        \"description\": \"SHA-224 (28 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-224\",\n+                                        \"value\": \"SHA-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-256 (32 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-256\",\n+                                        \"value\": \"SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-384 (48 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-384\",\n+                                        \"value\": \"SHA-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512 (64 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-512\",\n+                                        \"value\": \"SHA-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512/224 (28 byte output) SHA-2 using SHA-512 with truncated output\",\n+                                        \"displayName\": \"SHA-512/224\",\n+                                        \"value\": \"SHA-512/224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512/256 (32 byte output) SHA-2 using SHA-512 with truncated output\",\n+                                        \"displayName\": \"SHA-512/256\",\n+                                        \"value\": \"SHA-512/256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-224 (28 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-224\",\n+                                        \"value\": \"SHA3-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-256 (32 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-256\",\n+                                        \"value\": \"SHA3-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-384 (48 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-384\",\n+                                        \"value\": \"SHA3-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-512 (64 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-512\",\n+                                        \"value\": \"SHA3-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-160 (20 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-160\",\n+                                        \"value\": \"BLAKE2-160\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-256 (32 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-256\",\n+                                        \"value\": \"BLAKE2-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-384 (48 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-384\",\n+                                        \"value\": \"BLAKE2-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-512 (64 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-512\",\n+                                        \"value\": \"BLAKE2-512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"BASIC\",\n-                                \"description\": \"Authorization Scheme used for optional authentication to Elasticsearch.\",\n-                                \"displayName\": \"Authorization Scheme\",\n+                                \"defaultValue\": \"SHA-256\",\n+                                \"description\": \"The hash algorithm to use. Note that not all of the algorithms available are recommended for use (some are provided for legacy compatibility). There are many things to consider when picking an algorithm; it is recommended to use the most secure algorithm possible.\",\n+                                \"displayName\": \"Hash Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorization-scheme\",\n+                                \"name\": \"hash_algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Used for flowfiles that have a hash value added\",\n+                                \"name\": \"success\"\n                             },\n-                            \"el-cs-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The charset to use for interpreting the response from Elasticsearch.\",\n-                                \"displayName\": \"Charset\",\n+                            {\n+                                \"description\": \"Used for flowfiles that have no content if the 'fail on empty' setting is enabled\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"blake2\",\n+                            \"content\",\n+                            \"cryptography\",\n+                            \"hash\",\n+                            \"md5\",\n+                            \"sha\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.CryptographicHashContent\",\n+                        \"typeDescription\": \"Calculates a cryptographic hash value for the flowfile content using the given algorithm and writes it to an output attribute. Please refer to https://csrc.nist.gov/Projects/Hash-Functions/NIST-Policy-on-Hash-Functions for help to decide which algorithm to use.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This processor adds an attribute whose value is the result of hashing the flowfile content. The name of this attribute is specified by the value of the algorithm, e.g. 'content_SHA-256'.\",\n+                                \"name\": \"content_<algorithm>\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"@OnScheduled Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the @OnScheduled method, so that the processor can be forced to take a long time to start up\",\n+                                \"displayName\": \"@OnScheduled Pause Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-charset\",\n+                                \"name\": \"@OnScheduled Pause Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-connect-timeout\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when trying to connect.\",\n-                                \"displayName\": \"Connect timeout\",\n+                            \"@OnStopped Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the @OnStopped method, so that the processor can be forced to take a long time to shutdown\",\n+                                \"displayName\": \"@OnStopped Pause Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"@OnStopped Pause Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"@OnUnscheduled Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the @OnUnscheduled method, so that the processor can be forced to take a long time to respond when user clicks stop\",\n+                                \"displayName\": \"@OnUnscheduled Pause Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-connect-timeout\",\n+                                \"name\": \"@OnUnscheduled Pause Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-enable-compression\": {\n+                            \"Content Size\": {\n+                                \"defaultValue\": \"1 KB\",\n+                                \"description\": \"The number of bytes to write each time that the FlowFile is written to\",\n+                                \"displayName\": \"Content Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Content Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"CustomValidate Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the customValidate() method\",\n+                                \"displayName\": \"CustomValidate Pause Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"CustomValidate Pause Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Fail When @OnScheduled called\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether the REST client should compress requests using gzip content encoding and add the \\\"Accept-Encoding: gzip\\\" header to receive compressed responses\",\n-                                \"displayName\": \"Enable Compression\",\n+                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnScheduled are called\",\n+                                \"displayName\": \"Fail When @OnScheduled called\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-enable-compression\",\n+                                \"name\": \"Fail When @OnScheduled called\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-http-hosts\": {\n-                                \"description\": \"A comma-separated list of HTTP hosts that host Elasticsearch query nodes. Note that the Host is included in requests as a header (typically including domain and port, e.g. elasticsearch:9200).\",\n-                                \"displayName\": \"HTTP Hosts\",\n+                            \"Fail When @OnStopped called\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnStopped are called\",\n+                                \"displayName\": \"Fail When @OnStopped called\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"el-cs-http-hosts\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Fail When @OnStopped called\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-node-selector\": {\n+                            \"Fail When @OnUnscheduled called\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Select any Elasticsearch node to handle requests\",\n-                                        \"displayName\": \"Any\",\n-                                        \"value\": \"ANY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Skip dedicated Elasticsearch master nodes for handling request\",\n-                                        \"displayName\": \"Skip Dedicated Masters\",\n-                                        \"value\": \"SKIP_DEDICATED_MASTERS\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ANY\",\n-                                \"description\": \"Selects Elasticsearch nodes that can receive requests. Used to keep requests away from dedicated Elasticsearch master nodes\",\n-                                \"displayName\": \"Node Selector\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnUnscheduled are called\",\n+                                \"displayName\": \"Fail When @OnUnscheduled called\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-node-selector\",\n+                                \"name\": \"Fail When @OnUnscheduled called\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Scheme\",\n-                                        \"propertyName\": \"authorization-scheme\"\n-                                    }\n-                                ],\n-                                \"description\": \"The password to use with XPack security.\",\n-                                \"displayName\": \"Password\",\n+                            \"FlowFile Exception Class\": {\n+                                \"defaultValue\": \"java.lang.RuntimeException\",\n+                                \"description\": \"Exception class to be thrown (must extend java.lang.RuntimeException).\",\n+                                \"displayName\": \"FlowFile Exception Class\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"el-cs-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"FlowFile Exception Class\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"el-cs-path-prefix\": {\n-                                \"description\": \"Sets the path's prefix for every request used by the http client. For example, if this is set to \\\"/my/path\\\", then any client request will become \\\"/my/path/\\\" + endpoint. In essence, every request's endpoint is prefixed by this pathPrefix. The path prefix is useful for when Elasticsearch is behind a proxy that provides a base path or a proxy that requires all paths to start with '/'; it is not intended for other purposes and it should not be supplied in other scenarios\",\n-                                \"displayName\": \"Path Prefix\",\n+                            \"FlowFile Exception Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to throw exception.\",\n+                                \"displayName\": \"FlowFile Exception Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-path-prefix\",\n-                                \"required\": false,\n+                                \"name\": \"FlowFile Exception Iterations\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-retry-timeout\": {\n-                                \"defaultValue\": \"60000\",\n-                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when retrying the operation.\",\n-                                \"displayName\": \"Retry timeout\",\n+                            \"FlowFile Failure Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to forward to failure relationship.\",\n+                                \"displayName\": \"FlowFile Failure Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-retry-timeout\",\n+                                \"name\": \"FlowFile Failure Iterations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-send-meta-header\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to send a \\\"X-Elastic-Client-Meta\\\" header that describes the runtime environment. It contains information that is similar to what could be found in User-Agent. Using a separate header allows applications to use User-Agent for their own needs, e.g. to identify application version or other environment information\",\n-                                \"displayName\": \"Send Meta Header\",\n+                            \"FlowFile Rollback Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to roll back (without penalty).\",\n+                                \"displayName\": \"FlowFile Rollback Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-send-meta-header\",\n+                                \"name\": \"FlowFile Rollback Iterations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-sniff-cluster-nodes\": {\n+                            \"FlowFile Rollback Penalty Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to roll back with penalty.\",\n+                                \"displayName\": \"FlowFile Rollback Penalty Iterations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"FlowFile Rollback Penalty Iterations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"FlowFile Rollback Yield Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to roll back and yield.\",\n+                                \"displayName\": \"FlowFile Rollback Yield Iterations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"FlowFile Rollback Yield Iterations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"FlowFile Success Iterations\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Number of FlowFiles to forward to success relationship.\",\n+                                \"displayName\": \"FlowFile Success Iterations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"FlowFile Success Iterations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ignore Interrupts When Paused\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Periodically sniff for nodes within the Elasticsearch cluster via the Elasticsearch Node Info API. If Elasticsearch security features are enabled (default to \\\"true\\\" for 8.x+), the Elasticsearch user must have the \\\"monitor\\\" or \\\"manage\\\" cluster privilege to use this API.Note that all HTTP Hosts (and those that may be discovered within the cluster using the Sniffer) must use the same protocol, e.g. http or https, and be contactable using the same client settings. Finally the Elasticsearch \\\"network.publish_host\\\" must match one of the \\\"network.bind_host\\\" list entries see https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html for more information\",\n-                                \"displayName\": \"Sniff Cluster Nodes\",\n+                                \"description\": \"If the Processor's thread(s) are sleeping (due to one of the \\\"Pause Time\\\" properties above), and the thread is interrupted, this indicates whether the Processor should ignore the interrupt and continue sleeping or if it should allow itself to be interrupted.\",\n+                                \"displayName\": \"Ignore Interrupts When Paused\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniff-cluster-nodes\",\n+                                \"name\": \"Ignore Interrupts When Paused\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-sniff-failure\": {\n+                            \"No FlowFile Exception Class\": {\n+                                \"defaultValue\": \"java.lang.RuntimeException\",\n+                                \"description\": \"Exception class to be thrown if no FlowFile (must extend java.lang.RuntimeException).\",\n+                                \"displayName\": \"No FlowFile Exception Class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"No FlowFile Exception Class\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"No FlowFile Exception Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of times to throw NPE exception if no FlowFile.\",\n+                                \"displayName\": \"No FlowFile Exception Iterations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"No FlowFile Exception Iterations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"No FlowFile Skip Iterations\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Number of times to skip onTrigger if no FlowFile.\",\n+                                \"displayName\": \"No FlowFile Skip Iterations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"No FlowFile Skip Iterations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"No FlowFile Yield Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of times to yield if no FlowFile.\",\n+                                \"displayName\": \"No FlowFile Yield Iterations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"No FlowFile Yield Iterations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"OnTrigger Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the onTrigger() method, so that the processor can be forced to take a long time to perform its task\",\n+                                \"displayName\": \"OnTrigger Pause Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"OnTrigger Pause Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Write Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of times to write to the FlowFile\",\n+                                \"displayName\": \"Write Iterations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Write Iterations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles processed successfully.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed to process.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"FlowFile\",\n+                            \"debug\",\n+                            \"flow\",\n+                            \"processor\",\n+                            \"test\",\n+                            \"utility\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.DebugFlow\",\n+                        \"typeDescription\": \"The DebugFlow processor aids testing and debugging the FlowFile framework by allowing various responses to be explicitly triggered in response to the receipt of a FlowFile or a timer event without a FlowFile if using timer or cron based scheduling.  It can force responses needed to exercise or test various failure modes that can occur when a processor runs.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"A record's cache key is generated by combining the name of each dynamic property with its evaluated record value (as specified by the corresponding RecordPath).\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Name of the property.\",\n+                                \"value\": \"A valid RecordPath to the record field to be included in the cache key used for deduplication.\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"bloom-filter-certainty\": {\n+                                \"defaultValue\": \"0.10\",\n+                                \"description\": \"The desired false positive probability when using the BloomFilter type. Using a value of .05 for example, guarantees a five-percent probability that the result is a false positive. The closer to 1 this value is set, the more precise the result at the expense of more storage space utilization.\",\n+                                \"displayName\": \"Bloom Filter Certainty\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"bloom-filter-certainty\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cache-identifier\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"multiple\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n+                                        \"propertyName\": \"deduplication-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"An optional expression language field that overrides the record's computed cache key. This field has an additional attribute available: ${record.hash.value}, which contains the cache key derived from dynamic properties (if set) or record fields.\",\n+                                \"displayName\": \"Cache Identifier\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"cache-identifier\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"deduplication-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Single File\",\n+                                        \"value\": \"single\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n-                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n+                                        \"displayName\": \"Multiple Files\",\n+                                        \"value\": \"multiple\"\n                                     }\n                                 ],\n-                                \"description\": \"Enable sniffing on failure, meaning that after each failure the Elasticsearch nodes list gets updated straightaway rather than at the following ordinary sniffing round\",\n-                                \"displayName\": \"Sniff on Failure\",\n+                                \"defaultValue\": \"single\",\n+                                \"description\": \"The strategy to use for detecting and routing duplicate records. The option for detecting duplicates across a single FlowFile operates in-memory, whereas detection spanning multiple FlowFiles utilises a distributed map cache.\",\n+                                \"displayName\": \"Deduplication Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniff-failure\",\n+                                \"name\": \"deduplication-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-sniffer-failure-delay\": {\n-                                \"defaultValue\": \"1 min\",\n+                            \"distributed-map-cache\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"multiple\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Sniff on Failure\",\n-                                        \"propertyName\": \"el-cs-sniff-failure\"\n+                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n+                                        \"propertyName\": \"deduplication-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Delay between an Elasticsearch request failure and updating available Cluster nodes using the Sniffer\",\n-                                \"displayName\": \"Sniffer Failure Delay\",\n+                                \"description\": \"This property is required when the deduplication strategy is set to 'multiple files.' The map cache will for each record, atomically check whether the cache key exists and if not, set it.\",\n+                                \"displayName\": \"Distributed Map Cache client\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniffer-failure-delay\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"distributed-map-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"el-cs-sniffer-interval\": {\n-                                \"defaultValue\": \"5 mins\",\n+                            \"filter-capacity-hint\": {\n+                                \"defaultValue\": \"25000\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"bloom-filter\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n-                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n+                                        \"propertyDisplayName\": \"Filter Type\",\n+                                        \"propertyName\": \"filter-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Interval between Cluster sniffer operations\",\n-                                \"displayName\": \"Sniffer Interval\",\n+                                \"description\": \"An estimation of the total number of unique records to be processed. The more accurate this number is will lead to fewer false negatives on a BloomFilter.\",\n+                                \"displayName\": \"Filter Capacity Hint\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniffer-interval\",\n+                                \"name\": \"filter-capacity-hint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-sniffer-request-timeout\": {\n-                                \"defaultValue\": \"1 sec\",\n+                            \"filter-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Exactly matches records seen before with 100% accuracy at the expense of more storage usage. Stores the filter data in a single cache entry in the distributed cache, and is loaded entirely into memory during duplicate detection. This filter is preferred for small to medium data sets and offers high performance, being loaded into memory when this processor is running.\",\n+                                        \"displayName\": \"HashSet\",\n+                                        \"value\": \"hash-set\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Space-efficient data structure ideal for large data sets using probability to determine if a record was seen previously. False positive matches are possible, but false negatives are not \\u2013 in other words, a query returns either \\\"possibly in the set\\\" or \\\"definitely not in the set\\\". You should use this option if the FlowFile content is large and you can tolerate some duplication in the data. Uses constant storage space regardless of the record set size.\",\n+                                        \"displayName\": \"BloomFilter\",\n+                                        \"value\": \"bloom-filter\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"hash-set\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"single\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n-                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n+                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n+                                        \"propertyName\": \"deduplication-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Cluster sniffer timeout for node info requests\",\n-                                \"displayName\": \"Sniffer Request Timeout\",\n+                                \"description\": \"The filter used to determine whether a record has been seen before based on the matching RecordPath criteria. If hash set is selected, a Java HashSet object will be used to deduplicate all encountered records. If the bloom filter option is selected, a bloom filter will be used. The bloom filter option is less memory intensive, but has a chance of having false positives.\",\n+                                \"displayName\": \"Filter Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniffer-request-timeout\",\n+                                \"name\": \"filter-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-socket-timeout\": {\n-                                \"defaultValue\": \"60000\",\n-                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when waiting for a response.\",\n-                                \"displayName\": \"Read timeout\",\n+                            \"include-zero-record-flowfiles\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If a FlowFile sent to either the duplicate or non-duplicate relationships contains no records, a value of `false` in this property causes the FlowFile to be dropped. Otherwise, the empty FlowFile is emitted.\",\n+                                \"displayName\": \"Include Zero Record FlowFiles\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-socket-timeout\",\n+                                \"name\": \"include-zero-record-flowfiles\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"el-cs-strict-deprecation\": {\n+                            \"put-cache-identifier\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether the REST client should return any response containing at least one warning header as a failure\",\n-                                \"displayName\": \"Strict Deprecation\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Distributed Map Cache client\",\n+                                        \"propertyName\": \"distributed-map-cache\"\n+                                    }\n+                                ],\n+                                \"description\": \"For each record, check whether the cache identifier exists in the distributed map cache. If it doesn't exist and this property is true, put the identifier to the cache.\",\n+                                \"displayName\": \"Cache the Entry Identifier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-strict-deprecation\",\n+                                \"name\": \"put-cache-identifier\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-suppress-nulls\": {\n+                            \"record-hashing-algorithm\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null/empty, will be written out as a null/empty value\",\n-                                        \"displayName\": \"Never Suppress\",\n-                                        \"value\": \"never-suppress\"\n+                                        \"description\": \"Do not use a hashing algorithm. The value of resolved RecordPaths will be combined with a delimiter (~) to form the unique cache key. This may use significantly more storage depending on the size and shape or your data.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null/empty, will not be written out\",\n-                                        \"displayName\": \"Always Suppress\",\n-                                        \"value\": \"always-suppress\"\n+                                        \"description\": \"SHA-256 cryptographic hashing algorithm.\",\n+                                        \"displayName\": \"SHA-256\",\n+                                        \"value\": \"SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512 cryptographic hashing algorithm.\",\n+                                        \"displayName\": \"SHA-512\",\n+                                        \"value\": \"SHA-512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"always-suppress\",\n-                                \"description\": \"Specifies how the writer should handle null and empty fields (including objects and arrays)\",\n-                                \"displayName\": \"Suppress Null/Empty Values\",\n+                                \"defaultValue\": \"SHA-256\",\n+                                \"description\": \"The algorithm used to hash the cache key.\",\n+                                \"displayName\": \"Record Hashing Algorithm\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-hashing-algorithm\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.DetectDuplicate\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Records detected as duplicates are routed to this relationship.\",\n+                                \"name\": \"duplicate\"\n+                            },\n+                            {\n+                                \"description\": \"Records not found in the cache are routed to this relationship.\",\n+                                \"name\": \"non-duplicate\"\n+                            },\n+                            {\n+                                \"description\": \"If unable to communicate with the cache, the FlowFile will be penalized and routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original input FlowFile is sent to this relationship unless a fatal error occurs.\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The HashSet filter type will grow memory space proportionate to the number of unique records processed. The BloomFilter type will use constant memory regardless of the number of records processed.\",\n+                                \"resource\": \"MEMORY\"\n+                            },\n+                            {\n+                                \"description\": \"If a more advanced hash algorithm is chosen, the amount of time required to hash any particular record could increase substantially.\",\n+                                \"resource\": \"CPU\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"change\",\n+                            \"dedupe\",\n+                            \"distinct\",\n+                            \"dupe\",\n+                            \"duplicate\",\n+                            \"filter\",\n+                            \"hash\",\n+                            \"modify\",\n+                            \"record\",\n+                            \"replace\",\n+                            \"text\",\n+                            \"unique\",\n+                            \"update\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.DeduplicateRecord\",\n+                        \"typeDescription\": \"This processor de-duplicates individual records within a record set. It can operate on a per-file basis using an in-memory hashset or bloom filter. When configured with a distributed map cache, it de-duplicates records across multiple files.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Number of records written to the destination FlowFile.\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Age Off Duration\": {\n+                                \"description\": \"Time interval to age off cached FlowFiles\",\n+                                \"displayName\": \"Age Off Duration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Age Off Duration\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Cache Entry Identifier\": {\n+                                \"defaultValue\": \"${hash.value}\",\n+                                \"description\": \"A FlowFile attribute, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the value used to identify duplicates; it is this value that is cached\",\n+                                \"displayName\": \"Cache Entry Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-suppress-nulls\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Cache Entry Identifier\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-username\": {\n-                                \"dependencies\": [\n+                            \"Cache The Entry Identifier\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Scheme\",\n-                                        \"propertyName\": \"authorization-scheme\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The username to use with XPack security.\",\n-                                \"displayName\": \"Username\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When true this cause the processor to check for duplicates and cache the Entry Identifier. When false, the processor would only check for duplicates and not cache the Entry Identifier, requiring another processor to add identifiers to the distributed cache.\",\n+                                \"displayName\": \"Cache The Entry Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"el-cs-username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Cache The Entry Identifier\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"The Controller Service that is used to cache unique identifiers, used to determine duplicates\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"FlowFile Description\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"When a FlowFile is added to the cache, this value is stored along with it so that if a duplicate is found, this description of the original FlowFile will be added to the duplicate's \\\"original.flowfile.description\\\" attribute\",\n+                                \"displayName\": \"FlowFile Description\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"FlowFile Description\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"If a FlowFile has been detected to be a duplicate, it will be routed to this relationship\",\n+                                \"name\": \"duplicate\"\n+                            },\n+                            {\n+                                \"description\": \"If a FlowFile's Cache Entry Identifier was not found in the cache, it will be routed to this relationship\",\n+                                \"name\": \"non-duplicate\"\n+                            },\n+                            {\n+                                \"description\": \"If unable to communicate with the cache, the FlowFile will be penalized and routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"client\",\n-                            \"elasticsearch\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\"\n+                            \"dedupe\",\n+                            \"dupe\",\n+                            \"duplicate\",\n+                            \"hash\"\n                         ],\n-                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientServiceImpl\",\n-                        \"typeDescription\": \"A controller service for accessing an Elasticsearch client. Uses the Elasticsearch REST Client (7.13.4, the last version before client connections verifythe server is Elastic provided, this should allow for connections to compatible alternatives, e.g. AWS OpenSearch)\",\n-                        \"version\": \"1.27.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.DetectDuplicate\",\n+                        \"typeDescription\": \"Caches a value, computed from FlowFile attributes, for each incoming FlowFile and determines if the cached value has already been seen. If so, routes the FlowFile to 'duplicate' with an attribute named 'original.identifier' that specifies the original FlowFile's \\\"description\\\", which is specified in the <FlowFile Description> property. If the FlowFile is not determined to be a duplicate, the Processor routes the FlowFile to 'non-duplicate'\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All FlowFiles routed to the duplicate relationship will have an attribute added named original.flowfile.description. The value of this attribute is determined by the attributes of the original copy of the data and by the FlowFile Description property.\",\n+                                \"name\": \"original.flowfile.description\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Retrieves an object using JSONPath from the result document and places it in the return Record at the specified Record Path.\",\n+                                \"description\": \"Adding a property with the name '5' and value '10' means that the relationship with name '5' will receive 10 FlowFiles in each iteration instead of 1.\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A JSONPath expression\",\n-                                \"value\": \"A Record Path expression\"\n+                                \"name\": \"The relationship name (positive number)\",\n+                                \"value\": \"The relationship Weight (positive number)\"\n                             }\n                         ],\n+                        \"dynamicRelationship\": {\n+                            \"description\": \"FlowFiles are sent to this relationship per the <Distribution Strategy>\",\n+                            \"name\": \"A number 1..<Number Of Relationships>\"\n+                        },\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-lookup-index\": {\n-                                \"description\": \"The name of the index to read from\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"el-lookup-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-lookup-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching)\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"el-lookup-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An ElasticSearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"schema-access-strategy\": {\n+                            \"Distribution Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"Relationship selection is evenly distributed in a round robin fashion; all relationships must be available.\",\n+                                        \"displayName\": \"round robin\",\n+                                        \"value\": \"round robin\"\n                                     },\n                                     {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"Relationship selection is distributed across all available relationships in order of their weight; at least one relationship must be available.\",\n+                                        \"displayName\": \"next available\",\n+                                        \"value\": \"next available\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Infer from Result\",\n-                                        \"value\": \"infer\"\n+                                        \"description\": \"Relationship selection is distributed by supplied LoadDistributionService Controller Service; at least one relationship must be available.\",\n+                                        \"displayName\": \"load distribution service\",\n+                                        \"value\": \"load distribution service\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Relationship selection is the first available relationship without further distribution among all relationships; at least one relationship must be available.\",\n+                                        \"displayName\": \"overflow\",\n+                                        \"value\": \"overflow\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"infer\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"round robin\",\n+                                \"description\": \"Determines how the load will be distributed. Relationship weight is in numeric order where '1' has the greatest weight.\",\n+                                \"displayName\": \"Distribution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"Distribution Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"Number of Relationships\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Determines the number of Relationships to which the load should be distributed\",\n+                                \"displayName\": \"Number of Relationships\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"name\": \"Number of Relationships\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Where to route flowfiles for this relationship index\",\n+                                \"name\": \"1\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"enrich\",\n-                            \"lookup\",\n-                            \"record\"\n+                            \"distribute\",\n+                            \"load balance\",\n+                            \"round robin\",\n+                            \"route\",\n+                            \"weighted\"\n                         ],\n-                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchLookupService\",\n-                        \"typeDescription\": \"Lookup a record from Elasticsearch Server associated with the specified document ID. The coordinates that are passed to the lookup must contain the key 'id'.\",\n-                        \"version\": \"1.27.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": true,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.DistributeLoad\",\n+                        \"typeDescription\": \"Distributes FlowFiles to downstream processors based on a Distribution Strategy. If using the Round Robin strategy, the default is to assign each destination a weighting of 1 (evenly distributed). However, optional properties can be added to the change this; adding a property with the name '5' and value '10' means that the relationship with name '5' will be receive 10 FlowFiles in each iteration instead of 1.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the specific relationship the FlowFile has been routed through\",\n+                                \"name\": \"distribute.load.relationship\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-lookup-index\": {\n-                                \"description\": \"The name of the index to read from\",\n-                                \"displayName\": \"Index\",\n+                            \"Number of Copies\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies how many copies of each incoming FlowFile will be made\",\n+                                \"displayName\": \"Number of Copies\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"el-lookup-index\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Number of Copies\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"el-lookup-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching)\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"el-lookup-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An ElasticSearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.27.0\"\n-                            },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"The original FlowFile and all copies will be sent to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"enrich\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"value\"\n+                            \"duplicate\",\n+                            \"load\",\n+                            \"test\"\n                         ],\n-                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchStringLookupService\",\n-                        \"typeDescription\": \"Lookup a string value from Elasticsearch Server associated with the specified document ID. The coordinates that are passed to the lookup must contain the key 'id'.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-parquet-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.DuplicateFlowFile\",\n+                        \"typeDescription\": \"Intended for load testing, this processor will create the configured number of copies of each incoming FlowFile. The original FlowFile as well as all generated copies are sent to the 'success' relationship. In addition, each FlowFile gets an attribute 'copy.index' set to the copy number, where the original FlowFile gets a value of zero, and all copies receive incremented integer values.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"A zero-based incrementing integer value based on which copy the FlowFile is.\",\n+                                \"name\": \"copy.index\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"avro-read-compatibility\": {\n+                            \"Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"base64\",\n+                                        \"value\": \"base64\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"base32\",\n+                                        \"value\": \"base32\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"hex\",\n+                                        \"value\": \"hex\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies the value for 'parquet.avro.compatible' in the underlying Parquet library\",\n-                                \"displayName\": \"Avro Read Compatibility\",\n+                                \"defaultValue\": \"base64\",\n+                                \"description\": \"Specifies the type of encoding used\",\n+                                \"displayName\": \"Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"avro-read-compatibility\",\n+                                \"name\": \"Encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Encode\",\n+                                        \"value\": \"Encode\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Decode\",\n+                                        \"value\": \"Decode\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Encode\",\n+                                \"description\": \"Specifies whether the content should be encoded or decoded\",\n+                                \"displayName\": \"Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"Any FlowFile that is successfully encoded or decoded will be routed to success\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that cannot be encoded or decoded will be routed to failure\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"parquet\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"row\"\n+                            \"base32\",\n+                            \"base64\",\n+                            \"decode\",\n+                            \"encode\",\n+                            \"hex\"\n                         ],\n-                        \"type\": \"org.apache.nifi.parquet.ParquetReader\",\n-                        \"typeDescription\": \"Parses Parquet data and returns each Parquet record as a separate Record object. The schema will come from the Parquet data itself.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.EncodeContent\",\n+                        \"typeDescription\": \"Encode or decode the contents of a FlowFile using Base64, Base32, or hex encoding schemes\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.cipher.DecryptContent\",\n+                            \"org.apache.nifi.processors.cipher.DecryptContentAge\",\n+                            \"org.apache.nifi.processors.cipher.DecryptContentCompatibility\",\n+                            \"org.apache.nifi.processors.cipher.EncryptContentAge\",\n+                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\"\n+                        ],\n+                        \"deprecationReason\": \"EncryptContentAge or EncryptContentPGP should be used for encrypting new files using standard formatting. DecryptContent supports deciphering historical files.\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Schema Write Strategy\": {\n+                            \"Encryption Algorithm\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n-                                        \"displayName\": \"Do Not Write Schema\",\n-                                        \"value\": \"no-schema\"\n+                                        \"description\": \"org.apache.nifi.security.util.EncryptionMethod@57a7583[Algorithm name=PBEWITHMD5AND128BITAES-CBC-OPENSSL,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"MD5_128AES\",\n+                                        \"value\": \"MD5_128AES\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n-                                        \"displayName\": \"Set 'schema.name' Attribute\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5AND192BITAES-CBC-OPENSSL,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"MD5_192AES\",\n+                                        \"value\": \"MD5_192AES\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n-                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n-                                        \"value\": \"full-schema-attribute\"\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5AND256BITAES-CBC-OPENSSL,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"MD5_256AES\",\n+                                        \"value\": \"MD5_256AES\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5ANDDES,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"MD5_DES\",\n+                                        \"value\": \"MD5_DES\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5ANDRC2,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"MD5_RC2\",\n+                                        \"value\": \"MD5_RC2\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Schema Registry Reference\",\n-                                        \"value\": \"confluent-encoded\"\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA1ANDRC2,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA1_RC2\",\n+                                        \"value\": \"SHA1_RC2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA1ANDDES,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA1_DES\",\n+                                        \"value\": \"SHA1_DES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND128BITAES-CBC-BC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_128AES\",\n+                                        \"value\": \"SHA_128AES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND192BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_192AES\",\n+                                        \"value\": \"SHA_192AES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND256BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_256AES\",\n+                                        \"value\": \"SHA_256AES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND40BITRC2-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_40RC2\",\n+                                        \"value\": \"SHA_40RC2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND128BITRC2-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_128RC2\",\n+                                        \"value\": \"SHA_128RC2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND40BITRC4,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_40RC4\",\n+                                        \"value\": \"SHA_40RC4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND128BITRC4,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_128RC4\",\n+                                        \"value\": \"SHA_128RC4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA256AND128BITAES-CBC-BC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA256_128AES\",\n+                                        \"value\": \"SHA256_128AES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA256AND192BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA256_192AES\",\n+                                        \"value\": \"SHA256_192AES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA256AND256BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA256_256AES\",\n+                                        \"value\": \"SHA256_256AES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND2-KEYTRIPLEDES-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_2KEYTRIPLEDES\",\n+                                        \"value\": \"SHA_2KEYTRIPLEDES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND3-KEYTRIPLEDES-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_3KEYTRIPLEDES\",\n+                                        \"value\": \"SHA_3KEYTRIPLEDES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAANDTWOFISH-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_TWOFISH\",\n+                                        \"value\": \"SHA_TWOFISH\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PGP,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"PGP\",\n+                                        \"value\": \"PGP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PGP-ASCII-ARMOR,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"PGP_ASCII_ARMOR\",\n+                                        \"value\": \"PGP_ASCII_ARMOR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=AES/CBC/NoPadding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n+                                        \"displayName\": \"AES_CBC_NO_PADDING\",\n+                                        \"value\": \"AES_CBC_NO_PADDING\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=AES/CBC/PKCS7Padding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n+                                        \"displayName\": \"AES_CBC\",\n+                                        \"value\": \"AES_CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=AES/CTR/NoPadding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n+                                        \"displayName\": \"AES_CTR\",\n+                                        \"value\": \"AES_CTR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=AES/GCM/NoPadding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n+                                        \"displayName\": \"AES_GCM\",\n+                                        \"value\": \"AES_GCM\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"no-schema\",\n-                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n-                                \"displayName\": \"Schema Write Strategy\",\n+                                \"defaultValue\": \"AES_GCM\",\n+                                \"description\": \"The Encryption Algorithm to use\",\n+                                \"displayName\": \"Encryption Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Write Strategy\",\n+                                \"name\": \"Encryption Algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"avro-add-list-element-records\": {\n+                            \"Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Encrypt\",\n+                                        \"value\": \"Encrypt\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Decrypt\",\n+                                        \"value\": \"Decrypt\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies the value for 'parquet.avro.add-list-element-records' in the underlying Parquet library\",\n-                                \"displayName\": \"Avro Add List Element Records\",\n+                                \"defaultValue\": \"Encrypt\",\n+                                \"description\": \"Specifies whether the content should be encrypted or decrypted\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"avro-add-list-element-records\",\n+                                \"name\": \"Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"avro-write-old-list-structure\": {\n+                            \"Password\": {\n+                                \"description\": \"The Password to use for encrypting or decrypting the data\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"allow-weak-crypto\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Operation will not be blocked and no alerts will be presented when unsafe combinations of encryption algorithms and passwords are provided\",\n+                                        \"displayName\": \"Allowed\",\n+                                        \"value\": \"allowed\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"When set, operation will be blocked and alerts will be presented to the user if unsafe combinations of encryption algorithms and passwords are provided on a JVM with limited strength crypto. To fix this, see the Admin Guide.\",\n+                                        \"displayName\": \"Not Allowed\",\n+                                        \"value\": \"not-allowed\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies the value for 'parquet.avro.write-old-list-structure' in the underlying Parquet library\",\n-                                \"displayName\": \"Avro Write Old List Structure\",\n+                                \"defaultValue\": \"not-allowed\",\n+                                \"description\": \"Overrides the default behavior to prevent unsafe combinations of encryption algorithms and short passwords on JVMs with limited strength cryptographic jurisdiction policies\",\n+                                \"displayName\": \"Allow insecure cryptographic modes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"avro-write-old-list-structure\",\n+                                \"name\": \"allow-weak-crypto\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached\",\n-                                \"displayName\": \"Cache Size\",\n+                            \"key-derivation-function\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The cipher is given a raw key conforming to the algorithm specifications\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"MD5 @ 1000 iterations\",\n+                                        \"displayName\": \"NiFi Legacy KDF\",\n+                                        \"value\": \"NIFI_LEGACY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Single iteration MD5 compatible with PKCS#5 v1.5\",\n+                                        \"displayName\": \"OpenSSL EVP_BytesToKey\",\n+                                        \"value\": \"OPENSSL_EVP_BYTES_TO_KEY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Bcrypt with configurable work factor. See Admin Guide\",\n+                                        \"displayName\": \"Bcrypt\",\n+                                        \"value\": \"BCRYPT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Scrypt with configurable cost parameters. See Admin Guide\",\n+                                        \"displayName\": \"Scrypt\",\n+                                        \"value\": \"SCRYPT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PBKDF2 with configurable hash function and iteration count. See Admin Guide\",\n+                                        \"displayName\": \"PBKDF2\",\n+                                        \"value\": \"PBKDF2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Argon2 with configurable cost parameters. See Admin Guide.\",\n+                                        \"displayName\": \"Argon2\",\n+                                        \"value\": \"ARGON2\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the key derivation function to generate the key from the password (and salt)\",\n+                                \"displayName\": \"Key Derivation Function\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n+                                \"name\": \"key-derivation-function\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression-type\": {\n+                            \"pgp-symmetric-cipher\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UNCOMPRESSED\",\n-                                        \"value\": \"UNCOMPRESSED\"\n+                                        \"displayName\": \"IDEA\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n+                                        \"displayName\": \"TRIPLE_DES\",\n+                                        \"value\": \"2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n+                                        \"displayName\": \"CAST5\",\n+                                        \"value\": \"3\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n+                                        \"displayName\": \"BLOWFISH\",\n+                                        \"value\": \"4\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BROTLI\",\n-                                        \"value\": \"BROTLI\"\n+                                        \"displayName\": \"DES\",\n+                                        \"value\": \"6\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n+                                        \"displayName\": \"AES_128\",\n+                                        \"value\": \"7\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ZSTD\",\n-                                        \"value\": \"ZSTD\"\n+                                        \"displayName\": \"AES_192\",\n+                                        \"value\": \"8\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LZ4_RAW\",\n-                                        \"value\": \"LZ4_RAW\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"UNCOMPRESSED\",\n-                                \"description\": \"The type of compression for the file being written.\",\n-                                \"displayName\": \"Compression Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dictionary-page-size\": {\n-                                \"description\": \"The dictionary page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Dictionary Page Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dictionary-page-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"enable-dictionary-encoding\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"AES_256\",\n+                                        \"value\": \"9\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"TWOFISH\",\n+                                        \"value\": \"10\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether dictionary encoding should be enabled for the Parquet writer\",\n-                                \"displayName\": \"Enable Dictionary Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-dictionary-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"enable-validation\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"CAMELLIA_128\",\n+                                        \"value\": \"11\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"CAMELLIA_192\",\n+                                        \"value\": \"12\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"CAMELLIA_256\",\n+                                        \"value\": \"13\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether validation should be enabled for the Parquet writer\",\n-                                \"displayName\": \"Enable Validation\",\n+                                \"defaultValue\": \"7\",\n+                                \"description\": \"When using PGP encryption, this is the symmetric cipher to be used. This property is ignored if Encryption Algorithm is not PGP or PGP-ASCII-ARMOR\\nNote that the provided cipher is only used duringthe encryption phase, while it is inferred from the ciphertext in the decryption phase\",\n+                                \"displayName\": \"PGP Symmetric Cipher\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-validation\",\n+                                \"name\": \"pgp-symmetric-cipher\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"int96-fields\": {\n-                                \"description\": \"List of fields with full path that should be treated as INT96 timestamps.\",\n-                                \"displayName\": \"INT96 Fields\",\n+                            \"private-keyring-file\": {\n+                                \"description\": \"In a PGP decrypt mode, this keyring contains the private key of the recipient\",\n+                                \"displayName\": \"Private Keyring File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"int96-fields\",\n+                                \"name\": \"private-keyring-file\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-padding-size\": {\n-                                \"description\": \"The maximum amount of padding that will be used to align row groups with blocks in the underlying filesystem. If the underlying filesystem is not a block filesystem like HDFS, this has no effect. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Max Padding Size\",\n+                            \"private-keyring-passphrase\": {\n+                                \"description\": \"In a PGP decrypt mode, this is the private keyring passphrase\",\n+                                \"displayName\": \"Private Keyring Passphrase\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"max-padding-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"private-keyring-passphrase\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"page-size\": {\n-                                \"description\": \"The page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Page Size\",\n+                            \"public-key-user-id\": {\n+                                \"description\": \"In a PGP encrypt mode, this user id of the recipient\",\n+                                \"displayName\": \"Public Key User Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"page-size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"public-key-user-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"row-group-size\": {\n-                                \"description\": \"The row group size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Row Group Size\",\n+                            \"public-keyring-file\": {\n+                                \"description\": \"In a PGP encrypt mode, this keyring contains the public key of the recipient\",\n+                                \"displayName\": \"Public Keyring File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"row-group-size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"public-keyring-file\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n-                                        \"displayName\": \"Inherit Record Schema\",\n-                                        \"value\": \"inherit-record-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"inherit-record-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                            \"raw-key-hex\": {\n+                                \"description\": \"In keyed encryption, this is the raw key, encoded in hexadecimal\",\n+                                \"displayName\": \"Raw Key (hexadecimal)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"raw-key-hex\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Any FlowFile that is successfully encrypted or decrypted will be routed to success\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that cannot be encrypted or decrypted will be routed to failure\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"CPU\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"Argon2\",\n+                            \"Bcrypt\",\n+                            \"JCE\",\n+                            \"KDF\",\n+                            \"PBKDF2\",\n+                            \"Scrypt\",\n+                            \"decryption\",\n+                            \"encryption\",\n+                            \"iv\",\n+                            \"password\",\n+                            \"salt\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.EncryptContent\",\n+                        \"typeDescription\": \"Encrypts or Decrypts a FlowFile using either symmetric encryption with a raw key or password and randomly generated salt, or asymmetric encryption using a public and secret key.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"\\\"encrypted\\\" or \\\"decrypted\\\" depending on the processor action\",\n+                                \"name\": \"encryptcontent.action\"\n+                            },\n+                            {\n+                                \"description\": \"The algorithm used for the cryptographic operation\",\n+                                \"name\": \"encryptcontent.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"The cipher text length in bytes (including IV, salt, and delimiters if present). Determined from incoming content in decrypt mode; outgoing content in encrypt mode\",\n+                                \"name\": \"encryptcontent.cipher_text_length\"\n+                            },\n+                            {\n+                                \"description\": \"The Initialization Vector in hex encoding (if present)\",\n+                                \"name\": \"encryptcontent.iv\"\n+                            },\n+                            {\n+                                \"description\": \"The IV length in bytes\",\n+                                \"name\": \"encryptcontent.iv_length\"\n+                            },\n+                            {\n+                                \"description\": \"The Key Derivation Function used if Password-Based Encryption was enabled. See Admin Guide - Key Derivation Functions\",\n+                                \"name\": \"encryptcontent.kdf\"\n+                            },\n+                            {\n+                                \"description\": \"The KDF-specific salt including algorithm and cost parameters (if present). See Admin Guide - Key Derivation Functions\",\n+                                \"name\": \"encryptcontent.kdf_salt\"\n+                            },\n+                            {\n+                                \"description\": \"The KDF salt length in bytes\",\n+                                \"name\": \"encryptcontent.kdf_salt_length\"\n+                            },\n+                            {\n+                                \"description\": \"The number of iterations used in PBKDF2 KDF (if present). PBKDF2 does not encode the cost parameter in a custom salt\",\n+                                \"name\": \"encryptcontent.pbkdf2_iterations\"\n+                            },\n+                            {\n+                                \"description\": \"The plaintext length in bytes. Determined from incoming content in encrypt mode; outgoing content in decrypt mode\",\n+                                \"name\": \"encryptcontent.plaintext_length\"\n+                            },\n+                            {\n+                                \"description\": \"The raw salt in hex encoding (if present)\",\n+                                \"name\": \"encryptcontent.salt\"\n+                            },\n+                            {\n+                                \"description\": \"The raw salt length in bytes\",\n+                                \"name\": \"encryptcontent.salt_length\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp at which the cryptographic operation occurred in 'yyyy-MM-dd HH:mm:ss.SSS Z' format\",\n+                                \"name\": \"encryptcontent.timestamp\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"batch-count\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum number of FlowFiles that EnforceOrder can process at an execution.\",\n+                                \"displayName\": \"Batch Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"batch-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                            \"group-id\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"EnforceOrder is capable of multiple ordering groups. 'Group Identifier' is used to determine which group a FlowFile belongs to. This property will be evaluated with each incoming FlowFile. If evaluated result is empty, the FlowFile will be routed to failure.\",\n+                                \"displayName\": \"Group Identifier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n+                                \"name\": \"group-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-cache\": {\n-                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n-                                \"displayName\": \"Schema Cache\",\n+                            \"inactive-timeout\": {\n+                                \"defaultValue\": \"30 min\",\n+                                \"description\": \"Indicates the duration after which state for an inactive group will be cleared from managed state. Group is determined as inactive if any new incoming FlowFile has not seen for a group for specified duration. Inactive Timeout must be longer than Wait Timeout. If a FlowFile arrives late after its group is already cleared, it will be treated as a brand new group, but will never match the order since expected preceding FlowFiles are already gone. The FlowFile will eventually timeout for waiting and routed to 'overtook'. To avoid this, group states should be kept long enough, however, shorter duration would be helpful for reusing the same group identifier again.\",\n+                                \"displayName\": \"Inactive Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"inactive-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"initial-order\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When the first FlowFile of a group arrives, initial target order will be computed and stored in the managed state. After that, target order will start being tracked by EnforceOrder and stored in the state management store. If Expression Language is used but evaluated result was not an integer, then the FlowFile will be routed to failure, and initial order will be left unknown until consecutive FlowFiles provide a valid initial order.\",\n+                                \"displayName\": \"Initial Order\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"name\": \"initial-order\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-protocol-version\": {\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n-                                        \"propertyName\": \"Schema Write Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n-                                \"displayName\": \"Schema Protocol Version\",\n+                            \"maximum-order\": {\n+                                \"description\": \"If specified, any FlowFiles that have larger order will be routed to failure. This property is computed only once for a given group. After a maximum order is computed, it will be persisted in the state management store and used for other FlowFiles belonging to the same group. If Expression Language is used but evaluated result was not an integer, then the FlowFile will be routed to failure, and maximum order will be left unknown until consecutive FlowFiles provide a valid maximum order.\",\n+                                \"displayName\": \"Maximum Order\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-protocol-version\",\n+                                \"name\": \"maximum-order\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"order-attribute\": {\n+                                \"description\": \"A name of FlowFile attribute whose value will be used to enforce order of FlowFiles within a group. If a FlowFile does not have this attribute, or its value is not an integer, the FlowFile will be routed to failure.\",\n+                                \"displayName\": \"Order Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"name\": \"order-attribute\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"writer-version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PARQUET_1_0\",\n-                                        \"value\": \"PARQUET_1_0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PARQUET_2_0\",\n-                                        \"value\": \"PARQUET_2_0\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version used by Parquet writer\",\n-                                \"displayName\": \"Writer Version\",\n+                            \"wait-timeout\": {\n+                                \"defaultValue\": \"10 min\",\n+                                \"description\": \"Indicates the duration after which waiting FlowFiles will be routed to the 'overtook' relationship.\",\n+                                \"displayName\": \"Wait Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"writer-version\",\n-                                \"required\": false,\n+                                \"name\": \"wait-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"EnforceOrder uses following states per ordering group: '<groupId>.target' is a order number which is being waited to arrive next. When a FlowFile with a matching order arrives, or a FlowFile overtakes the FlowFile being waited for because of wait timeout, target order will be updated to (FlowFile.order + 1). '<groupId>.max is the maximum order number for a group. '<groupId>.updatedAt' is a timestamp when the order of a group was updated last time. These managed states will be removed automatically once a group is determined as inactive, see 'Inactive Timeout' for detail.\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"A FlowFile that waited for preceding FlowFiles longer than Wait Timeout and overtook those FlowFiles, will be routed to this relationship.\",\n+                                \"name\": \"overtook\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile that has an order younger than current, which means arrived too late and skipped, will be routed to this relationship.\",\n+                                \"name\": \"skipped\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile with a matching order number will be routed to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile with non matching order will be routed to this relationship\",\n+                                \"name\": \"wait\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFiles which does not have required attributes, or fails to compute those will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"parquet\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"result\",\n-                            \"row\",\n-                            \"serializer\",\n-                            \"set\",\n-                            \"writer\"\n+                            \"order\",\n+                            \"sort\"\n                         ],\n-                        \"type\": \"org.apache.nifi.parquet.ParquetRecordSetWriter\",\n-                        \"typeDescription\": \"Writes the contents of a RecordSet in Parquet format.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.EnforceOrder\",\n+                        \"typeDescription\": \"Enforces expected ordering of FlowFiles that belong to the same data group within a single node.  Although PriorityAttributePrioritizer can be used on a connection to ensure that flow files going through that connection are in priority order, depending on error-handling, branching, and other flow designs, it is possible for FlowFiles to get out-of-order. EnforceOrder can be used to enforce original ordering for those FlowFiles. [IMPORTANT] In order to take effect of EnforceOrder, FirstInFirstOutPrioritizer should be used at EVERY downstream relationship UNTIL the order of FlowFiles physically get FIXED by operation such as MergeContent or being stored to the final destination.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All FlowFiles going through this processor will have this attribute. This value is used to determine wait timeout.\",\n+                                \"name\": \"EnforceOrder.startedAt\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles going through this processor will have this attribute denoting which relationship it was routed to.\",\n+                                \"name\": \"EnforceOrder.result\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles routed to 'failure' or 'skipped' relationship will have this attribute describing details.\",\n+                                \"name\": \"EnforceOrder.detail\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles routed to 'wait' or 'skipped' relationship will have this attribute denoting expected order when the FlowFile was processed.\",\n+                                \"name\": \"EnforceOrder.expectedOrder\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If <Destination>='flowfile-attribute' then that FlowFile attribute will be set to any JSON objects that match the JsonPath.  If <Destination>='flowfile-content' then the FlowFile content will be updated to any JSON objects that match the JsonPath.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute')\",\n+                                \"value\": \"A JsonPath expression\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Records Per Split\": {\n-                                \"description\": \"Specifies how many records should be covered in each FlowFile\",\n-                                \"displayName\": \"Records Per Split\",\n+                            \"Destination\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the JsonPath evaluation are written to the FlowFile content or a FlowFile attribute; if using attribute, must specify the Attribute Name property. If set to flowfile-content, only one JsonPath may be specified, and the property name is ignored.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Records Per Split\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Zero Content Output\": {\n+                            \"Max String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n+                                \"displayName\": \"Max String Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max String Length\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Null Value Representation\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"empty string\",\n+                                        \"value\": \"empty string\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"the string 'null'\",\n+                                        \"value\": \"the string 'null'\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to do, or do not copy the content of input FlowFile.\",\n-                                \"displayName\": \"Zero Content Output\",\n+                                \"defaultValue\": \"empty string\",\n+                                \"description\": \"Indicates the desired representation of JSON Path expressions resulting in a null value.\",\n+                                \"displayName\": \"Null Value Representation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Zero Content Output\",\n+                                \"name\": \"Null Value Representation\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Path Not Found Behavior\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"warn\",\n+                                        \"value\": \"warn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"skip\",\n+                                        \"value\": \"skip\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ignore\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"flowfile-attribute\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Destination\",\n+                                        \"propertyName\": \"Destination\"\n+                                    }\n+                                ],\n+                                \"description\": \"Indicates how to handle missing JSON path expressions when destination is set to 'flowfile-attribute'. Selecting 'warn' will generate a warning when a JSON path expression is not found. Selecting 'skip' will omit attributes for any unmatched JSON path expressions.\",\n+                                \"displayName\": \"Path Not Found Behavior\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Path Not Found Behavior\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Return Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"auto-detect\",\n+                                        \"value\": \"auto-detect\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"json\",\n+                                        \"value\": \"json\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"scalar\",\n+                                        \"value\": \"scalar\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Indicates the desired return type of the JSON Path expressions.  Selecting 'auto-detect' will set the return type to 'json' for a Destination of 'flowfile-content', and 'scalar' for a Destination of 'flowfile-attribute'.\",\n+                                \"displayName\": \"Return Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Return Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Gets the index of first record in the input.\",\n-                                \"name\": \"record.offset\"\n-                            },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Gets the number of records in the input.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath cannot be evaluated against the content of the FlowFile; for instance, if the FlowFile is not valid JSON\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Gets the start offset of the selected row group in the parquet file.\",\n-                                \"name\": \"parquet.file.range.startOffset\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n+                                \"name\": \"unmatched\"\n                             },\n                             {\n-                                \"description\": \"Gets the end offset of the selected row group in the parquet file.\",\n-                                \"name\": \"parquet.file.range.endOffset\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles, with special attributes that represent a chunk of the input file.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath is successfully evaluated and the FlowFile is modified as a result\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"break apart\",\n-                            \"cluster\",\n-                            \"efficient processing\",\n-                            \"load balance\",\n-                            \"parquet\",\n-                            \"partition\",\n-                            \"split\"\n+                            \"JSON\",\n+                            \"JsonPath\",\n+                            \"evaluate\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.parquet.CalculateParquetOffsets\",\n-                        \"typeDescription\": \"The processor generates N flow files from the input, and adds attributes with the offsets required to read the group of rows in the FlowFile's content. Can be used to increase the overall efficiency of processing extremely large Parquet files.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the index of first record of the parquet file.\",\n-                                \"name\": \"record.offset\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the number of records in the parquet file.\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.EvaluateJsonPath\",\n+                        \"typeDescription\": \"Evaluates one or more JsonPath expressions against the content of a FlowFile. The results of those expressions are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor. JsonPaths are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is flowfile-attribute; otherwise, the property name is ignored). The value of the property must be a valid JsonPath expression. A Return Type of 'auto-detect' will make a determination based off the configured destination. When 'Destination' is set to 'flowfile-attribute,' a return type of 'scalar' will be used. When 'Destination' is set to 'flowfile-content,' a return type of 'JSON' will be used.If the JsonPath evaluates to a JSON array or JSON object and the Return Type is set to 'scalar' the FlowFile will be unmodified and will be routed to failure. A Return Type of JSON can return scalar values if the provided JsonPath evaluates to the specified value and will be routed as a match.If Destination is 'flowfile-content' and the JsonPath does not evaluate to a defined path, the FlowFile will be routed to 'unmatched' without having its contents modified. If Destination is 'flowfile-attribute' and the expression matches nothing, attributes will be created with empty strings as the value unless 'Path Not Found Behaviour' is set to 'skip', and the FlowFile will always be routed to 'matched.'\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If <Destination>='flowfile-attribute' then the FlowFile attribute is set to the result of the XPath Expression.  If <Destination>='flowfile-content' then the FlowFile content is set to the result of the XPath Expression.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute'\",\n+                                \"value\": \"An XPath expression\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Zero Content Output\": {\n+                            \"Destination\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the XPath evaluation are written to the FlowFile content or a FlowFile attribute; if using attribute, must specify the Attribute Name property. If set to flowfile-content, only one XPath may be specified, and the property name is ignored.\",\n+                                \"displayName\": \"Destination\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Destination\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Return Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"auto-detect\",\n+                                        \"value\": \"auto-detect\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"nodeset\",\n+                                        \"value\": \"nodeset\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Indicates the desired return type of the Xpath expressions.  Selecting 'auto-detect' will set the return type to 'nodeset' for a Destination of 'flowfile-content', and 'string' for a Destination of 'flowfile-attribute'.\",\n+                                \"displayName\": \"Return Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Return Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Validate DTD\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to do, or do not copy the content of input FlowFile.\",\n-                                \"displayName\": \"Zero Content Output\",\n+                                \"description\": \"Allow embedded Document Type Declaration in XML. This feature should be disabled to avoid XML entity expansion vulnerabilities.\",\n+                                \"displayName\": \"Allow DTD\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Zero Content Output\",\n+                                \"name\": \"Validate DTD\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles, with special attributes that represent a chunk of the input file.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the XPath cannot be evaluated against the content of the FlowFile; for instance, if the FlowFile is not valid XML, or if the Return Type is 'nodeset' and the XPath evaluates to multiple nodes\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when the XPath does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n+                                \"name\": \"unmatched\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when the XPath is successfully evaluated and the FlowFile is modified as a result\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Processing requires reading the entire FlowFile into memory\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"break apart\",\n-                            \"cluster\",\n-                            \"efficient processing\",\n-                            \"load balance\",\n-                            \"parquet\",\n-                            \"partition\",\n-                            \"split\"\n+                            \"XML\",\n+                            \"XPath\",\n+                            \"evaluate\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.parquet.CalculateParquetRowGroupOffsets\",\n-                        \"typeDescription\": \"The processor generates one FlowFile from each Row Group of the input, and adds attributes with the offsets required to read the group of rows in the FlowFile's content. Can be used to increase the overall efficiency of processing extremely large Parquet files.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.EvaluateXPath\",\n+                        \"typeDescription\": \"Evaluates one or more XPaths against the content of a FlowFile. The results of those XPaths are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor. XPaths are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is flowfile-attribute; otherwise, the property name is ignored). The value of the property must be a valid XPath expression. If the XPath evaluates to more than one node and the Return Type is set to 'nodeset' (either directly, or via 'auto-detect' with a Destination of 'flowfile-content'), the FlowFile will be unmodified and will be routed to failure. If the XPath does not evaluate to a Node, the FlowFile will be routed to 'unmatched' without having its contents modified. If Destination is flowfile-attribute and the expression matches nothing, attributes will be created with empty strings as the value, and the FlowFile will always be routed to 'matched'\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the start offset of the selected row group in the parquet file.\",\n-                                \"name\": \"parquet.file.range.startOffset\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the end offset of the selected row group in the parquet file.\",\n-                                \"name\": \"parquet.file.range.endOffset\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the count of records in the selected row group.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"This processor adds user-defined attributes if the <Destination> property is set to flowfile-attribute.\",\n+                                \"name\": \"user-defined\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If <Destination>='flowfile-attribute' then the FlowFile attribute is set to the result of the XQuery.  If <Destination>='flowfile-content' then the FlowFile content is set to the result of the XQuery.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute'\",\n+                                \"value\": \"An XQuery\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"compression-type\": {\n+                            \"Destination\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UNCOMPRESSED\",\n-                                        \"value\": \"UNCOMPRESSED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BROTLI\",\n-                                        \"value\": \"BROTLI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ZSTD\",\n-                                        \"value\": \"ZSTD\"\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LZ4_RAW\",\n-                                        \"value\": \"LZ4_RAW\"\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UNCOMPRESSED\",\n-                                \"description\": \"The type of compression for the file being written.\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the XQuery evaluation are written to the FlowFile content or a FlowFile attribute. If set to <flowfile-content>, only one XQuery may be specified and the property name is ignored.  If set to <flowfile-attribute> and the XQuery returns more than one result, multiple attributes will be added to theFlowFile, each named with a '.n' one-up number appended to the specified attribute name\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-type\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dictionary-page-size\": {\n-                                \"description\": \"The dictionary page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Dictionary Page Size\",\n+                            \"Output: Indent\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether the processor may add additional whitespace when outputting a result tree.\",\n+                                \"displayName\": \"Output: Indent\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dictionary-page-size\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output: Indent\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"enable-dictionary-encoding\": {\n+                            \"Output: Method\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"xml\",\n+                                        \"value\": \"xml\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether dictionary encoding should be enabled for the Parquet writer\",\n-                                \"displayName\": \"Enable Dictionary Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-dictionary-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"enable-validation\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"html\",\n+                                        \"value\": \"html\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether validation should be enabled for the Parquet writer\",\n-                                \"displayName\": \"Enable Validation\",\n+                                \"defaultValue\": \"xml\",\n+                                \"description\": \"Identifies the overall method that should be used for outputting a result tree.\",\n+                                \"displayName\": \"Output: Method\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-validation\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-padding-size\": {\n-                                \"description\": \"The maximum amount of padding that will be used to align row groups with blocks in the underlying filesystem. If the underlying filesystem is not a block filesystem like HDFS, this has no effect. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Max Padding Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"max-padding-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"page-size\": {\n-                                \"description\": \"The page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Page Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"page-size\",\n-                                \"required\": false,\n+                                \"name\": \"Output: Method\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"row-group-size\": {\n-                                \"description\": \"The row group size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Row Group Size\",\n+                            \"Output: Omit XML Declaration\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether the processor should output an XML declaration when transforming a result tree.\",\n+                                \"displayName\": \"Output: Omit XML Declaration\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"row-group-size\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output: Omit XML Declaration\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"writer-version\": {\n+                            \"Validate DTD\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PARQUET_1_0\",\n-                                        \"value\": \"PARQUET_1_0\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PARQUET_2_0\",\n-                                        \"value\": \"PARQUET_2_0\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the version used by Parquet writer\",\n-                                \"displayName\": \"Writer Version\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Allow embedded Document Type Declaration in XML. This feature should be disabled to avoid XML entity expansion vulnerabilities.\",\n+                                \"displayName\": \"Allow DTD\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"writer-version\",\n-                                \"required\": false,\n+                                \"name\": \"Validate DTD\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Parquet file that was converted successfully from Avro\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the XQuery cannot be evaluated against the content of the FlowFile.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Avro content that could not be processed\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the XQuery does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n+                                \"name\": \"unmatched\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when the XQuery is successfully evaluated and the FlowFile is modified as a result\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Processing requires reading the entire FlowFile into memory\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"avro\",\n-                            \"convert\",\n-                            \"parquet\"\n+                            \"XML\",\n+                            \"XPath\",\n+                            \"XQuery\",\n+                            \"evaluate\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.parquet.ConvertAvroToParquet\",\n-                        \"typeDescription\": \"Converts Avro records into Parquet file format. The incoming FlowFile should be a valid avro file. If an incoming FlowFile does not contain any records, an empty parquet file is the output. NOTE: Many Avro datatypes (collections, primitives, and unions of primitives, e.g.) can be converted to parquet, but unions of collections and other complex datatypes may not be able to be converted to Parquet.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.EvaluateXQuery\",\n+                        \"typeDescription\": \"Evaluates one or more XQueries against the content of a FlowFile.  The results of those XQueries are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor.  XQueries are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is 'flowfile-attribute'; otherwise, the property name is ignored).  The value of the property must be a valid XQuery.  If the XQuery returns more than one result, new attributes or FlowFiles (for Destinations of 'flowfile-attribute' or 'flowfile-content' respectively) will be created for each result (attributes will have a '.n' one-up number appended to the specified attribute name).  If any provided XQuery returns a result, the FlowFile(s) will be routed to 'matched'. If no provided XQuery returns a result, the FlowFile will be routed to 'unmatched'.  If the Destination is 'flowfile-attribute' and the XQueries matche nothing, no attributes will be applied to the FlowFile.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the filename to the existing filename with the extension replaced by / added to by .parquet\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the number of records in the parquet file.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"This processor adds user-defined attributes if the <Destination> property is set to flowfile-attribute .\",\n+                                \"name\": \"user-defined\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"100 ms\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These environment variables are passed to the process spawned by this Processor\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"An environment variable name\",\n+                                \"value\": \"An environment variable value\"\n+                            }\n+                        ],\n                         \"explicitRestrictions\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"read distributed filesystem\"\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n+                            \"Argument Delimiter\": {\n+                                \"defaultValue\": \" \",\n+                                \"description\": \"Delimiter to use to separate arguments for a command [default: space]. Must be a single character.\",\n+                                \"displayName\": \"Argument Delimiter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"Argument Delimiter\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"Batch Duration\": {\n+                                \"description\": \"If the process is expected to be long-running and produce textual output, a batch duration can be specified so that the output will be captured for this amount of time and a FlowFile will then be sent out with the results and a new FlowFile will be started, rather than waiting for the process to finish before sending out the results\",\n+                                \"displayName\": \"Batch Duration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n+                                \"name\": \"Batch Duration\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"Command\": {\n+                                \"description\": \"Specifies the command to be executed; if just the name of an executable is provided, it must be in the user's environment PATH.\",\n+                                \"displayName\": \"Command\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n+                                \"name\": \"Command\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n+                            \"Command Arguments\": {\n+                                \"description\": \"The arguments to supply to the executable delimited by white space. White space can be escaped by enclosing it in double-quotes.\",\n+                                \"displayName\": \"Command Arguments\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n+                                \"name\": \"Command Arguments\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"filename\": {\n-                                \"defaultValue\": \"${path}/${filename}\",\n-                                \"description\": \"The name of the file to retrieve\",\n-                                \"displayName\": \"Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"filename\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"Output MIME type\": {\n+                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute. This property is ignored if 'Batch Duration' is set.\",\n+                                \"displayName\": \"Output MIME Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"name\": \"Output MIME type\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"Redirect Error Stream\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true will redirect any error stream output of the process to the output stream. This is particularly helpful for processes which write extensively to the error stream or for troubleshooting.\",\n+                                \"displayName\": \"Redirect Error Stream\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"name\": \"Redirect Error Stream\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The service for writing records to the FlowFile content\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Working Directory\": {\n+                                \"description\": \"The directory to use as the current working directory when executing the command\",\n+                                \"displayName\": \"Working Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Working Directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Gets the index of first record in the input.\",\n-                                \"name\": \"record.offset\"\n-                            },\n-                            {\n-                                \"description\": \"Gets the number of records in the input.\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ],\n                         \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.parquet.PutParquet\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles will be routed to this relationship if the content of the file cannot be retrieved, but might be able to be in the future if tried again. This generally indicates that the Fetch should be tried again.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles will be routed to this relationship once they have been updated with the content of the file\",\n+                                \"description\": \"All created FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles will be routed to this relationship if the content of the file cannot be retrieved and trying again will likely not be helpful. This would occur, for instance, if the file is not found or if there is a permissions issue\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"HDFS\",\n-                            \"fetch\",\n-                            \"get\",\n-                            \"hadoop\",\n-                            \"ingest\",\n-                            \"parquet\",\n-                            \"record\",\n+                            \"command\",\n+                            \"external\",\n+                            \"invoke\",\n+                            \"process\",\n+                            \"script\",\n                             \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.parquet.FetchParquet\",\n-                        \"typeDescription\": \"Reads from a given Parquet file and writes records to the content of the flow file using the selected record writer. The original Parquet file will remain unchanged, and the content of the flow file will be replaced with records of the selected type. This processor can be used with ListHDFS or ListFile to obtain a listing of files to fetch.\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ExecuteProcess\",\n+                        \"typeDescription\": \"Runs an operating system command specified by the user and writes the output of that command to a FlowFile. If the command is expected to be long-running, the Processor can output the partial data on a specified interval. When this option is used, the output is expected to be in textual format, as it typically does not make sense to split binary data on arbitrary time-based intervals.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"When a FlowFile is routed to 'failure', this attribute is added indicating why the file could not be fetched from the given filesystem.\",\n-                                \"name\": \"fetch.failure.reason\"\n+                                \"description\": \"Executed command\",\n+                                \"name\": \"command\"\n                             },\n                             {\n-                                \"description\": \"The number of records in the resulting flow file\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"Arguments of the command\",\n+                                \"name\": \"command.arguments\"\n                             },\n                             {\n-                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n-                                \"name\": \"hadoop.file.url\"\n+                                \"description\": \"Sets the MIME type of the output if the 'Output MIME Type' property is set and 'Batch Duration' is not set\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"100 ms\",\n-                        \"explicitRestrictions\": [\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to write any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"write distributed filesystem\"\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.type\",\n+                                \"value\": \"SQL type argument to be supplied\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.value\",\n+                                \"value\": \"Argument to be supplied\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.format\",\n+                                \"value\": \"SQL format argument to be supplied\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n+                            \"Database Connection Pooling Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                                \"name\": \"Database Connection Pooling Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Directory\": {\n-                                \"description\": \"The parent directory to which files should be written. Will be created if it doesn't exist.\",\n-                                \"displayName\": \"Directory\",\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL select query  , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n+                                \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"SQL select query\": {\n+                                \"description\": \"The SQL select query to execute. The query can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming flowfiles. If this property is empty, the content of the incoming flow file is expected to contain a valid SQL select query, to be issued by the processor to the database. Note that Expression Language is not evaluated for flow file contents.\",\n+                                \"displayName\": \"SQL select query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SQL select query\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"compression-format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BZIP2\",\n+                                        \"value\": \"BZIP2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEFLATE\",\n+                                        \"value\": \"DEFLATE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Compression type to use when writing Avro files. Default is None.\",\n+                                \"displayName\": \"Compression Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"compression-format\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-precision\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"avro-add-list-element-records\": {\n+                            \"dbf-normalize\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies the value for 'parquet.avro.add-list-element-records' in the underlying Parquet library\",\n-                                \"displayName\": \"Avro Add List Element Records\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to change non-Avro-compatible characters in column names to Avro-compatible characters. For example, colons and periods will be changed to underscores in order to build a valid Avro record.\",\n+                                \"displayName\": \"Normalize Table/Column Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"avro-add-list-element-records\",\n+                                \"name\": \"dbf-normalize\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"avro-write-old-list-structure\": {\n+                            \"dbf-user-logical-types\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies the value for 'parquet.avro.write-old-list-structure' in the underlying Parquet library\",\n-                                \"displayName\": \"Avro Write Old List Structure\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n+                                \"displayName\": \"Use Avro Logical Types\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"avro-write-old-list-structure\",\n+                                \"name\": \"dbf-user-logical-types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression-type\": {\n+                            \"esql-auto-commit\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UNCOMPRESSED\",\n-                                        \"value\": \"UNCOMPRESSED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BROTLI\",\n-                                        \"value\": \"BROTLI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ZSTD\",\n-                                        \"value\": \"ZSTD\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LZ4_RAW\",\n-                                        \"value\": \"LZ4_RAW\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UNCOMPRESSED\",\n-                                \"description\": \"The type of compression for the file being written.\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Enables or disables the auto commit functionality of the DB connection. Default value is 'true'. The default value can be used with most of the JDBC drivers and this functionality doesn't have any impact in most of the cases since this processor is used to read data. However, for some JDBC drivers such as PostgreSQL driver, it is required to disable the auto committing functionality to limit the number of result rows fetching at a time. When auto commit is enabled, postgreSQL driver loads whole result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html. \",\n+                                \"displayName\": \"Set Auto Commit\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-type\",\n+                                \"name\": \"esql-auto-commit\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dictionary-page-size\": {\n-                                \"description\": \"The dictionary page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Dictionary Page Size\",\n+                            \"esql-fetch-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n+                                \"displayName\": \"Fetch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dictionary-page-size\",\n-                                \"required\": false,\n+                                \"name\": \"esql-fetch-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"enable-dictionary-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether dictionary encoding should be enabled for the Parquet writer\",\n-                                \"displayName\": \"Enable Dictionary Encoding\",\n+                            \"esql-max-rows\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n+                                \"displayName\": \"Max Rows Per Flow File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-dictionary-encoding\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"esql-max-rows\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"enable-validation\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether validation should be enabled for the Parquet writer\",\n-                                \"displayName\": \"Enable Validation\",\n+                            \"esql-output-batch-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The fragment.count attribute will not be set on FlowFiles when this property is set.\",\n+                                \"displayName\": \"Output Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-validation\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"esql-output-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"sql-post-query\": {\n+                                \"description\": \"A semicolon-delimited list of queries executed after the main SQL query is executed. Example like setting session properties after main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n+                                \"displayName\": \"SQL Post-Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"sql-post-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"sql-pre-query\": {\n+                                \"description\": \"A semicolon-delimited list of queries executed before the main SQL query is executed. For example, set session properties before main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n+                                \"displayName\": \"SQL Pre-Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"sql-pre-query\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n+                                \"name\": \"sql.args.N.type\"\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"name\": \"sql.args.N.value\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"name\": \"sql.args.N.format\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"select\",\n+                            \"sql\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ExecuteSQL\",\n+                        \"typeDescription\": \"Executes provided SQL select query. Query result will be converted to Avro format. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query, and the query may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format. FlowFile attribute 'executesql.row.count' indicates how many rows were selected.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Contains the number of rows returned by the query. If 'Max Rows Per Flow File' is set, then this number will reflect the number of rows in the Flow File instead of the entire result set.\",\n+                                \"name\": \"executesql.row.count\"\n+                            },\n+                            {\n+                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds. If 'Max Rows Per Flow File' is set, then this number will reflect only the fetch time for the rows in the Flow File instead of the entire result set.\",\n+                                \"name\": \"executesql.query.duration\"\n+                            },\n+                            {\n+                                \"description\": \"Duration of the query execution time in milliseconds. This number will reflect the query execution time regardless of the 'Max Rows Per Flow File' setting.\",\n+                                \"name\": \"executesql.query.executiontime\"\n+                            },\n+                            {\n+                                \"description\": \"Duration of the result set fetch time in milliseconds. If 'Max Rows Per Flow File' is set, then this number will reflect only the fetch time for the rows in the Flow File instead of the entire result set.\",\n+                                \"name\": \"executesql.query.fetchtime\"\n+                            },\n+                            {\n+                                \"description\": \"Assuming multiple result sets are returned, the zero based index of this result set.\",\n+                                \"name\": \"executesql.resultset.index\"\n+                            },\n+                            {\n+                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n+                                \"name\": \"executesql.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"If the processor has an incoming connection, outgoing FlowFiles will have this attribute set to the value of the input FlowFile's UUID. If there is no incoming connection, the attribute will not be added.\",\n+                                \"name\": \"input.flowfile.uuid\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.type\",\n+                                \"value\": \"SQL type argument to be supplied\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.value\",\n+                                \"value\": \"Argument to be supplied\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.format\",\n+                                \"value\": \"SQL format argument to be supplied\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Database Connection Pooling Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n+                                \"name\": \"Database Connection Pooling Service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"max-padding-size\": {\n-                                \"description\": \"The maximum amount of padding that will be used to align row groups with blocks in the underlying filesystem. If the underlying filesystem is not a block filesystem like HDFS, this has no effect. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Max Padding Size\",\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL select query  , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"max-padding-size\",\n+                                \"name\": \"Max Wait Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SQL select query\": {\n+                                \"description\": \"The SQL select query to execute. The query can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming flowfiles. If this property is empty, the content of the incoming flow file is expected to contain a valid SQL select query, to be issued by the processor to the database. Note that Expression Language is not evaluated for flow file contents.\",\n+                                \"displayName\": \"SQL select query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SQL select query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"overwrite\": {\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-precision\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-user-logical-types\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not to overwrite existing files in the same directory with the same name. When set to false, flow files will be routed to failure when a file exists in the same directory with the same name.\",\n-                                \"displayName\": \"Overwrite Files\",\n+                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n+                                \"displayName\": \"Use Avro Logical Types\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"overwrite\",\n+                                \"name\": \"dbf-user-logical-types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"page-size\": {\n-                                \"description\": \"The page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Page Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"page-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"permissions-umask\": {\n-                                \"description\": \"A umask represented as an octal number which determines the permissions of files written to HDFS. This overrides the Hadoop Configuration dfs.umaskmode\",\n-                                \"displayName\": \"Permissions umask\",\n+                            \"esql-auto-commit\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Enables or disables the auto commit functionality of the DB connection. Default value is 'true'. The default value can be used with most of the JDBC drivers and this functionality doesn't have any impact in most of the cases since this processor is used to read data. However, for some JDBC drivers such as PostgreSQL driver, it is required to disable the auto committing functionality to limit the number of result rows fetching at a time. When auto commit is enabled, postgreSQL driver loads whole result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html. \",\n+                                \"displayName\": \"Set Auto Commit\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"permissions-umask\",\n-                                \"required\": false,\n+                                \"name\": \"esql-auto-commit\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The service for reading records from incoming flow files.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"esql-fetch-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n+                                \"displayName\": \"Fetch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"esql-fetch-size\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"remote-group\": {\n-                                \"description\": \"Changes the group of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change group\",\n-                                \"displayName\": \"Remote Group\",\n+                            \"esql-max-rows\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n+                                \"displayName\": \"Max Rows Per Flow File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"remote-group\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"esql-max-rows\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"remote-owner\": {\n-                                \"description\": \"Changes the owner of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change owner\",\n-                                \"displayName\": \"Remote Owner\",\n+                            \"esql-output-batch-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The fragment.count attribute will not be set on FlowFiles when this property is set.\",\n+                                \"displayName\": \"Output Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"remote-owner\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"esql-output-batch-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"remove-crc-files\": {\n+                            \"esqlrecord-normalize\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether the corresponding CRC file should be deleted upon successfully writing a Parquet file\",\n-                                \"displayName\": \"Remove CRC Files\",\n+                                \"description\": \"Whether to change characters in column names. For example, colons and periods will be changed to underscores.\",\n+                                \"displayName\": \"Normalize Table/Column Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"remove-crc-files\",\n-                                \"required\": false,\n+                                \"name\": \"esqlrecord-normalize\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"row-group-size\": {\n-                                \"description\": \"The row group size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Row Group Size\",\n+                            \"esqlrecord-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer may use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"esqlrecord-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"sql-post-query\": {\n+                                \"description\": \"A semicolon-delimited list of queries executed after the main SQL query is executed. Example like setting session properties after main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n+                                \"displayName\": \"SQL Post-Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"row-group-size\",\n+                                \"name\": \"sql-post-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"writer-version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PARQUET_1_0\",\n-                                        \"value\": \"PARQUET_1_0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PARQUET_2_0\",\n-                                        \"value\": \"PARQUET_2_0\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version used by Parquet writer\",\n-                                \"displayName\": \"Writer Version\",\n+                            \"sql-pre-query\": {\n+                                \"description\": \"A semicolon-delimited list of queries executed before the main SQL query is executed. For example, set session properties before main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n+                                \"displayName\": \"SQL Pre-Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"writer-version\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"sql-pre-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"The name of the file to write comes from the value of this attribute.\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n+                                \"name\": \"sql.args.N.type\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"name\": \"sql.args.N.value\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"name\": \"sql.args.N.format\"\n                             }\n                         ],\n-                        \"restricted\": true,\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Flow Files that could not be processed due to issues that can be retried are transferred to this relationship\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"Flow Files that have been successfully processed are transferred to this relationship\",\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Flow Files that could not be processed due to issue that cannot be retried are transferred to this relationship\",\n+                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"HDFS\",\n-                            \"filesystem\",\n-                            \"hadoop\",\n-                            \"parquet\",\n-                            \"put\",\n-                            \"record\"\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"record\",\n+                            \"select\",\n+                            \"sql\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.parquet.PutParquet\",\n-                        \"typeDescription\": \"Reads records from an incoming FlowFile using the provided Record Reader, and writes those records to a Parquet file. The schema for the Parquet file must be provided in the processor properties. This processor will first write a temporary dot file and upon successfully writing every record to the dot file, it will rename the dot file to it's final name. If the dot file cannot be renamed, the rename operation will be attempted up to 10 times, and if still not successful, the dot file will be deleted and the flow file will be routed to failure.  If any error occurs while reading records from the input, or writing records to the output, the entire dot file will be removed and the flow file will be routed to failure or retry, depending on the error.\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ExecuteSQLRecord\",\n+                        \"typeDescription\": \"Executes provided SQL select query. Query result will be converted to the format specified by a Record Writer. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query, and the query may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format. FlowFile attribute 'executesql.row.count' indicates how many rows were selected.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file is stored in this attribute.\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"Contains the number of rows returned in the select query\",\n+                                \"name\": \"executesql.row.count\"\n                             },\n                             {\n-                                \"description\": \"The absolute path to the file is stored in this attribute.\",\n-                                \"name\": \"absolute.hdfs.path\"\n+                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds\",\n+                                \"name\": \"executesql.query.duration\"\n                             },\n                             {\n-                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n-                                \"name\": \"hadoop.file.url\"\n+                                \"description\": \"Duration of the query execution time in milliseconds\",\n+                                \"name\": \"executesql.query.executiontime\"\n                             },\n                             {\n-                                \"description\": \"The number of records written to the Parquet file\",\n+                                \"description\": \"Duration of the result set fetch time in milliseconds\",\n+                                \"name\": \"executesql.query.fetchtime\"\n+                            },\n+                            {\n+                                \"description\": \"Assuming multiple result sets are returned, the zero based index of this result set.\",\n+                                \"name\": \"executesql.resultset.index\"\n+                            },\n+                            {\n+                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n+                                \"name\": \"executesql.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"If the processor has an incoming connection, outgoing FlowFiles will have this attribute set to the value of the input FlowFile's UUID. If there is no incoming connection, the attribute will not be added.\",\n+                                \"name\": \"input.flowfile.uuid\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records output by the Record Writer.\",\n                                 \"name\": \"record.count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-stateless-processor-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-stateless-processor-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Any dynamic property that is added will be provided to the stateless flow as a Parameter. The name of the property will be the name of the Parameter, and the value of the property will be the value of the Parameter. Because Parameter values may or may not be sensitive, all dynamic properties will be considered sensitive in order to protect their integrity.\",\n+                                \"description\": \"These environment variables are passed to the process spawned by this Processor\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Any Parameter name\",\n-                                \"value\": \"Any value\"\n+                                \"name\": \"An environment variable name\",\n+                                \"value\": \"An environment variable value\"\n+                            },\n+                            {\n+                                \"description\": \"These arguments are supplied to the process spawned by this Processor when using the Command Arguments Strategy : Dynamic Property Arguments. <commandIndex> is a number and it will determine the order.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"command.argument.<commandIndex>\",\n+                                \"value\": \"Argument to be supplied to the command\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n-                        \"explicitRestrictions\": [],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n+                            \"Argument Delimiter\": {\n+                                \"defaultValue\": \";\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Use NiFi Registry\"\n+                                            \"Command Arguments Property\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n-                                        \"propertyName\": \"Dataflow Specification Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies how long to wait before timing out when attempting to communicate with NiFi Registry\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Content Storage Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The FlowFile content will be stored on the NiFi JVM's heap. This is the most efficient option for small FlowFiles but can quickly exhaust the heap with larger FlowFiles, resulting in Out Of Memory Errors and node instability.\",\n-                                        \"displayName\": \"Store Content on Heap\",\n-                                        \"value\": \"Store Content on Heap\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile content will be stored on disk, within the configured Work Directory. The content will still be cleared between invocations and will not be persisted across restarts.\",\n-                                        \"displayName\": \"Store Content on Disk\",\n-                                        \"value\": \"Store Content on Disk\"\n+                                        \"propertyDisplayName\": \"Command Arguments Strategy\",\n+                                        \"propertyName\": \"argumentsStrategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Store Content on Disk\",\n-                                \"description\": \"Specifies where the content of FlowFiles that the Stateless dataflow is operating on should be stored. Note that the data is always considered temporary and may be deleted at any time. It is not intended to be persisted across restarted.\",\n-                                \"displayName\": \"Content Storage Strategy\",\n+                                \"description\": \"Delimiter to use to separate arguments for a command [default: ;]. Must be a single character\",\n+                                \"displayName\": \"Argument Delimiter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Content Storage Strategy\",\n+                                \"name\": \"Argument Delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Dataflow File\": {\n+                            \"Command Arguments\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Use Local File\"\n+                                            \"Command Arguments Property\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n-                                        \"propertyName\": \"Dataflow Specification Strategy\"\n+                                        \"propertyDisplayName\": \"Command Arguments Strategy\",\n+                                        \"propertyName\": \"argumentsStrategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The filename or URL that specifies the dataflow that is to be run\",\n-                                \"displayName\": \"Dataflow File/URL\",\n+                                \"description\": \"The arguments to supply to the executable delimited by the ';' character.\",\n+                                \"displayName\": \"Command Arguments\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dataflow File\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Command Arguments\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Command Path\": {\n+                                \"description\": \"Specifies the command to be executed; if just the name of an executable is provided, it must be in the user's environment PATH.\",\n+                                \"displayName\": \"Command Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Command Path\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Dataflow Specification Strategy\": {\n+                            \"Ignore STDIN\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Dataflow to run is stored as a file on the NiFi server or at a URL that is accessible to the NiFi server\",\n-                                        \"displayName\": \"Use Local File or URL\",\n-                                        \"value\": \"Use Local File\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Dataflow to run is stored in NiFi Registry\",\n-                                        \"displayName\": \"Use NiFi Registry\",\n-                                        \"value\": \"Use NiFi Registry\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Use Local File\",\n-                                \"description\": \"Specifies how the Processor should obtain a copy of the dataflow that it is to run\",\n-                                \"displayName\": \"Dataflow Specification Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the contents of the incoming flowfile will not be passed to the executing command\",\n+                                \"displayName\": \"Ignore STDIN\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dataflow Specification Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Dataflow Timeout\": {\n-                                \"defaultValue\": \"60 sec\",\n-                                \"description\": \"If the flow does not complete within this amount of time, the incoming FlowFile, if any, will be routed to the timeout relationship,the dataflow will be cancelled, and the invocation will end.\",\n-                                \"displayName\": \"Dataflow Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Dataflow Timeout\",\n-                                \"required\": true,\n+                                \"name\": \"Ignore STDIN\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Failure Ports\": {\n-                                \"description\": \"A comma-separated list of the names of Output Ports that exist at the root level of the dataflow. If any FlowFile is routed to one of the Ports whose name is listed here, the dataflow will be considered a failure, and the incoming FlowFile (if any) will be routed to 'failure'. If not specified, all Output Ports will be considered successful.\",\n-                                \"displayName\": \"Failure Ports\",\n+                            \"Max Attribute Length\": {\n+                                \"defaultValue\": \"256\",\n+                                \"description\": \"If routing the output of the stream command to an attribute, the number of characters put to the attribute value will be at most this amount. This is important because attributes are held in memory and large attributes will quickly cause out of memory issues. If the output goes longer than this value, it will truncated to fit. Consider making this smaller if able.\",\n+                                \"displayName\": \"Max Attribute Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Failure Ports\",\n+                                \"name\": \"Max Attribute Length\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Flow Name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use NiFi Registry\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n-                                        \"propertyName\": \"Dataflow Specification Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of the flow in the NiFi Registry\",\n-                                \"displayName\": \"Flow Name\",\n+                            \"Output Destination Attribute\": {\n+                                \"description\": \"If set, the output of the stream command will be put into an attribute of the original FlowFile instead of a separate FlowFile. There will no longer be a relationship for 'output stream' or 'nonzero status'. The value of this property will be the key for the output attribute.\",\n+                                \"displayName\": \"Output Destination Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Flow Name\",\n-                                \"required\": true,\n+                                \"name\": \"Output Destination Attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Flow Version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use NiFi Registry\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n-                                        \"propertyName\": \"Dataflow Specification Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The version of the flow in the NiFi Registry that should be retrieved. If not specified, the latest version will always be used.\",\n-                                \"displayName\": \"Flow Version\",\n+                            \"Output MIME Type\": {\n+                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute. This property is ignored if 'Output Destination Attribute' is set.\",\n+                                \"displayName\": \"Output MIME Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Flow Version\",\n+                                \"name\": \"Output MIME Type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Input Port\": {\n-                                \"description\": \"Specifies the name of the Input Port to send incoming FlowFiles to. This property is required if this processor has any incoming connections.\",\n-                                \"displayName\": \"Input Port\",\n+                            \"Working Directory\": {\n+                                \"description\": \"The directory to use as the current working directory when executing the command\",\n+                                \"displayName\": \"Working Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Input Port\",\n+                                \"name\": \"Working Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Krb5 Conf File\": {\n-                                \"description\": \"The KRB5 Conf file to use for configuring components that rely on Kerberos\",\n-                                \"displayName\": \"Krb5 Conf File\",\n+                            \"argumentsStrategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Arguments to be supplied to the executable are taken from the Command Arguments property\",\n+                                        \"displayName\": \"Command Arguments Property\",\n+                                        \"value\": \"Command Arguments Property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Arguments to be supplied to the executable are taken from dynamic properties with pattern of 'command.argument.<commandIndex>'\",\n+                                        \"displayName\": \"Dynamic Property Arguments\",\n+                                        \"value\": \"Dynamic Property Arguments\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Command Arguments Property\",\n+                                \"description\": \"Strategy for configuring arguments to be supplied to the command.\",\n+                                \"displayName\": \"Command Arguments Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Krb5 Conf File\",\n+                                \"name\": \"argumentsStrategy\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The destination path for the flow file created from the command's output, if the returned status code is zero.\",\n+                                \"name\": \"output stream\"\n                             },\n-                            \"Max Ingest Data Size\": {\n-                                \"description\": \"During the course of a stateless dataflow, some processors may require more data than they have available in order to proceed. For example, MergeContent may require a minimum number of FlowFiles before it can proceed. In this case, the dataflow may bring in additional data from its source Processor. However, this data may all be held in memory, so this property provides a mechanism for limiting the maximum amount of data that the source Processor can ingest before it will no longer be triggered to ingest additional data.\",\n-                                \"displayName\": \"Max Ingest Data Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Ingest Data Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The destination path for the flow file created from the command's output, if the returned status code is non-zero. All flow files routed to this relationship will be penalized.\",\n+                                \"name\": \"nonzero status\"\n                             },\n-                            \"Max Ingest FlowFiles\": {\n-                                \"description\": \"During the course of a stateless dataflow, some processors may require more data than they have available in order to proceed. For example, MergeContent may require a minimum number of FlowFiles before it can proceed. In this case, the dataflow may bring in additional data from its source Processor. However, this data may all be held in memory, so this property provides a mechanism for limiting the maximum number of FlowFiles that the source Processor can ingest before it will no longer be triggered to ingest additional data.\",\n-                                \"displayName\": \"Max Ingest FlowFiles\",\n+                            {\n+                                \"description\": \"The original FlowFile will be routed. It will have new attributes detailing the result of the script execution.\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"command\",\n+                            \"command execution\",\n+                            \"execute\",\n+                            \"stream\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ExecuteStreamCommand\",\n+                        \"typeDescription\": \"The ExecuteStreamCommand processor provides a flexible way to integrate external commands and scripts into NiFi data flows. ExecuteStreamCommand can pass the incoming FlowFile's content to the command that it executes similarly how piping works.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the command executed\",\n+                                \"name\": \"execution.command\"\n+                            },\n+                            {\n+                                \"description\": \"The semi-colon delimited list of arguments. Sensitive properties will be masked\",\n+                                \"name\": \"execution.command.args\"\n+                            },\n+                            {\n+                                \"description\": \"The exit status code returned from executing the command\",\n+                                \"name\": \"execution.status\"\n+                            },\n+                            {\n+                                \"description\": \"Any error messages returned from executing the command\",\n+                                \"name\": \"execution.error\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the MIME type of the output if the 'Output MIME Type' property is set and 'Output Destination Attribute' is not set\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Patterns can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the file is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Ingest FlowFiles\",\n-                                \"required\": false,\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Input FlowFile Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"dependencies\": [\n+                            \"Destination\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Store Content on Heap\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Content Storage Strategy\",\n-                                        \"propertyName\": \"Content Storage Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     }\n                                 ],\n-                                \"description\": \"This Processor is configured to load all incoming FlowFiles into memory. Because of that, it is important to limit the maximum size of any incoming FlowFile that would get loaded into memory, in order to prevent Out Of Memory Errors and excessive Garbage Collection. Any FlowFile whose content size is greater than the configured size will be routed to failure and not sent to the Stateless Engine.\",\n-                                \"displayName\": \"Max Input FlowFile Size\",\n+                                \"defaultValue\": \"flowfile-attribute\",\n+                                \"description\": \"Control if Grok output value is written as a new flowfile attributes, in this case each of the Grok identifier that is matched in the flowfile will be added as an attribute, prefixed with \\\"grok.\\\" or written in the flowfile content. Writing to flowfile content will overwrite any existing flowfile content.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Input FlowFile Size\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"NAR Directory\": {\n-                                \"defaultValue\": \"./lib\",\n-                                \"description\": \"This directory has three roles: 1) it contains the NiFi Stateless NAR and other necessary libraries required for the Stateless engine to be bootstrapped, 2) it can contain extensions that should be loaded by the Stateless engine, 3) it is used by the Stateless engine to download extensions into.\",\n-                                \"displayName\": \"NAR Directory\",\n+                            \"Grok Expression\": {\n+                                \"description\": \"Grok expression. If other Grok expressions are referenced in this expression, they must be provided in the Grok Pattern File if set or exist in the default Grok patterns\",\n+                                \"displayName\": \"Grok Expression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"NAR Directory\",\n+                                \"name\": \"Grok Expression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Registry Bucket\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use NiFi Registry\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n-                                        \"propertyName\": \"Dataflow Specification Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of the Bucket in the NiFi Registry that the flow should retrieved from\",\n-                                \"displayName\": \"Registry Bucket\",\n+                            \"Grok Pattern file\": {\n+                                \"description\": \"Custom Grok pattern definitions. These definitions will be loaded after the default Grok patterns. The Grok Parser will use the default Grok patterns when this property is not configured.\",\n+                                \"displayName\": \"Grok Patterns\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Registry Bucket\",\n-                                \"required\": true,\n+                                \"name\": \"Grok Pattern file\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Registry SSL Context Service\": {\n-                                \"dependencies\": [\n+                            \"Keep Empty Captures\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Use NiFi Registry\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n-                                        \"propertyName\": \"Dataflow Specification Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The SSL Context Service to use for interacting with the NiFi Registry\",\n-                                \"displayName\": \"Registry SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Registry SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Registry URL\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Use NiFi Registry\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n-                                        \"propertyName\": \"Dataflow Specification Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The URL of the NiFi Registry to retrieve the flow from\",\n-                                \"displayName\": \"Registry URL\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, then empty capture values will be included in the returned capture map.\",\n+                                \"displayName\": \"Keep Empty Captures\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Registry URL\",\n+                                \"name\": \"Keep Empty Captures\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Stateless SSL Context Service\": {\n-                                \"description\": \"The SSL Context to use as the Stateless System SSL Context\",\n-                                \"displayName\": \"Stateless SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Stateless SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Status Task Interval\": {\n-                                \"description\": \"The Stateless engine periodically logs the status of the dataflow's processors.  This property allows the interval to be changed, or the status logging to be skipped altogether if the property is not set.\",\n-                                \"displayName\": \"Status Task Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Status Task Interval\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Work Directory\": {\n-                                \"defaultValue\": \"./work\",\n-                                \"description\": \"A directory that can be used to create temporary files, such as expanding NAR files, temporary FlowFile content, caching the dataflow, etc.\",\n-                                \"displayName\": \"Work Directory\",\n+                            \"Maximum Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the Grok expressions. Files larger than the specified maximum will not be fully evaluated.\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Work Directory\",\n+                                \"name\": \"Maximum Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"additional-nar-directories\": {\n-                                \"description\": \"A comma-separated list of paths for directories that contain extensions that should be loaded by the stateless engine. The engine will not download any extensions into these directories or write to them but will read any NAR files that are found within these directories. The engine will not recurse into subdirectories of these directories.\",\n-                                \"displayName\": \"Additional NAR Directories\",\n+                            \"Named captures only\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Only store named captures from grok\",\n+                                \"displayName\": \"Named captures only\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"additional-nar-directories\",\n-                                \"required\": false,\n+                                \"name\": \"Named captures only\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"restricted\": true,\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the dataflow fails to complete in the configured amount of time, any incoming FlowFile will be routed to this relationship\",\n-                                \"name\": \"timeout\"\n-                            },\n-                            {\n-                                \"description\": \"If the dataflow fails to process an incoming FlowFile, that FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"For any incoming FlowFile that is successfully processed, the original incoming FlowFile will be transferred to this Relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles are routed to this relationship when no provided Grok Expression matches the content of the FlowFile\",\n+                                \"name\": \"unmatched\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFiles that are transferred to an Output Port in the configured dataflow will be routed to this Relationship\",\n-                                \"name\": \"output\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the Grok Expression is successfully evaluated and the FlowFile is modified as a result\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"CPU\"\n-                            },\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"DISK\"\n-                            },\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            },\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"NETWORK\"\n-                            }\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"delimit\",\n+                            \"extract\",\n+                            \"grok\",\n+                            \"log\",\n+                            \"parse\",\n+                            \"text\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.stateless.ExecuteStateless\",\n-                        \"typeDescription\": \"Runs the configured dataflow using the Stateless NiFi engine. Please see documentation in order to understand the differences between the traditional NiFi runtime engine and the Stateless NiFi engine. If the Processor is configured with an incoming connection, the incoming FlowFiles will be queued up into the specified Input Port in the dataflow. Data that is transferred out of the flow via an Output Port will be sent to the 'output' relationship, and an attribute will be added to indicate which Port that FlowFile was transferred to. See Additional Details for more information.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ExtractGrok\",\n+                        \"typeDescription\": \"Evaluates one or more Grok Expressions against the content of a FlowFile, adding the results as attributes or replacing the content of the FlowFile with a JSON notation of the matched content\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the Output Port that the FlowFile was transferred to\",\n-                                \"name\": \"output.port.name\"\n-                            },\n-                            {\n-                                \"description\": \"If one or more FlowFiles is routed to one of the Output Ports that is configured as a Failure Port, the input FlowFile (if any) will have this attribute added to it, indicating the name of the Port that caused the dataflow to be considered a failure.\",\n-                                \"name\": \"failure.port.name\"\n+                                \"description\": \"When operating in flowfile-attribute mode, each of the Grok identifier that is matched in the flowfile will be added as an attribute, prefixed with \\\"grok.\\\" For example,if the grok identifier \\\"timestamp\\\" is matched, then the value will be added to an attribute named \\\"grok.timestamp\\\"\",\n+                                \"name\": \"grok.XXX\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-distributed-cache-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait when communicating with the remote server before determining that there is a communications failure if data cannot be sent or received\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Specifies the number of schemas to cache. This value should reflect the expected number of different schemas that may be in the incoming FlowFiles. This ensures more efficient retrieval of the schemas and thus the processor performance.\",\n+                                \"displayName\": \"Schema Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, indicates the SSL Context Service that is used to communicate with the remote server. If not specified, communications will not be encrypted\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"Server Hostname\": {\n-                                \"description\": \"The name of the server that is running the DistributedMapCacheServer service\",\n-                                \"displayName\": \"Server Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Server Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Server Port\": {\n-                                \"defaultValue\": \"4557\",\n-                                \"description\": \"The port on the remote server that is to be used when communicating with the DistributedMapCacheServer service\",\n-                                \"displayName\": \"Server Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Server Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"FlowFiles whose record schemas are successfully extracted will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"If a FlowFile's record schema cannot be extracted from the configured input format, the FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"cluster\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"state\"\n+                            \"avro\",\n+                            \"csv\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"record\",\n+                            \"schema\",\n+                            \"text\",\n+                            \"xml\"\n                         ],\n-                        \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                        \"typeDescription\": \"Provides the ability to communicate with a DistributedMapCacheServer. This can be used in order to share a Map between nodes in a NiFi cluster\",\n-                        \"version\": \"1.27.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ExtractRecordSchema\",\n+                        \"typeDescription\": \"Extracts the record schema from the FlowFile using the supplied Record Reader and writes it to the `avro.schema` attribute.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader.\",\n+                                \"name\": \"record.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute provides the schema extracted from the input FlowFile using the provided RecordReader.\",\n+                                \"name\": \"avro.schema\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"The first capture group, if any found, will be placed into that attribute name.But all capture groups, including the matching string sequence itself will also be provided at that attribute name with an index value provided.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A FlowFile attribute\",\n+                                \"value\": \"A Regular Expression with one or more capturing group\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait when communicating with the remote server before determining that there is a communications failure if data cannot be sent or received\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the file is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, indicates the SSL Context Service that is used to communicate with the remote server. If not specified, communications will not be encrypted\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Enable Canonical Equivalence\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that two characters match only when their full canonical decompositions match.\",\n+                                \"displayName\": \"Enable Canonical Equivalence\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Enable Canonical Equivalence\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Server Hostname\": {\n-                                \"description\": \"The name of the server that is running the DistributedSetCacheServer service\",\n-                                \"displayName\": \"Server Hostname\",\n+                            \"Enable Case-insensitive Matching\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that two characters match even if they are in a different case.  Can also be specified via the embedded flag (?i).\",\n+                                \"displayName\": \"Enable Case-insensitive Matching\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Server Hostname\",\n+                                \"name\": \"Enable Case-insensitive Matching\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Server Port\": {\n-                                \"defaultValue\": \"4557\",\n-                                \"description\": \"The port on the remote server that is to be used when communicating with the DistributedSetCacheServer service\",\n-                                \"displayName\": \"Server Port\",\n+                            \"Enable DOTALL Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that the expression '.' should match any character, including a line terminator.  Can also be specified via the embedded flag (?s).\",\n+                                \"displayName\": \"Enable DOTALL Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Server Port\",\n+                                \"name\": \"Enable DOTALL Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedSetCacheClient\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.server.DistributedSetCacheServer\",\n-                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"cluster\",\n-                            \"distributed\",\n-                            \"set\",\n-                            \"state\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.distributed.cache.client.DistributedSetCacheClientService\",\n-                        \"typeDescription\": \"Provides the ability to communicate with a DistributedSetCacheServer. This can be used in order to share a Set between nodes in a NiFi cluster\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Eviction Strategy\": {\n+                            },\n+                            \"Enable Literal Parsing of the Pattern\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Least Frequently Used\",\n-                                        \"value\": \"Least Frequently Used\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Least Recently Used\",\n-                                        \"value\": \"Least Recently Used\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that Metacharacters and escape characters should be given no special meaning.\",\n+                                \"displayName\": \"Enable Literal Parsing of the Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enable Literal Parsing of the Pattern\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Enable Multiline Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"First In, First Out\",\n-                                        \"value\": \"First In, First Out\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Least Frequently Used\",\n-                                \"description\": \"Determines which strategy should be used to evict values from the cache to make room for new entries\",\n-                                \"displayName\": \"Eviction Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that '^' and '$' should match just after and just before a line terminator or end of sequence, instead of only the beginning or end of the entire input.  Can also be specified via the embeded flag (?m).\",\n+                                \"displayName\": \"Enable Multiline Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Eviction Strategy\",\n+                                \"name\": \"Enable Multiline Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Cache Entries\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum number of cache entries that the cache can hold\",\n-                                \"displayName\": \"Maximum Cache Entries\",\n+                            \"Enable Unicode Predefined Character Classes\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies conformance with the Unicode Technical Standard #18: Unicode Regular Expression Annex C: Compatibility Properties.  Can also be specified via the embedded flag (?U).\",\n+                                \"displayName\": \"Enable Unicode Predefined Character Classes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Cache Entries\",\n+                                \"name\": \"Enable Unicode Predefined Character Classes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Persistence Directory\": {\n-                                \"description\": \"If specified, the cache will be persisted in the given directory; if not specified, the cache will be in-memory only\",\n-                                \"displayName\": \"Persistence Directory\",\n+                            \"Enable Unicode-aware Case Folding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"When used with 'Enable Case-insensitive Matching', matches in a manner consistent with the Unicode Standard.  Can also be specified via the embedded flag (?u).\",\n+                                \"displayName\": \"Enable Unicode-aware Case Folding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Persistence Directory\",\n-                                \"required\": false,\n+                                \"name\": \"Enable Unicode-aware Case Folding\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"4557\",\n-                                \"description\": \"The port to listen on for incoming connections\",\n-                                \"displayName\": \"Port\",\n+                            \"Enable Unix Lines Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that only the '\\n' line terminator is recognized in the behavior of '.', '^', and '$'.  Can also be specified via the embedded flag (?d).\",\n+                                \"displayName\": \"Enable Unix Lines Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"Enable Unix Lines Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Include Capture Group 0\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates that Capture Group 0 should be included as an attribute. Capture Group 0 represents the entirety of the regular expression match, is typically not used, and could have considerable length.\",\n+                                \"displayName\": \"Include Capture Group 0\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Include Capture Group 0\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"maximum-read-size\": {\n+                            \"Maximum Buffer Size\": {\n                                 \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum number of network bytes to read for a single cache item\",\n-                                \"displayName\": \"Maximum Read Size\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer (per FlowFile) in order to apply the regular expressions. FlowFiles larger than the specified maximum will not be fully evaluated.\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maximum-read-size\",\n+                                \"name\": \"Maximum Buffer Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Capture Group Length\": {\n+                                \"defaultValue\": \"1024\",\n+                                \"description\": \"Specifies the maximum number of characters a given capture group value can have. Any characters beyond the max will be truncated.\",\n+                                \"displayName\": \"Maximum Capture Group Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Capture Group Length\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"distinct\",\n-                            \"distributed\",\n-                            \"server\",\n-                            \"set\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.distributed.cache.server.DistributedSetCacheServer\",\n-                        \"typeDescription\": \"Provides a set (collection of unique values) cache that can be accessed over a socket. Interaction with this service is typically accomplished via a DistributedSetCacheClient service.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Eviction Strategy\": {\n+                            },\n+                            \"Permit Whitespace and Comments in Pattern\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Least Frequently Used\",\n-                                        \"value\": \"Least Frequently Used\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Least Recently Used\",\n-                                        \"value\": \"Least Recently Used\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"In this mode, whitespace is ignored, and embedded comments starting with # are ignored until the end of a line.  Can also be specified via the embedded flag (?x).\",\n+                                \"displayName\": \"Permit Whitespace and Comments in Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Permit Whitespace and Comments in Pattern\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"extract-text-enable-named-groups\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"First In, First Out\",\n-                                        \"value\": \"First In, First Out\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Least Frequently Used\",\n-                                \"description\": \"Determines which strategy should be used to evict values from the cache to make room for new entries\",\n-                                \"displayName\": \"Eviction Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, when named groups are present in the regular expression, the name of the group will be used in the attribute name as opposed to the group index.  All capturing groups must be named, if the number of groups (not including capture group 0) does not equal the number of named groups validation will fail.\",\n+                                \"displayName\": \"Enable named group support\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Eviction Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"extract-text-enable-named-groups\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Cache Entries\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum number of cache entries that the cache can hold\",\n-                                \"displayName\": \"Maximum Cache Entries\",\n+                            \"extract-text-enable-repeating-capture-group\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, every string matching the capture groups will be extracted. Otherwise, if the Regular Expression matches more than once, only the first match will be extracted.\",\n+                                \"displayName\": \"Enable repeating capture group\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Cache Entries\",\n+                                \"name\": \"extract-text-enable-repeating-capture-group\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when no provided Regular Expression matches the content of the FlowFile\",\n+                                \"name\": \"unmatched\"\n                             },\n-                            \"Persistence Directory\": {\n-                                \"description\": \"If specified, the cache will be persisted in the given directory; if not specified, the cache will be in-memory only\",\n-                                \"displayName\": \"Persistence Directory\",\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when the Regular Expression is successfully evaluated and the FlowFile is modified as a result\",\n+                                \"name\": \"matched\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Regular Expression\",\n+                            \"Text\",\n+                            \"evaluate\",\n+                            \"extract\",\n+                            \"regex\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ExtractText\",\n+                        \"typeDescription\": \"Evaluates one or more Regular Expressions against the content of a FlowFile.  The results of those Regular Expressions are assigned to FlowFile Attributes.  Regular Expressions are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed.  The attributes are generated differently based on the enabling of named capture groups.  If named capture groups are not enabled:  The first capture group, if any found, will be placed into that attribute name.But all capture groups, including the matching string sequence itself will also be provided at that attribute name with an index value provided, with the exception of a capturing group that is optional and does not match - for example, given the attribute name \\\"regex\\\" and expression \\\"abc(def)?(g)\\\" we would add an attribute \\\"regex.1\\\" with a value of \\\"def\\\" if the \\\"def\\\" matched. If the \\\"def\\\" did not match, no attribute named \\\"regex.1\\\" would be added but an attribute named \\\"regex.2\\\" with a value of \\\"g\\\" will be added regardless.If named capture groups are enabled:  Each named capture group, if found will be placed into the attributes name with the name provided.  If enabled the matching string sequence itself will be placed into the attribute name.  If multiple matches are enabled, and index will be applied after the first set of matches. The exception is a capturing group that is optional and does not match  For example, given the attribute name \\\"regex\\\" and expression \\\"abc(?<NAMED>def)?(?<NAMED-TWO>g)\\\"  we would add an attribute \\\"regex.NAMED\\\" with the value of \\\"def\\\" if the \\\"def\\\" matched.  We would   add an attribute \\\"regex.NAMED-TWO\\\" with the value of \\\"g\\\" if the \\\"g\\\" matched regardless.  The value of the property must be a valid Regular Expressions with one or more capturing groups. If named capture groups are enabled, all capture groups must be named.  If they are not, then the  processor configuration will fail validation.  If the Regular Expression matches more than once, only the first match will be used unless the property enabling repeating capture group is set to true. If any provided Regular Expression matches, the FlowFile(s) will be routed to 'matched'. If no provided Regular Expression matches, the FlowFile will be routed to 'unmatched' and no attributes will be applied to the FlowFile.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Cache Entry Identifier\": {\n+                                \"defaultValue\": \"${hash.value}\",\n+                                \"description\": \"A comma-delimited list of FlowFile attributes, or the results of Attribute Expression Language statements, which will be evaluated against a FlowFile in order to determine the value(s) used to identify duplicates; it is these values that are cached. NOTE: Only a single Cache Entry Identifier is allowed unless Put Cache Value In Attribute is specified. Multiple cache lookups are only supported when the destination is a set of attributes (see the documentation for 'Put Cache Value In Attribute' for more details including naming convention.\",\n+                                \"displayName\": \"Cache Entry Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Persistence Directory\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Cache Entry Identifier\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"4557\",\n-                                \"description\": \"The port to listen on for incoming connections\",\n-                                \"displayName\": \"Port\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the cached value is encoded. This will only be used when routing to an attribute.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"name\": \"Character Set\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"The Controller Service that is used to get the cached values.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"maximum-read-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum number of network bytes to read for a single cache item\",\n-                                \"displayName\": \"Maximum Read Size\",\n+                            \"Max Length To Put In Attribute\": {\n+                                \"defaultValue\": \"256\",\n+                                \"description\": \"If routing the cache value to an attribute of the FlowFile (by setting the \\\"Put Cache Value in attribute\\\" property), the number of characters put to the attribute value will be at most this amount. This is important because attributes are held in memory and large attributes will quickly cause out of memory issues. If the output goes longer than this value, it will be truncated to fit. Consider making this smaller if able.\",\n+                                \"displayName\": \"Max Length To Put In Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maximum-read-size\",\n+                                \"name\": \"Max Length To Put In Attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Put Cache Value In Attribute\": {\n+                                \"description\": \"If set, the cache value received will be put into an attribute of the FlowFile instead of a the content of theFlowFile. The attribute key to put to is determined by evaluating value of this property. If multiple Cache Entry Identifiers are selected, multiple attributes will be written, using the evaluated value of this property, appended by a period (.) and the name of the cache entry identifier.\",\n+                                \"displayName\": \"Put Cache Value In Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Put Cache Value In Attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n                             \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.PutDistributedMapCache\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If the cache was successfully communicated with it will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If unable to communicate with the cache or if the cache entry is evaluated to be blank, the FlowFile will be penalized and routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"If a FlowFile's Cache Entry Identifier was not found in the cache, it will be routed to this relationship\",\n+                                \"name\": \"not-found\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n                             \"cache\",\n-                            \"cluster\",\n                             \"distributed\",\n-                            \"key/value\",\n-                            \"map\",\n-                            \"server\"\n+                            \"fetch\",\n+                            \"map\"\n                         ],\n-                        \"type\": \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                        \"typeDescription\": \"Provides a map (key/value) cache that can be accessed over a socket. Interaction with this service is typically accomplished via a DistributedMapCacheClient service.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-flow-registry-client-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-pgp-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hazelcast-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cdc-mysql-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.FetchDistributedMapCache\",\n+                        \"typeDescription\": \"Computes cache key(s) from FlowFile attributes, for each incoming FlowFile, and fetches the value(s) from the Distributed Map Cache associated with each key. If configured without a destination attribute, the incoming FlowFile's content is replaced with the binary data received by the Distributed Map Cache. If there is no value stored under that key then the flow file will be routed to 'not-found'. Note that the processor will always attempt to read the entire cached value into memory before placing it in it's destination. This could be potentially problematic if the cached value is very large.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the 'Put Cache Value In Attribute' property is set then whatever it is set to will become the attribute key and the value would be whatever the response was from the Distributed Map Cache. If multiple cache entry identifiers are selected, multiple attributes will be written, using the evaluated value of this property, appended by a period (.) and the name of the cache entry identifier. For example, if the Cache Entry Identifier property is set to 'id,name', and the user-defined property is named 'fetched', then two attributes will be written, fetched.id and fetched.name, containing their respective values.\",\n+                                \"name\": \"user-defined\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cdc-mysql-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -83905,652 +82627,469 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"SSL Context Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PREFERRED\",\n-                                            \"VERIFY_IDENTITY\",\n-                                            \"REQUIRED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SSL Mode\",\n-                                        \"propertyName\": \"SSL Mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"SSL Context Service supporting encrypted socket communication\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"SSL Mode\": {\n+                            \"Completion Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Connect without TLS\",\n-                                        \"displayName\": \"DISABLED\",\n-                                        \"value\": \"DISABLED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Connect with TLS when server support enabled, otherwise connect without TLS\",\n-                                        \"displayName\": \"PREFERRED\",\n-                                        \"value\": \"PREFERRED\"\n+                                        \"description\": \"Leave the file as-is\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n                                     },\n                                     {\n-                                        \"description\": \"Connect with TLS or fail when server support not enabled\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Move the file to the directory specified by the <Move Destination Directory> property\",\n+                                        \"displayName\": \"Move File\",\n+                                        \"value\": \"Move File\"\n                                     },\n                                     {\n-                                        \"description\": \"Connect with TLS or fail when server support not enabled. Verify server hostname matches presented X.509 certificate names or fail when not matched\",\n-                                        \"displayName\": \"VERIFY_IDENTITY\",\n-                                        \"value\": \"VERIFY_IDENTITY\"\n+                                        \"description\": \"Deletes the original file from the remote system\",\n+                                        \"displayName\": \"Delete File\",\n+                                        \"value\": \"Delete File\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DISABLED\",\n-                                \"description\": \"SSL Mode used when SSL Context Service configured supporting certificate verification options\",\n-                                \"displayName\": \"SSL Mode\",\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"Specifies what to do with the original file on the server once it has been pulled into NiFi. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n+                                \"displayName\": \"Completion Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Mode\",\n+                                \"name\": \"Completion Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-db-name-pattern\": {\n-                                \"description\": \"A regular expression (regex) for matching databases (or schemas, depending on your RDBMS' terminology) against the list of CDC events. The regex must match the database name as it is stored in the RDBMS. If the property is not set, the database name will not be used to filter the CDC events. NOTE: DDL events, even if they affect different databases, are associated with the database used by the session to execute the DDL. This means if a connection is made to one database, but the DDL is issued against another, then the connected database will be the one matched against the specified pattern.\",\n-                                \"displayName\": \"Database/Schema Name Pattern\",\n+                            \"Connection Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-db-name-pattern\",\n+                                \"name\": \"Connection Mode\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-dist-map-cache-client\": {\n-                                \"description\": \"This is a legacy property that is no longer used to store table information, the processor will handle the table information (column names, types, etc.)\",\n-                                \"displayName\": \"Distributed Map Cache Client - unused\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-dist-map-cache-client\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"capture-change-mysql-driver-class\": {\n-                                \"defaultValue\": \"com.mysql.jdbc.Driver\",\n-                                \"description\": \"The class name of the MySQL database driver class\",\n-                                \"displayName\": \"MySQL Driver Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-driver-class\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"capture-change-mysql-driver-locations\": {\n-                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the MySQL driver JAR and its dependencies (if any). For example '/var/tmp/mysql-connector-java-5.1.38-bin.jar'\",\n-                                \"displayName\": \"MySQL Driver Location(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-driver-locations\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"capture-change-mysql-hosts\": {\n-                                \"description\": \"A list of hostname (and optional port) entries corresponding to nodes in a MySQL cluster. The entries should be comma separated using a colon (if the port is to be specified) such as host1:port,host2:port,....  For example mysql.myhost.com:3306. The port need not be specified, when omitted the default MySQL port value of 3306 will be used. This processor will attempt to connect to the hosts in the list in order. If one node goes down and failover is enabled for the cluster, then the processor will connect to the active node (assuming its node entry is specified in this property).\",\n-                                \"displayName\": \"MySQL Nodes\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-hosts\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-include-begin-commit\": {\n+                            \"Create Directory\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to emit events corresponding to a BEGIN or COMMIT event in the binary log. Set to true if the BEGIN/COMMIT events are necessary in the downstream flow, otherwise set to false, which suppresses generation of these events and can increase flow performance.\",\n-                                \"displayName\": \"Include Begin/Commit Events\",\n+                                \"description\": \"Used when 'Completion Strategy' is 'Move File'. Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-include-begin-commit\",\n-                                \"required\": true,\n+                                \"name\": \"Create Directory\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-include-ddl-events\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to emit events corresponding to Data Definition Language (DDL) events such as ALTER TABLE, TRUNCATE TABLE, e.g. in the binary log. Set to true if the DDL events are desired/necessary in the downstream flow, otherwise set to false, which suppresses generation of these events and can increase flow performance.\",\n-                                \"displayName\": \"Include DDL Events\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-include-ddl-events\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-init-binlog-filename\": {\n-                                \"description\": \"Specifies an initial binlog filename to use if this processor's State does not have a current binlog filename. If a filename is present in the processor's State or \\\"Use GTID\\\" property is set to false, this property is ignored. This can be used along with Initial Binlog Position to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the Variable Registry and/or environment properties.\",\n-                                \"displayName\": \"Initial Binlog Filename\",\n+                            \"Hostname\": {\n+                                \"description\": \"The fully-qualified hostname or IP address of the host to fetch the data from\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-init-binlog-filename\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-init-binlog-position\": {\n-                                \"description\": \"Specifies an initial offset into a binlog (specified by Initial Binlog Filename) to use if this processor's State does not have a current binlog filename. If a filename is present in the processor's State or \\\"Use GTID\\\" property is false, this property is ignored. This can be used along with Initial Binlog Filename to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the Variable Registry and/or environment properties.\",\n-                                \"displayName\": \"Initial Binlog Position\",\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-init-binlog-position\",\n+                                \"name\": \"Http Proxy Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"capture-change-mysql-init-gtid\": {\n-                                \"description\": \"Specifies an initial GTID to use if this processor's State does not have a current GTID. If a GTID is present in the processor's State or \\\"Use GTID\\\" property is set to false, this property is ignored. This can be used to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the Variable Registry and/or environment properties.\",\n-                                \"displayName\": \"Initial Binlog GTID\",\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-init-gtid\",\n+                                \"name\": \"Http Proxy Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-init-seq-id\": {\n-                                \"description\": \"Specifies an initial sequence identifier to use if this processor's State does not have a current sequence identifier. If a sequence identifier is present in the processor's State, this property is ignored. Sequence identifiers are monotonically increasing integers that record the order of flow files generated by the processor. They can be used with the EnforceOrder processor to guarantee ordered delivery of CDC events.\",\n-                                \"displayName\": \"Initial Sequence ID\",\n+                            \"Internal Buffer Size\": {\n+                                \"defaultValue\": \"16KB\",\n+                                \"description\": \"Set the internal buffer size for buffered data streams\",\n+                                \"displayName\": \"Internal Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-init-seq-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Internal Buffer Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-max-wait-time\": {\n-                                \"defaultValue\": \"30 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a connection to be established, zero means there is effectively no limit.\",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-max-wait-time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"capture-change-mysql-name-pattern\": {\n-                                \"description\": \"A regular expression (regex) for matching CDC events affecting matching tables. The regex must match the table name as it is stored in the database. If the property is not set, no events will be filtered based on table name.\",\n-                                \"displayName\": \"Table Name Pattern\",\n+                            \"Move Destination Directory\": {\n+                                \"description\": \"The directory on the remote server to move the original file to once it has been ingested into NiFi. This property is ignored unless the Completion Strategy is set to 'Move File'. The specified directory must already exist on the remote system if 'Create Directory' is disabled, or the rename will fail.\",\n+                                \"displayName\": \"Move Destination Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-name-pattern\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Move Destination Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-password\": {\n-                                \"description\": \"Password to access the MySQL cluster\",\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n                                 \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"capture-change-mysql-retrieve-all-records\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether to get all available CDC events, regardless of the current binlog filename and/or position. If binlog filename and position values are present in the processor's State, this property's value is ignored. This allows for 4 different configurations: 1) If binlog data is available in processor State, that is used to determine the start location and the value of Retrieve All Records is ignored. 2) If no binlog data is in processor State, then Retrieve All Records set to true means start at the beginning of the binlog history. 3) If no binlog data is in processor State and Initial Binlog Filename/Position are not set, then Retrieve All Records set to false means start at the end of the binlog history. 4) If no binlog data is in processor State and Initial Binlog Filename/Position are set, then Retrieve All Records set to false means start at the specified initial binlog file/position. To reset the behavior, clear the processor state (refer to the State Management section of the processor's documentation).\",\n-                                \"displayName\": \"Retrieve All Records\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"21\",\n+                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-retrieve-all-records\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-server-id\": {\n-                                \"description\": \"The client connecting to the MySQL replication group is actually a simplified replica (server), and the Server ID value must be unique across the whole replication group (i.e. different from any other Server ID being used by any primary or replica). Thus, each instance of CaptureChangeMySQL must have a Server ID unique across the replication group. If the Server ID is not specified, it defaults to 65535.\",\n-                                \"displayName\": \"Server ID\",\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-server-id\",\n+                                \"name\": \"Proxy Host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-state-update-interval\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"DEPRECATED. This property is no longer used and exists solely for backward compatibility purposes. Indicates how often to update the processor's state with binlog file/position values. A value of zero means that state will only be updated when the processor is stopped or shutdown. If at some point the processor state does not contain the desired binlog values, the last flow file emitted will contain the last observed values, and the processor can be returned to that state by using the Initial Binlog File, Initial Binlog Position, and Initial Sequence ID properties.\",\n-                                \"displayName\": \"State Update Interval\",\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-state-update-interval\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-use-gtid\": {\n+                            \"Proxy Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to use Global Transaction ID (GTID) for binlog tracking. If set to true, processor's state of binlog file name and position is ignored. The main benefit of using GTID is to have much reliable failover than using binlog filename/position.\",\n-                                \"displayName\": \"Use Binlog GTID\",\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-use-gtid\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-username\": {\n-                                \"description\": \"Username to access the MySQL cluster\",\n-                                \"displayName\": \"Username\",\n+                            \"Remote File\": {\n+                                \"description\": \"The fully qualified filename on the remote system\",\n+                                \"displayName\": \"Remote File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote File\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"events-per-flowfile-strategy\": {\n+                            \"Transfer Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy causes at most the number of events specified in the 'Number of Events Per FlowFile' property to be written per FlowFile. If the processor is stopped before the specified number of events has been written (or the event queue becomes empty), the fewer number of events will still be written as a FlowFile before stopping.\",\n-                                        \"displayName\": \"Max Events Per FlowFile\",\n-                                        \"value\": \"MAX_EVENTS_PER_FLOWFILE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy causes each event from a transaction (from BEGIN to COMMIT) to be written to a FlowFile\",\n-                                        \"displayName\": \"One Transaction Per FlowFile\",\n-                                        \"value\": \"ONE_TRANSACTION_PER_FLOWFILE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"MAX_EVENTS_PER_FLOWFILE\",\n-                                \"description\": \"Specifies the strategy to use when writing events to FlowFile(s), such as 'Max Events Per FlowFile'\",\n-                                \"displayName\": \"Event Processing Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"events-per-flowfile-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"number-of-events-per-flowfile\": {\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"MAX_EVENTS_PER_FLOWFILE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Event Processing Strategy\",\n-                                        \"propertyName\": \"events-per-flowfile-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies how many events should be written to a single FlowFile. If the processor is stopped before the specified number of events has been written,the events will still be written as a FlowFile before stopping.\",\n-                                \"displayName\": \"Events Per FlowFile\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"number-of-events-per-flowfile\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Information such as a 'pointer' to the current CDC event in the database is stored by this processor, such that it can continue from the same location if restarted.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cdc\",\n-                            \"event\",\n-                            \"jdbc\",\n-                            \"mysql\",\n-                            \"sql\",\n-                            \"transaction\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.cdc.mysql.processors.CaptureChangeMySQL\",\n-                        \"typeDescription\": \"Retrieves Change Data Capture (CDC) events from a MySQL database. CDC Events include INSERT, UPDATE, DELETE operations. Events are output as either a group of a specified number of events (the default is 1 so each event becomes its own flow file) or grouped as a full transaction (BEGIN to COMMIT). All events are ordered by the time at which the operation occurred. NOTE: If the processor is stopped before the specified number of events have been written to a flow file, the partial flow file will be output in order to maintain the consistency of the event stream.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"A sequence identifier (i.e. strictly increasing integer value) specifying the order of the CDC event flow file relative to the other event flow file(s).\",\n-                                \"name\": \"cdc.sequence.id\"\n-                            },\n-                            {\n-                                \"description\": \"A string indicating the type of CDC event that occurred, including (but not limited to) 'begin', 'insert', 'update', 'delete', 'ddl' and 'commit'.\",\n-                                \"name\": \"cdc.event.type\"\n-                            },\n-                            {\n-                                \"description\": \"The processor outputs flow file content in JSON format, and sets the mime.type attribute to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-smb-smbj-client-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-smbj-client-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"domain\": {\n-                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n-                                \"displayName\": \"Domain\",\n+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"domain\",\n+                                \"name\": \"Transfer Mode\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"enable-dfs\": {\n+                            \"Use Compression\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n-                                \"displayName\": \"Enable DFS\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-dfs\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hostname\": {\n-                                \"description\": \"The network host of the SMB file server.\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"password\": {\n-                                \"description\": \"The password used for authentication.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"port\": {\n-                                \"defaultValue\": \"445\",\n-                                \"description\": \"Port to use for connection.\",\n-                                \"displayName\": \"Port\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"port\",\n+                                \"name\": \"Use Compression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"share\": {\n-                                \"description\": \"The network share to which files should be listed from. This is the \\\"first folder\\\"after the hostname: smb://hostname:port/[share]/dir1/dir2\",\n-                                \"displayName\": \"Share\",\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"share\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smb-dialect\": {\n+                            \"fetchfiletransfer-notfound-loglevel\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AUTO\",\n-                                        \"value\": \"AUTO\"\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.0.2\",\n-                                        \"value\": \"SMB_2_0_2\"\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.1\",\n-                                        \"value\": \"SMB_2_1\"\n+                                        \"displayName\": \"INFO\",\n+                                        \"value\": \"INFO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0\",\n-                                        \"value\": \"SMB_3_0\"\n+                                        \"displayName\": \"WARN\",\n+                                        \"value\": \"WARN\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0.2\",\n-                                        \"value\": \"SMB_3_0_2\"\n+                                        \"displayName\": \"ERROR\",\n+                                        \"value\": \"ERROR\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.1.1\",\n-                                        \"value\": \"SMB_3_1_1\"\n+                                        \"displayName\": \"FATAL\",\n+                                        \"value\": \"FATAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AUTO\",\n-                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n-                                \"displayName\": \"SMB Dialect\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-dialect\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"timeout\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"Timeout for read and write operations.\",\n-                                \"displayName\": \"Timeout\",\n+                                \"defaultValue\": \"ERROR\",\n+                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n+                                \"displayName\": \"Log level when file not found\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"timeout\",\n+                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-encryption\": {\n+                            \"ftp-use-utf8\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n-                                \"displayName\": \"Use Encryption\",\n+                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n+                                \"displayName\": \"Use UTF-8 Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-encryption\",\n+                                \"name\": \"ftp-use-utf8\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"username\": {\n-                                \"defaultValue\": \"Guest\",\n-                                \"description\": \"The username used for authentication.\",\n-                                \"displayName\": \"Username\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"username\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.GetFTP\",\n+                            \"org.apache.nifi.processors.standard.GetSFTP\",\n+                            \"org.apache.nifi.processors.standard.PutFTP\",\n+                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-smb-client-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to a communications failure will be transferred to this Relationship.\",\n+                                \"name\": \"comms.failure\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile for which we receive a 'Not Found' message from the remote server will be transferred to this Relationship.\",\n+                                \"name\": \"not.found\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to insufficient permissions will be transferred to this Relationship.\",\n+                                \"name\": \"permission.denied\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"samba, smb, cifs, files\"\n+                            \"fetch\",\n+                            \"files\",\n+                            \"ftp\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"source\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.smb.SmbjClientProviderService\",\n-                        \"typeDescription\": \"Provides access to SMB Sessions with shared authentication credentials.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-smb-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.FetchFTP\",\n+                        \"typeDescription\": \"Fetches the content of a file from a remote FTP server and overwrites the contents of an incoming FlowFile with the content of the remote file.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The hostname or IP address from which the file was pulled\",\n+                                \"name\": \"ftp.remote.host\"\n+                            },\n+                            {\n+                                \"description\": \"The port that was used to communicate with the remote FTP server\",\n+                                \"name\": \"ftp.remote.port\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the remote file that was pulled\",\n+                                \"name\": \"ftp.remote.filename\"\n+                            },\n+                            {\n+                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"If the Remote File contains a directory name, that directory name will be added to the FlowFile using the 'path' attribute\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the failure relationship applied when routing to any failure relationship\",\n+                                \"name\": \"fetch.failure.reason\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -84558,177 +83097,262 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            },\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"write filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n                             \"Completion Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Leaves the file as-is.\",\n+                                        \"description\": \"Leave the file as-is\",\n                                         \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n+                                        \"value\": \"None\"\n                                     },\n                                     {\n-                                        \"description\": \"Moves the file to the specified directory on the remote system. This option cannot be used when DFS is enabled on 'SMB Client Provider Service'.\",\n+                                        \"description\": \"Moves the file to the directory specified by the <Move Destination Directory> property\",\n                                         \"displayName\": \"Move File\",\n-                                        \"value\": \"MOVE\"\n+                                        \"value\": \"Move File\"\n                                     },\n                                     {\n-                                        \"description\": \"Deletes the file from the remote system.\",\n+                                        \"description\": \"Deletes the original file from the file system\",\n                                         \"displayName\": \"Delete File\",\n-                                        \"value\": \"DELETE\"\n+                                        \"value\": \"Delete File\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies what to do with the original file on the server once it has been processed. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"Specifies what to do with the original file on the file system once it has been pulled into NiFi\",\n                                 \"displayName\": \"Completion Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Completion Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Destination Directory\": {\n+                            \"File to Fetch\": {\n+                                \"defaultValue\": \"${absolute.path}/${filename}\",\n+                                \"description\": \"The fully-qualified filename of the file to fetch from the file system\",\n+                                \"displayName\": \"File to Fetch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"File to Fetch\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Log level when file not found\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INFO\",\n+                                        \"value\": \"INFO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WARN\",\n+                                        \"value\": \"WARN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ERROR\",\n+                                        \"value\": \"ERROR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FATAL\",\n+                                        \"value\": \"FATAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                \"defaultValue\": \"ERROR\",\n+                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n+                                \"displayName\": \"Log level when file not found\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Log level when file not found\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Log level when permission denied\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"MOVE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Completion Strategy\",\n-                                        \"propertyName\": \"Completion Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INFO\",\n+                                        \"value\": \"INFO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WARN\",\n+                                        \"value\": \"WARN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ERROR\",\n+                                        \"value\": \"ERROR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FATAL\",\n+                                        \"value\": \"FATAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n-                                \"displayName\": \"Create Destination Directory\",\n+                                \"defaultValue\": \"ERROR\",\n+                                \"description\": \"Log level to use in case user aman does not have sufficient permissions to read the file\",\n+                                \"displayName\": \"Log level when permission denied\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Destination Directory\",\n+                                \"name\": \"Log level when permission denied\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Destination Directory\": {\n-                                \"dependencies\": [\n+                            \"Move Conflict Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"MOVE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Completion Strategy\",\n-                                        \"propertyName\": \"Completion Strategy\"\n+                                        \"description\": \"The existing destination file should remain intact. The newly ingested file should be moved to the destination directory but be renamed to a random filename\",\n+                                        \"displayName\": \"Rename\",\n+                                        \"value\": \"Rename\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The newly ingested file should replace the existing file in the Destination Directory\",\n+                                        \"displayName\": \"Replace File\",\n+                                        \"value\": \"Replace File\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The existing file should in the Destination Directory should stay intact and the newly ingested file should be deleted\",\n+                                        \"displayName\": \"Keep Existing\",\n+                                        \"value\": \"Keep Existing\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The existing destination file should remain intact and the incoming FlowFile should be routed to failure\",\n+                                        \"displayName\": \"Fail\",\n+                                        \"value\": \"Fail\"\n                                     }\n                                 ],\n-                                \"description\": \"The directory on the remote server to move the original file to once it has been processed.\",\n-                                \"displayName\": \"Destination Directory\",\n+                                \"defaultValue\": \"Rename\",\n+                                \"description\": \"If Completion Strategy is set to Move File and a file already exists in the destination directory with the same name, this property specifies how that naming conflict should be resolved\",\n+                                \"displayName\": \"Move Conflict Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Destination Directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Move Conflict Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"remote-file\": {\n-                                \"defaultValue\": \"${path}/${filename}\",\n-                                \"description\": \"The full path of the file to be retrieved from the remote server. Expression language is supported.\",\n-                                \"displayName\": \"Remote File\",\n+                            \"Move Destination Directory\": {\n+                                \"description\": \"The directory to the move the original file to once it has been fetched from the file system. This property is ignored unless the Completion Strategy is set to \\\"Move File\\\". If the directory does not exist, it will be created.\",\n+                                \"displayName\": \"Move Destination Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"remote-file\",\n-                                \"required\": true,\n+                                \"name\": \"Move Destination Directory\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"smb-client-provider-service\": {\n-                                \"description\": \"Specifies the SMB client provider to use for creating SMB connections.\",\n-                                \"displayName\": \"SMB Client Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-client-provider-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-smb-client-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n-                            \"org.apache.nifi.processors.smb.ListSmb\",\n-                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n+                            \"org.apache.nifi.processors.standard.GetFile\",\n+                            \"org.apache.nifi.processors.standard.ListFile\",\n+                            \"org.apache.nifi.processors.standard.PutFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each successfully fetched file.\",\n+                                \"description\": \"Any FlowFile that is successfully fetched from the file system will be transferred to this Relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile will be routed here when failed to fetch its content.\",\n+                                \"description\": \"Any FlowFile that could not be fetched from the file system because the file could not be found will be transferred to this Relationship.\",\n+                                \"name\": \"not.found\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the file system due to the user running NiFi not having sufficient permissions will be transferred to this Relationship.\",\n+                                \"name\": \"permission.denied\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the file system for any reason other than insufficient permissions or the file not existing will be transferred to this Relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cifs\",\n                             \"fetch\",\n                             \"files\",\n-                            \"samba\",\n-                            \"smb\"\n+                            \"filesystem\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"ingress\",\n+                            \"input\",\n+                            \"local\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.smb.FetchSmb\",\n-                        \"typeDescription\": \"Fetches files from a SMB Share. Designed to be used in tandem with ListSmb.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The error code returned by SMB when the fetch of a file fails.\",\n-                                \"name\": \"error.code\"\n-                            },\n-                            {\n-                                \"description\": \"The error message returned by SMB when the fetch of a file fails.\",\n-                                \"name\": \"error.message\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.FetchFile\",\n+                        \"typeDescription\": \"Reads the contents of a file from disk and streams it into the contents of an incoming FlowFile. Once this is done, the file is optionally moved elsewhere or deleted to help keep the file system organized.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -84737,689 +83361,928 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of files to pull in each iteration\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Directory\": {\n-                                \"description\": \"The network folder to which files should be written. This is the remaining relative path after the share: \\\\\\\\hostname\\\\share\\\\[dir1\\\\dir2].\",\n-                                \"displayName\": \"Directory\",\n+                            \"Ciphers Allowed\": {\n+                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n+                                \"displayName\": \"Ciphers Allowed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Domain\": {\n-                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n-                                \"displayName\": \"Domain\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Domain\",\n+                                \"name\": \"Ciphers Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"File Filter\": {\n-                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n-                                \"displayName\": \"File Filter\",\n+                            \"Completion Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Leave the file as-is\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Move the file to the directory specified by the <Move Destination Directory> property\",\n+                                        \"displayName\": \"Move File\",\n+                                        \"value\": \"Move File\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Deletes the original file from the remote system\",\n+                                        \"displayName\": \"Delete File\",\n+                                        \"value\": \"Delete File\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"Specifies what to do with the original file on the server once it has been pulled into NiFi. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n+                                \"displayName\": \"Completion Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n-                                \"required\": false,\n+                                \"name\": \"Completion Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The network host to which files should be written.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Hidden Files\": {\n+                            \"Create Directory\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n-                                \"displayName\": \"Ignore Hidden Files\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Used when 'Completion Strategy' is 'Move File'. Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Hidden Files\",\n+                                \"name\": \"Create Directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Source File\": {\n+                            \"Disable Directory Listing\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the file is not deleted after it has been copied to the Content Repository; this causes the file to be picked up continually and is useful for testing purposes.  If not keeping original NiFi will need write permissions on the directory it is pulling from otherwise it will ignore the file.\",\n-                                \"displayName\": \"Keep Source File\",\n+                                \"description\": \"Control how 'Move Destination Directory' is created when 'Completion Strategy' is 'Move File' and 'Create Directory' is enabled. If set to 'true', directory listing is not performed prior to create missing directories. By default, this processor executes a directory listing command to see target directory existence before creating missing directories. However, there are situations that you might need to disable the directory listing such as the following. Directory listing might fail with some permission setups (e.g. chmod 100) on a directory. Also, if any other SFTP client created the directory after this processor performed a listing and before a directory creation request by this processor is finished, then an error is returned because the directory already exists.\",\n+                                \"displayName\": \"Disable Directory Listing\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Source File\",\n+                                \"name\": \"Disable Directory Listing\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Host Key File\": {\n+                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n+                                \"displayName\": \"Host Key File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Host Key File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The fully-qualified hostname or IP address of the host to fetch the data from\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Key Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n+                                \"displayName\": \"Key Algorithms Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Key Algorithms Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Key Exchange Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n+                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Key Exchange Algorithms Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Authentication Codes Allowed\": {\n+                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n+                                \"displayName\": \"Message Authentication Codes Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Move Destination Directory\": {\n+                                \"description\": \"The directory on the remote server to move the original file to once it has been ingested into NiFi. This property is ignored unless the Completion Strategy is set to 'Move File'. The specified directory must already exist on the remote system if 'Create Directory' is disabled, or the rename will fail.\",\n+                                \"displayName\": \"Move Destination Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Move Destination Directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n                             \"Password\": {\n-                                \"description\": \"The password used for authentication. Required if Username is set.\",\n+                                \"description\": \"Password for the user account\",\n                                 \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n                                 \"name\": \"Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Path Filter\": {\n-                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n-                                \"displayName\": \"Path Filter\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"22\",\n+                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Private Key Passphrase\": {\n+                                \"description\": \"Password for the private key\",\n+                                \"displayName\": \"Private Key Passphrase\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Private Key Path\": {\n+                                \"description\": \"The fully qualified path to the Private Key file\",\n+                                \"displayName\": \"Private Key Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Path\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Polling Interval\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Indicates how long to wait before performing a directory listing\",\n-                                \"displayName\": \"Polling Interval\",\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Recurse Subdirectories\": {\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not to pull files from subdirectories\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Recurse Subdirectories\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Share\": {\n-                                \"description\": \"The network share to which files should be written. This is the \\\"first folder\\\"after the hostname: \\\\\\\\hostname\\\\[share]\\\\dir1\\\\dir2\",\n-                                \"displayName\": \"Share\",\n+                            \"Remote File\": {\n+                                \"description\": \"The fully qualified filename on the remote system\",\n+                                \"displayName\": \"Remote File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Share\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote File\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Share Access Strategy\": {\n+                            \"Send Keep Alive On Timeout\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read\",\n-                                        \"value\": \"read\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read, delete\",\n-                                        \"value\": \"read, delete\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"read, write, delete\",\n-                                        \"value\": \"read, write, delete\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"Indicates which shared access are granted on the file during the read. None is the most restrictive, but the safest setting to prevent corruption.\",\n-                                \"displayName\": \"Share Access Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n+                                \"displayName\": \"Send Keep Alive On Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Share Access Strategy\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username used for authentication. If no username is set then anonymous authentication is attempted.\",\n-                                \"displayName\": \"Username\",\n+                            \"Strict Host Key Checking\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n+                                \"displayName\": \"Strict Host Key Checking\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n+                                \"name\": \"Strict Host Key Checking\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"enable-dfs\": {\n+                            \"Use Compression\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n-                                \"displayName\": \"Enable DFS\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-dfs\",\n+                                \"name\": \"Use Compression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smb-dialect\": {\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"fetchfiletransfer-notfound-loglevel\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AUTO\",\n-                                        \"value\": \"AUTO\"\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.0.2\",\n-                                        \"value\": \"SMB_2_0_2\"\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.1\",\n-                                        \"value\": \"SMB_2_1\"\n+                                        \"displayName\": \"INFO\",\n+                                        \"value\": \"INFO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0\",\n-                                        \"value\": \"SMB_3_0\"\n+                                        \"displayName\": \"WARN\",\n+                                        \"value\": \"WARN\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0.2\",\n-                                        \"value\": \"SMB_3_0_2\"\n+                                        \"displayName\": \"ERROR\",\n+                                        \"value\": \"ERROR\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.1.1\",\n-                                        \"value\": \"SMB_3_1_1\"\n+                                        \"displayName\": \"FATAL\",\n+                                        \"value\": \"FATAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AUTO\",\n-                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n-                                \"displayName\": \"SMB Dialect\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-dialect\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"timeout\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"Timeout for read and write operations.\",\n-                                \"displayName\": \"Timeout\",\n+                                \"defaultValue\": \"ERROR\",\n+                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n+                                \"displayName\": \"Log level when file not found\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"timeout\",\n+                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-encryption\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n-                                \"displayName\": \"Use Encryption\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-encryption\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.smb.FetchSmb\",\n-                            \"org.apache.nifi.processors.smb.ListSmb\",\n-                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n+                            \"org.apache.nifi.processors.standard.GetFTP\",\n+                            \"org.apache.nifi.processors.standard.GetSFTP\",\n+                            \"org.apache.nifi.processors.standard.PutFTP\",\n+                            \"org.apache.nifi.processors.standard.PutSFTP\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All files are routed to success\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to a communications failure will be transferred to this Relationship.\",\n+                                \"name\": \"comms.failure\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile for which we receive a 'Not Found' message from the remote server will be transferred to this Relationship.\",\n+                                \"name\": \"not.found\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to insufficient permissions will be transferred to this Relationship.\",\n+                                \"name\": \"permission.denied\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"samba, smb, cifs, files, get\"\n+                            \"fetch\",\n+                            \"files\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"sftp\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.smb.GetSmbFile\",\n-                        \"typeDescription\": \"Reads file from a samba network location to FlowFiles. Use this processor instead of a cifs mounts if share access control is important. Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.FetchSFTP\",\n+                        \"typeDescription\": \"Fetches the content of a file from a remote SFTP server and overwrites the contents of an incoming FlowFile with the content of the remote file.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename is set to the name of the file on the network share\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The hostname or IP address from which the file was pulled\",\n+                                \"name\": \"sftp.remote.host\"\n                             },\n                             {\n-                                \"description\": \"The path is set to the relative path of the file's network share name. For example, if the input is set to \\\\\\\\hostname\\\\share\\\\tmp, files picked up from \\\\tmp will have the path attribute set to tmp\",\n-                                \"name\": \"path\"\n+                                \"description\": \"The port that was used to communicate with the remote SFTP server\",\n+                                \"name\": \"sftp.remote.port\"\n                             },\n                             {\n-                                \"description\": \"The date and time that the file was created. May not work on all file systems\",\n-                                \"name\": \"file.creationTime\"\n+                                \"description\": \"The name of the remote file that was pulled\",\n+                                \"name\": \"sftp.remote.filename\"\n                             },\n                             {\n-                                \"description\": \"The date and time that the file was last modified. May not work on all file systems\",\n-                                \"name\": \"file.lastModifiedTime\"\n+                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n-                                \"name\": \"file.lastAccessTime\"\n+                                \"description\": \"If the Remote File contains a directory name, that directory name will be added to the FlowFile using the 'path' attribute\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The full path from where a file was picked up. This includes the hostname and the share name\",\n-                                \"name\": \"absolute.path\"\n+                                \"description\": \"The name of the failure relationship applied when routing to any failure relationship\",\n+                                \"name\": \"fetch.failure.reason\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"directory\": {\n-                                \"description\": \"The network folder from which to list files. This is the remaining relative path after the share: smb://HOSTNAME:PORT/SHARE/[DIRECTORY]/sub/directories. It is also possible to add subdirectories. The given path on the remote file share must exist. This can be checked using verification. You may mix Windows and Linux-style directory separators.\",\n-                                \"displayName\": \"Input Directory\",\n+                            \"Attribute Matching Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Provides a set of attribute keys to filter for, separated by a comma delimiter ','.\",\n+                                        \"displayName\": \"Enumerate attributes\",\n+                                        \"value\": \"Enumerate attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides a regular expression to match keys of attributes to filter for.\",\n+                                        \"displayName\": \"Use regular expression\",\n+                                        \"value\": \"Use regular expression\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Enumerate attributes\",\n+                                \"description\": \"Specifies the strategy to filter attributes by.\",\n+                                \"displayName\": \"Attribute Matching Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"directory\",\n-                                \"required\": false,\n+                                \"name\": \"Attribute Matching Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"Filter Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"Retains only the attributes matching the filter, all other attributes are removed.\",\n+                                        \"displayName\": \"Retain\",\n+                                        \"value\": \"Retain\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"Removes the attributes matching the filter, all other attributes are retained.\",\n+                                        \"displayName\": \"Remove\",\n+                                        \"value\": \"Remove\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"defaultValue\": \"Retain\",\n+                                \"description\": \"Specifies the strategy to apply on filtered attributes. Either 'Remove' or 'Retain' only the matching attributes.\",\n+                                \"displayName\": \"Filter Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"Filter Mode\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"Filtered Attributes\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Enumerate attributes\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Attribute Matching Strategy\",\n+                                        \"propertyName\": \"Attribute Matching Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"A set of attribute names to filter from FlowFiles. Each attribute name is separated by the comma delimiter ','.\",\n+                                \"displayName\": \"Filtered Attributes\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Filtered Attributes\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"Filtered Attributes Pattern\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use regular expression\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Attribute Matching Strategy\",\n+                                        \"propertyName\": \"Attribute Matching Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"A regular expression to match names of attributes to filter from FlowFiles.\",\n+                                \"displayName\": \"Filtered Attributes Pattern\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Filtered Attributes Pattern\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"file-name-suffix-filter\": {\n-                                \"description\": \"Files ending with the given suffix will be omitted. Can be used to make sure that files that are still uploading are not listed multiple times, by having those files have a suffix and remove the suffix once the upload finishes. This is highly recommended when using 'Tracking Entities' or 'Tracking Timestamps' listing strategies.\",\n-                                \"displayName\": \"File Name Suffix Filter\",\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All successful FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Attribute Expression Language\",\n+                            \"attributes\",\n+                            \"delete\",\n+                            \"filter\",\n+                            \"modification\",\n+                            \"regex\",\n+                            \"regular expression\",\n+                            \"remove\",\n+                            \"retain\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.FilterAttribute\",\n+                        \"typeDescription\": \"Filters the attributes of a FlowFile by retaining specified attributes and removing the rest or by removing specified attributes and retaining the rest.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"flatten-json-character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which file is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-name-suffix-filter\",\n-                                \"required\": false,\n+                                \"name\": \"flatten-json-character-set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"flatten-json-pretty-print-json\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not resulted json should be pretty printed\",\n+                                \"displayName\": \"Pretty Print JSON\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"flatten-json-pretty-print-json\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-file-age\": {\n-                                \"description\": \"Any file older than the given value will be omitted.\",\n-                                \"displayName\": \"Maximum File Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-file-age\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-file-size\": {\n-                                \"description\": \"Any file larger than the given value will be omitted.\",\n-                                \"displayName\": \"Maximum File Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-file-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"min-file-age\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"The minimum age that a file must be in order to be listed; any file younger than this amount of time will be ignored.\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"flatten-json-return-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flatten\",\n+                                        \"value\": \"flatten\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"unflatten\",\n+                                        \"value\": \"unflatten\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flatten\",\n+                                \"description\": \"Specifies the desired return type of json such as flatten/unflatten\",\n+                                \"displayName\": \"Return Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-file-age\",\n+                                \"name\": \"flatten-json-return-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-file-size\": {\n-                                \"description\": \"Any file smaller than the given value will be omitted.\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"flatten-json-separator\": {\n+                                \"defaultValue\": \".\",\n+                                \"description\": \"The separator character used for joining keys. Must be a JSON-legal character.\",\n+                                \"displayName\": \"Separator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-file-size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"flatten-json-separator\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"smb-client-provider-service\": {\n-                                \"description\": \"Specifies the SMB client provider to use for creating SMB connections.\",\n-                                \"displayName\": \"SMB Client Provider Service\",\n+                            \"flatten-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Flattens every objects into a single level json\",\n+                                        \"displayName\": \"normal\",\n+                                        \"value\": \"normal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Flattens every objects and keep arrays format\",\n+                                        \"displayName\": \"keep arrays\",\n+                                        \"value\": \"keep arrays\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Conforms to MongoDB dot notation to update also nested documents\",\n+                                        \"displayName\": \"dot notation\",\n+                                        \"value\": \"dot notation\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Flattens every objects except arrays which contain only primitive types (strings, numbers, booleans and null)\",\n+                                        \"displayName\": \"keep primitive arrays\",\n+                                        \"value\": \"keep primitive arrays\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"keep arrays\",\n+                                \"description\": \"Specifies how json should be flattened/unflattened\",\n+                                \"displayName\": \"Flatten Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-client-provider-service\",\n+                                \"name\": \"flatten-mode\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-smb-client-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"target-system-timestamp-precision\": {\n+                            \"ignore-reserved-characters\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n-                                        \"displayName\": \"Auto Detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n-                                        \"displayName\": \"Milliseconds\",\n-                                        \"value\": \"millis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n-                                        \"displayName\": \"Seconds\",\n-                                        \"value\": \"seconds\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n-                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, reserved characters in keys will be ignored\",\n+                                \"displayName\": \"Ignore Reserved Characters\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"target-system-timestamp-precision\",\n+                                \"name\": \"ignore-reserved-characters\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.smb.FetchSmb\",\n-                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n-                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Successfully flattened/unflattened files go to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Files that cannot be flattened/unflattened go to this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n                         ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the state of the previous listing can be stored in order to list files continuously without duplication.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"flatten\",\n+                            \"json\",\n+                            \"unflatten\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.FlattenJson\",\n+                        \"typeDescription\": \"Provides the user with the ability to take a nested JSON document and flatten it into a simple key/value pair document. The keys are combined at each level with a user-defined separator that defaults to '.'. This Processor also allows to unflatten back the flattened json. It supports four kinds of flatten mode such as normal, keep-arrays, dot notation for MongoDB query and keep-primitive-arrays. Default flatten mode is 'keep-arrays'.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n                         },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.JoinEnrichment\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n+                                \"description\": \"A clone of the incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n+                                \"name\": \"enrichment\"\n+                            },\n+                            {\n+                                \"description\": \"The incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"list\",\n-                            \"samba, smb, cifs, files\"\n+                            \"enrich\",\n+                            \"fork\",\n+                            \"join\",\n+                            \"record\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.smb.ListSmb\",\n-                        \"typeDescription\": \"Lists concrete files shared via SMB protocol. Each listed file may result in one flowfile, the metadata being written as flowfile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single flowfile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ForkEnrichment\",\n+                        \"typeDescription\": \"Used in conjunction with the JoinEnrichment processor, this processor is responsible for adding the attributes that are necessary for the JoinEnrichment processor to perform its function. Each incoming FlowFile will be cloned. The original FlowFile will have appropriate attributes added and then be transferred to the 'original' relationship. The clone will have appropriate attributes added and then be routed to the 'enrichment' relationship. See the documentation for the JoinEnrichment processor (and especially its Additional Details) for more information on how these Processors work together and how to perform enrichment tasks in NiFi by using these Processors.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file that was read from filesystem.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The short name of the file that was read from filesystem.\",\n-                                \"name\": \"shortName\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the relative path of the file's directory on the remote filesystem compared to the Share root directory. For example, for a given remote locationsmb://HOSTNAME:PORT/SHARE/DIRECTORY, and a file is being listed from smb://HOSTNAME:PORT/SHARE/DIRECTORY/sub/folder/file then the path attribute will be set to \\\"DIRECTORY/sub/folder\\\".\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The SMB URL of the share.\",\n-                                \"name\": \"serviceLocation\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file's content changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file was created in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"creationTime\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file was accessed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"lastAccessTime\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file's attributes was changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"changeTime\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file in bytes.\",\n-                                \"name\": \"size\"\n+                                \"description\": \"The Group ID to use in order to correlate the 'original' FlowFile with the 'enrichment' FlowFile.\",\n+                                \"name\": \"enrichment.group.id\"\n                             },\n                             {\n-                                \"description\": \"The number of bytes allocated for the file on the server.\",\n-                                \"name\": \"allocationSize\"\n+                                \"description\": \"The role to use for enrichment. This will either be ORIGINAL or ENRICHMENT.\",\n+                                \"name\": \"enrichment.role\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -85427,1119 +84290,1269 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"A Record Path value, pointing to a field of type ARRAY containing RECORD objects\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Record Path property\",\n+                                \"value\": \"The Record Path value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of files to put in each iteration\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Conflict Resolution Strategy\": {\n+                            \"fork-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"Generated records will be the elements of the array\",\n+                                        \"displayName\": \"Extract\",\n+                                        \"value\": \"extract\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n+                                        \"description\": \"Generated records will preserve the input schema and will contain a one-element array\",\n+                                        \"displayName\": \"Split\",\n+                                        \"value\": \"split\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"replace\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"split\",\n+                                \"description\": \"Specifies the forking mode of the processor\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution Strategy\",\n+                                \"name\": \"fork-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Missing Directories\": {\n+                            \"include-parent-fields\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, then missing destination directories will be created. If false, flowfiles are penalized and sent to failure.\",\n-                                \"displayName\": \"Create Missing Directories\",\n+                                \"description\": \"This parameter is only valid with the 'extract' mode. If set to true, all the fields from the root level to the given array will be added as fields of each element of the array to fork.\",\n+                                \"displayName\": \"Include Parent Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Missing Directories\",\n+                                \"name\": \"include-parent-fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Directory\": {\n-                                \"description\": \"The network folder to which files should be written. This is the remaining relative path after the share: \\\\\\\\hostname\\\\share\\\\[dir1\\\\dir2]. You may use expression language.\",\n-                                \"displayName\": \"Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Domain\": {\n-                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n-                                \"displayName\": \"Domain\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Domain\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The network host to which files should be written.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"In case a FlowFile generates an error during the fork operation, it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password used for authentication. Required if Username is set.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                            {\n+                                \"description\": \"The original FlowFiles will be routed to this relationship\",\n+                                \"name\": \"original\"\n                             },\n-                            \"Share\": {\n-                                \"description\": \"The network share to which files should be written. This is the \\\"first folder\\\"after the hostname: \\\\\\\\hostname\\\\[share]\\\\dir1\\\\dir2\",\n-                                \"displayName\": \"Share\",\n+                            {\n+                                \"description\": \"The FlowFiles containing the forked records will be routed to this relationship\",\n+                                \"name\": \"fork\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"array\",\n+                            \"content\",\n+                            \"event\",\n+                            \"fork\",\n+                            \"record\",\n+                            \"stream\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ForkRecord\",\n+                        \"typeDescription\": \"This processor allows the user to fork a record into multiple records. The user must specify at least one Record Path, as a dynamic property, pointing to a field of type ARRAY containing RECORD objects. The processor accepts two modes: 'split' and 'extract'. In both modes, there is one record generated per element contained in the designated array. In the 'split' mode, each generated record will preserve the same schema as given in the input but the array will contain only one element. In the 'extract' mode, the element of the array must be of record type and will be the generated record. Additionally, in the 'extract' mode, it is possible to specify if each generated record should contain all the fields of the parent records from the root level to the extracted record. This assumes that the fields to add in the record are defined in the schema of the Record Writer controller service. See examples in the additional details documentation of this processor.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The generated FlowFile will have a 'record.count' attribute indicating the number of records that were written to the FlowFile.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type indicated by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"Any Attribute that the configured Record Writer returns will be added to the FlowFile.\",\n+                                \"name\": \"<Attributes from Record Writer>\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Specifies an attribute on generated FlowFiles defined by the Dynamic Property's key and value. If Expression Language is used, evaluation will be performed only once per batch of generated FlowFiles.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"Generated FlowFile attribute name\",\n+                                \"value\": \"Generated FlowFile attribute value\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of FlowFiles to be transferred in each invocation\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Share\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Share Access Strategy\": {\n+                            \"Data Format\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read\",\n-                                        \"value\": \"read\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read, delete\",\n-                                        \"value\": \"read, delete\"\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"read, write, delete\",\n-                                        \"value\": \"read, write, delete\"\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"Indicates which shared access are granted on the file during the write. None is the most restrictive, but the safest setting to prevent corruption.\",\n-                                \"displayName\": \"Share Access Strategy\",\n+                                \"defaultValue\": \"Text\",\n+                                \"description\": \"Specifies whether the data should be Text or Binary\",\n+                                \"displayName\": \"Data Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Share Access Strategy\",\n+                                \"name\": \"Data Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Temporary Suffix\": {\n-                                \"description\": \"A temporary suffix which will be apended to the filename while it's transfering. After the transfer is complete, the suffix will be removed.\",\n-                                \"displayName\": \"Temporary Suffix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Temporary Suffix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"The username used for authentication. If no username is set then anonymous authentication is attempted.\",\n-                                \"displayName\": \"Username\",\n+                            \"File Size\": {\n+                                \"defaultValue\": \"0B\",\n+                                \"description\": \"The size of the file that will be used\",\n+                                \"displayName\": \"File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n+                                \"name\": \"File Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"enable-dfs\": {\n+                            \"Unique FlowFiles\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n-                                \"displayName\": \"Enable DFS\",\n+                                \"description\": \"If true, each FlowFile that is generated will be unique. If false, a random value will be generated and all FlowFiles will get the same content but this offers much higher throughput\",\n+                                \"displayName\": \"Unique FlowFiles\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-dfs\",\n+                                \"name\": \"Unique FlowFiles\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smb-dialect\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AUTO\",\n-                                        \"value\": \"AUTO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.0.2\",\n-                                        \"value\": \"SMB_2_0_2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.1\",\n-                                        \"value\": \"SMB_2_1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0\",\n-                                        \"value\": \"SMB_3_0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0.2\",\n-                                        \"value\": \"SMB_3_0_2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.1.1\",\n-                                        \"value\": \"SMB_3_1_1\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"AUTO\",\n-                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n-                                \"displayName\": \"SMB Dialect\",\n+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set to use when writing the bytes of Custom Text to a flow file.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-dialect\",\n+                                \"name\": \"character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"timeout\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"Timeout for read and write operations.\",\n-                                \"displayName\": \"Timeout\",\n+                            \"generate-ff-custom-text\": {\n+                                \"description\": \"If Data Format is text and if Unique FlowFiles is false, then this custom text will be used as content of the generated FlowFiles and the File Size will be ignored. Finally, if Expression Language is used, evaluation will be performed only once per batch of generated FlowFiles\",\n+                                \"displayName\": \"Custom Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"generate-ff-custom-text\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"use-encryption\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n-                                \"displayName\": \"Use Encryption\",\n+                            \"mime-type\": {\n+                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute.\",\n+                                \"displayName\": \"Mime Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-encryption\",\n-                                \"required\": true,\n+                                \"name\": \"mime-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The filename to use when writing the FlowFile to the network folder.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.smb.FetchSmb\",\n-                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n-                            \"org.apache.nifi.processors.smb.ListSmb\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to the output network path are transferred to this relationship\",\n+                                \"description\": \"\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that could not be written to the output network path for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"samba, smb, cifs, files, put\"\n+                            \"generate\",\n+                            \"load\",\n+                            \"random\",\n+                            \"test\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.smb.PutSmbFile\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to a samba network location. Use this processor instead of a cifs mounts if share access control is important.Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-dropbox-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-azure-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-record-sink-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        \"type\": \"org.apache.nifi.processors.standard.GenerateFlowFile\",\n+                        \"typeDescription\": \"This processor creates FlowFiles with random data or custom content. GenerateFlowFile is useful for load testing, configuration, and simulation. Also see DuplicateFlowFile for additional load testing.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the MIME type of the output if the 'Mime Type' property is set\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Custom properties define the generated record schema using configured field names and value data types in absence of the Schema Text property\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Field name in generated record\",\n+                                \"value\": \"Faker category for generated record values\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"bcc\": {\n-                                \"description\": \"The recipients to include in the BCC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"BCC\",\n+                            \"null-percentage\": {\n+                                \"defaultValue\": \"0\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Nullable Fields\",\n+                                        \"propertyName\": \"nullable-fields\"\n+                                    }\n+                                ],\n+                                \"description\": \"The percent probability (0-100%) that a generated value for any nullable field will be null. Set this property to zero to have no null values, or 100 to have all null values.\",\n+                                \"displayName\": \"Null Value Percentage\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bcc\",\n-                                \"required\": false,\n+                                \"name\": \"null-percentage\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cc\": {\n-                                \"description\": \"The recipients to include in the CC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"CC\",\n+                            \"nullable-fields\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether the generated fields will be nullable. Note that this property is ignored if Schema Text is set. Also it only affects the schema of the generated data, not whether any values will be null. If this property is true, see 'Null Value Percentage' to set the probability that any generated field will be null.\",\n+                                \"displayName\": \"Nullable Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cc\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"nullable-fields\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"from\": {\n-                                \"description\": \"Specifies the Email address to use as the sender. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"From\",\n+                            \"number-of-records\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies how many records will be generated for each outgoing FlowFile.\",\n+                                \"displayName\": \"Number of Records\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"from\",\n+                                \"name\": \"number-of-records\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"smtp-auth\": {\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Flag indicating whether authentication should be used\",\n-                                \"displayName\": \"SMTP Auth\",\n+                            \"schema-text\": {\n+                                \"description\": \"The text of an Avro-formatted Schema used to generate record data. If this property is set, any user-defined properties are ignored.\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"smtp-auth\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"smtp-hostname\": {\n-                                \"description\": \"The hostname of the SMTP Server that is used to send Email Notifications\",\n-                                \"displayName\": \"SMTP Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smtp-hostname\",\n-                                \"required\": true,\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that are successfully created will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"fake\",\n+                            \"generate\",\n+                            \"random\",\n+                            \"test\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.GenerateRecord\",\n+                        \"typeDescription\": \"This processor creates FlowFiles with records having random value for the specified fields. GenerateRecord is useful for testing, configuration, and simulation. It uses either user-defined properties to define a record schema or a provided schema and generates the specified number of records using random data for the fields in the schema.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n-                            \"smtp-password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SMTP Auth\",\n-                                        \"propertyName\": \"smtp-auth\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password for the SMTP account\",\n-                                \"displayName\": \"SMTP Password\",\n+                            {\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Specifies an initial max value for max value columns. Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified). In the case of incoming connections, the value is only used the first time for each table specified in the FlowFiles.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"initial.maxvalue.<max_value_column>\",\n+                                \"value\": \"Initial maximum value for the specified column\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Columns to Return\": {\n+                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Columns to Return\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"smtp-password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Columns to Return\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"smtp-port\": {\n-                                \"defaultValue\": \"25\",\n-                                \"description\": \"The Port used for SMTP communications\",\n-                                \"displayName\": \"SMTP Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"smtp-port\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-ssl\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Flag indicating whether SSL should be enabled\",\n-                                \"displayName\": \"SMTP SSL\",\n+                            \"Database Connection Pooling Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"smtp-ssl\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Database Connection Pooling Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"smtp-starttls\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Flag indicating whether STARTTLS should be enabled. If the server does not support STARTTLS, the connection continues without the use of TLS\",\n-                                \"displayName\": \"SMTP STARTTLS\",\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"smtp-starttls\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SMTP Auth\",\n-                                        \"propertyName\": \"smtp-auth\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username for the SMTP account\",\n-                                \"displayName\": \"SMTP Username\",\n+                            \"Maximum-value Columns\": {\n+                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Maximum-value Columns\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"smtp-username\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Maximum-value Columns\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-xmailer-header\": {\n-                                \"defaultValue\": \"NiFi\",\n-                                \"description\": \"X-Mailer used in the header of the outgoing email\",\n-                                \"displayName\": \"SMTP X-Mailer Header\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"smtp-xmailer-header\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"subject\": {\n-                                \"defaultValue\": \"Message from NiFi\",\n-                                \"description\": \"The email subject\",\n-                                \"displayName\": \"Subject\",\n+                            \"Table Name\": {\n+                                \"description\": \"The name of the database table to be queried.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"subject\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"to\": {\n-                                \"description\": \"The recipients to include in the To-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"To\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"to\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"email\",\n-                            \"record\",\n-                            \"send\",\n-                            \"sink\",\n-                            \"smtp\",\n-                            \"write\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.sink.EmailRecordSink\",\n-                        \"typeDescription\": \"Provides a RecordSinkService that can be used to send records in email using the specified writer for formatting.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"logsink-log-level\": {\n+                            \"db-fetch-db-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"INFO\",\n-                                \"description\": \"The Log Level at which to log records (INFO, DEBUG, e.g.)\",\n-                                \"displayName\": \"Log Level\",\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n+                                \"displayName\": \"Database Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"logsink-log-level\",\n+                                \"name\": \"db-fetch-db-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"db-fetch-where-clause\": {\n+                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n+                                \"displayName\": \"Additional WHERE clause\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"log\",\n-                            \"record\",\n-                            \"sink\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.sink.LoggingRecordSink\",\n-                        \"typeDescription\": \"Provides a RecordSinkService that can be used to log records to the application log (nifi-app.log, e.g.) using the specified writer for formatting.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"hostname\": {\n-                                \"description\": \"Destination hostname or IP address\",\n-                                \"displayName\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"db-fetch-where-clause\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gen-table-column-for-val-partitioning\": {\n+                                \"description\": \"The name of a column whose values will be used for partitioning. The default behavior is to use row numbers on the result set for partitioning into 'pages' to be fetched from the database, using an offset/limit strategy. However for certain databases, it can be more efficient under the right circumstances to use the column values themselves to define the 'pages'. This property should only be used when the default queries are not performing well, when there is no maximum-value column or a single maximum-value column whose type can be coerced to a long integer (i.e. not date or timestamp), and the column values are evenly distributed and not sparse, for best performance.\",\n+                                \"displayName\": \"Column for Value Partitioning\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hostname\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gen-table-column-for-val-partitioning\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"port\": {\n-                                \"description\": \"Destination port number\",\n-                                \"displayName\": \"Port\",\n+                            \"gen-table-custom-orderby-column\": {\n+                                \"description\": \"The name of a column to be used for ordering the results if Max-Value Columns are not provided and partitioning is enabled. This property is ignored if either Max-Value Columns is set or Partition Size = 0. NOTE: If neither Max-Value Columns nor Custom ORDER BY Column is set, then depending on the the database/driver, the processor may report an error and/or the generated SQL may result in missing and/or duplicate rows. This is because without an explicit ordering, fetching each partition is done using an arbitrary ordering.\",\n+                                \"displayName\": \"Custom ORDER BY Column\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"port\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gen-table-custom-orderby-column\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"gen-table-fetch-partition-size\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The number of result rows to be fetched by each generated SQL statement. The total number of rows in the table divided by the partition size gives the number of SQL statements (i.e. FlowFiles) generated. A value of zero indicates that a single FlowFile is to be generated whose SQL statement will fetch all rows in the table.\",\n+                                \"displayName\": \"Partition Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gen-table-fetch-partition-size\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"sender-threads\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"Number of worker threads allocated for handling socket communication\",\n-                                \"displayName\": \"Sender Threads\",\n+                            \"gen-table-output-flowfile-on-zero-results\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Depending on the specified properties, an execution of this processor may not result in any SQL statements generated. When this property is true, an empty FlowFile will be generated (having the parent of the incoming FlowFile if present) and transferred to the 'success' relationship. When this property is false, no output FlowFiles will be generated.\",\n+                                \"displayName\": \"Output Empty FlowFile on Zero Results\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sender-threads\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gen-table-output-flowfile-on-zero-results\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"UDP\",\n-                            \"event\",\n-                            \"record\",\n-                            \"sink\"\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n+                            \"org.apache.nifi.processors.standard.ListDatabaseTables\",\n+                            \"org.apache.nifi.processors.standard.QueryDatabaseTable\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.sink.event.UDPEventRecordSink\",\n-                        \"typeDescription\": \"Format and send Records as UDP Datagram Packets to a configurable destination\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n                         },\n-                        \"dynamicProperties\": [\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If 'record.sink.name' attribute contains the name of the dynamic property, then the RecordSinkService (registered in the value) will be selected.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register the specified RecordSinkService\",\n-                                \"value\": \"The RecordSinkService\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"name\": \"success\"\n+                            },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"This relationship is only used when SQL query execution (using an incoming FlowFile) failed. The incoming FlowFile will be penalized and routed to this relationship. If no incoming connection(s) are specified, this relationship is unused.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"lookup\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"database\",\n+                            \"fetch\",\n+                            \"generate\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"select\",\n+                            \"sql\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.sink.lookup.RecordSinkServiceLookup\",\n-                        \"typeDescription\": \"Provides a RecordSinkService that can be used to dynamically select another RecordSinkService. This service requires an attribute named 'record.sink.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'record.sink.name' will be used to select the RecordSinkService that has been registered with that name. This will allow multiple RecordSinkServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'record.sink.name' attribute. Note that this controller service is not intended for use in reporting tasks that employ RecordSinkService instances, such as QueryNiFiReportingTask.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-web-client-provider-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.GenerateTableFetch\",\n+                        \"typeDescription\": \"Generates SQL select queries that fetch \\\"pages\\\" of rows from a table. The partition size property, along with the table's row count, determine the size and number of pages and generated FlowFiles. In addition, incremental fetching can be achieved by setting Maximum-Value Columns, which causes the processor to track the columns' maximum values, thus only fetching rows whose columns' values exceed the observed maximums. This processor is intended to be run on the Primary Node only.\\n\\nThis processor can accept incoming connections; the behavior of the processor is different whether incoming connections are provided:\\n  - If no incoming connection(s) are specified, the processor will generate SQL queries on the specified processor schedule. Expression Language is supported for many fields, but no FlowFile attributes are available. However the properties will be evaluated using the Variable Registry.\\n  - If incoming connection(s) are specified and no FlowFile is available to a processor task, no work will be performed.\\n  - If incoming connection(s) are specified and a FlowFile is available to a processor task, the FlowFile's attributes may be used in Expression Language for such fields as Table Name and others. However, the Max-Value Columns and Columns to Return fields must be empty or refer to columns that are available in each specified table.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the processor has incoming connections, and processing an incoming FlowFile causes a SQL Exception, the FlowFile is routed to failure and this attribute is set to the exception message.\",\n+                                \"name\": \"generatetablefetch.sql.error\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the database table to be queried.\",\n+                                \"name\": \"generatetablefetch.tableName\"\n+                            },\n+                            {\n+                                \"description\": \"The comma-separated list of column names used in the query.\",\n+                                \"name\": \"generatetablefetch.columnNames\"\n+                            },\n+                            {\n+                                \"description\": \"Where clause used in the query to get the expected rows.\",\n+                                \"name\": \"generatetablefetch.whereClause\"\n+                            },\n+                            {\n+                                \"description\": \"The comma-separated list of column names used to keep track of data that has been returned since the processor started running.\",\n+                                \"name\": \"generatetablefetch.maxColumnNames\"\n+                            },\n+                            {\n+                                \"description\": \"The number of result rows to be fetched by the SQL statement.\",\n+                                \"name\": \"generatetablefetch.limit\"\n+                            },\n+                            {\n+                                \"description\": \"Offset to be used to retrieve the corresponding partition.\",\n+                                \"name\": \"generatetablefetch.offset\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles generated from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"This is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"This is the position of this FlowFile in the list of outgoing FlowFiles that were all generated from the same execution. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same execution and in what order  FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-web-client-provider-service-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"connect-timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"Maximum amount of time to wait before failing during initial socket connection\",\n-                                \"displayName\": \"Connect Timeout\",\n+                            \"Connection Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"connect-timeout\",\n+                                \"name\": \"Connection Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"read-timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"Maximum amount of time to wait before failing while reading socket responses\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"Delete Original\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines whether or not the file is deleted from the remote system after it has been successfully transferred\",\n+                                \"displayName\": \"Delete Original\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"read-timeout\",\n+                                \"name\": \"Delete Original\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"redirect-handling-strategy\": {\n+                            \"File Filter Regex\": {\n+                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ignore Dotted Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"FOLLOWED\",\n-                                        \"value\": \"FOLLOWED\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"IGNORED\",\n-                                        \"value\": \"IGNORED\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FOLLOWED\",\n-                                \"description\": \"Handling strategy for responding to HTTP 301 or 302 redirects received with a Location header\",\n-                                \"displayName\": \"Redirect Handling Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redirect-handling-strategy\",\n+                                \"name\": \"Ignore Dotted Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"SSL Context Service overrides system default TLS settings for HTTPS communication\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Internal Buffer Size\": {\n+                                \"defaultValue\": \"16KB\",\n+                                \"description\": \"Set the internal buffer size for buffered data streams\",\n+                                \"displayName\": \"Internal Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"Internal Buffer Size\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"write-timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"Maximum amount of time to wait before failing while writing socket requests\",\n-                                \"displayName\": \"Write Timeout\",\n+                            \"Max Selects\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of files to pull in a single connection\",\n+                                \"displayName\": \"Max Selects\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"write-timeout\",\n+                                \"name\": \"Max Selects\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Client\",\n-                            \"HTTP\",\n-                            \"Web\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.web.client.provider.service.StandardWebClientServiceProvider\",\n-                        \"typeDescription\": \"Web Client Service Provider with support for configuring standard HTTP connection properties\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-stateless-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-protobuf-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-protobuf-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Message Type\": {\n-                                \"description\": \"Fully qualified name of the Protocol Buffers message type including its package (eg. mypackage.MyMessage). The .proto files configured in 'Proto Directory' must contain the definition of this message type.\",\n-                                \"displayName\": \"Message Type\",\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Path Filter Regex\": {\n+                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n+                                \"displayName\": \"Path Filter Regex\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Path Filter Regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"60 sec\",\n+                                \"description\": \"Determines how long to wait between fetching the listing for new files\",\n+                                \"displayName\": \"Polling Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Polling Interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"21\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Message Type\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proto Directory\": {\n-                                \"description\": \"Directory containing Protocol Buffers message definition (.proto) file(s).\",\n-                                \"displayName\": \"Proto Directory\",\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proto Directory\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"Proxy Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Path\": {\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Poll Batch Size\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n+                                \"displayName\": \"Remote Poll Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Remote Poll Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Search Recursively\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"The record schema is generated from the provided proto file\",\n-                                        \"displayName\": \"Generate from Proto file\",\n-                                        \"value\": \"generate-from-proto-file\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"generate-from-proto-file\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"Search Recursively\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n+                            \"Transfer Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transfer Mode\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n+                            \"Use Natural Ordering\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files in the order in which they are naturally listed; otherwise, the order in which the files will be pulled is not defined\",\n+                                \"displayName\": \"Use Natural Ordering\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Use Natural Ordering\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                            \"follow-symlink\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n+                                \"displayName\": \"Follow symlink\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"follow-symlink\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n+                            \"ftp-use-utf8\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n+                                \"displayName\": \"Use UTF-8 Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ftp-use-utf8\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.PutFTP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.27.0\"\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"parser\",\n-                            \"protobuf\",\n-                            \"reader\",\n-                            \"record\"\n+                            \"FTP\",\n+                            \"fetch\",\n+                            \"files\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"source\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.protobuf.ProtobufReader\",\n-                        \"typeDescription\": \"Parses a Protocol Buffers message from binary format.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-snmp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.GetFTP\",\n+                        \"typeDescription\": \"Fetches files from an FTP Server and creates FlowFiles from them\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The filename is set to the name of the file on the remote server\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the source file was last modified\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n+                                \"name\": \"file.lastAccessTime\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n+                                \"name\": \"absolute.path\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -86547,422 +85560,272 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            },\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"write filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"snmp-authentication-passphrase\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n-                                \"displayName\": \"SNMP Authentication Passphrase\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of files to pull in each iteration\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-passphrase\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-authentication-protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n-                                        \"displayName\": \"SHA\",\n-                                        \"value\": \"SHA\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA224\",\n-                                        \"value\": \"HMAC128SHA224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA256\",\n-                                        \"value\": \"HMAC192SHA256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA384\",\n-                                        \"value\": \"HMAC256SHA384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA512\",\n-                                        \"value\": \"HMAC384SHA512\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n-                                \"displayName\": \"SNMP Authentication Protocol\",\n+                            \"File Filter\": {\n+                                \"defaultValue\": \"[^\\\\.].*\",\n+                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n+                                \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-protocol\",\n+                                \"name\": \"File Filter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-community\": {\n-                                \"defaultValue\": \"public\",\n-                                \"dependencies\": [\n+                            \"Ignore Hidden Files\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n-                                \"displayName\": \"SNMP Community\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n+                                \"displayName\": \"Ignore Hidden Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-community\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Hostname or network address of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"snmp-hostname\",\n+                                \"name\": \"Ignore Hidden Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-oid\": {\n-                                \"description\": \"Each OID (object identifier) identifies a variable that can be read or set via SNMP. This value is not taken into account for an input flowfile and will be omitted. Can be set to emptystring when the OIDs are provided through flowfile.\",\n-                                \"displayName\": \"OID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-oid\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-port\": {\n-                                \"defaultValue\": \"161\",\n-                                \"description\": \"Port of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Port\",\n+                            \"Input Directory\": {\n+                                \"description\": \"The input directory from which to pull files\",\n+                                \"displayName\": \"Input Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"snmp-port\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Input Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol\": {\n+                            \"Keep Source File\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"DES\",\n-                                        \"value\": \"DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"3DES\",\n-                                        \"value\": \"3DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES128\",\n-                                        \"value\": \"AES128\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES192\",\n-                                        \"value\": \"AES192\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES256\",\n-                                        \"value\": \"AES256\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n-                                \"displayName\": \"SNMP Privacy Protocol\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the file is not deleted after it has been copied to the Content Repository; this causes the file to be picked up continually and is useful for testing purposes.  If not keeping original NiFi will need write permissions on the directory it is pulling from otherwise it will ignore the file.\",\n+                                \"displayName\": \"Keep Source File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol\",\n+                                \"name\": \"Keep Source File\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol-passphrase\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n-                                \"displayName\": \"SNMP Privacy Passphrase\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol-passphrase\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-retries\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Number of Retries\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-retries\",\n+                                \"name\": \"Maximum File Age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Communication without authentication and privacy.\",\n-                                        \"displayName\": \"noAuthNoPriv\",\n-                                        \"value\": \"noAuthNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and without privacy.\",\n-                                        \"displayName\": \"authNoPriv\",\n-                                        \"value\": \"authNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and privacy.\",\n-                                        \"displayName\": \"authPriv\",\n-                                        \"value\": \"authPriv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"noAuthNoPriv\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n-                                \"displayName\": \"SNMP Security Level\",\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-level\",\n-                                \"required\": true,\n+                                \"name\": \"Maximum File Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"User name used for SNMP v3 Authentication.\",\n-                                \"displayName\": \"SNMP Security Name\",\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-name\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"A manager-to-agent request to retrieve the value of a variable. A response with the current value returned.\",\n-                                        \"displayName\": \"GET\",\n-                                        \"value\": \"GET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A manager-to-agent request to retrieve the value of multiple variables. Snmp WALK also traverses all subnodes under the specified OID.\",\n-                                        \"displayName\": \"WALK\",\n-                                        \"value\": \"WALK\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GET\",\n-                                \"description\": \"SNMP strategy to use (SNMP Get or SNMP Walk)\",\n-                                \"displayName\": \"SNMP Strategy\",\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-strategy\",\n+                                \"name\": \"Minimum File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-textual-oid\": {\n-                                \"description\": \"The textual form of the numeric OID to request. This property is user defined, not processed and appended to the outgoing flowfile.\",\n-                                \"displayName\": \"Textual OID\",\n+                            \"Path Filter\": {\n+                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n+                                \"displayName\": \"Path Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-textual-oid\",\n+                                \"name\": \"Path Filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-timeout\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Timeout (ms)\",\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Indicates how long to wait before performing a directory listing\",\n+                                \"displayName\": \"Polling Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-timeout\",\n-                                \"required\": false,\n+                                \"name\": \"Polling Interval\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-version\": {\n+                            \"Recurse Subdirectories\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"SNMP version 1\",\n-                                        \"displayName\": \"v1\",\n-                                        \"value\": \"SNMPv1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SNMP version 2c\",\n-                                        \"displayName\": \"v2c\",\n-                                        \"value\": \"SNMPv2c\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SNMPv1\",\n-                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n-                                \"displayName\": \"SNMP Version\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not to pull files from subdirectories\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-version\",\n+                                \"name\": \"Recurse Subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.FetchFile\",\n+                            \"org.apache.nifi.processors.standard.PutFile\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received from the SNMP agent are routed to this relationship.\",\n+                                \"description\": \"All files are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n+                            \"files\",\n+                            \"filesystem\",\n                             \"get\",\n-                            \"oid\",\n-                            \"snmp\",\n-                            \"walk\"\n+                            \"ingest\",\n+                            \"ingress\",\n+                            \"input\",\n+                            \"local\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.snmp.processors.GetSNMP\",\n-                        \"typeDescription\": \"Retrieves information from SNMP Agent with SNMP Get request and outputs a FlowFile with information in attributes and without any content\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.GetFile\",\n+                        \"typeDescription\": \"Creates FlowFiles from files in a directory.  NiFi will ignore files it doesn't have at least read permissions for.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Response variable binding: OID (e.g. 1.3.6.1.4.1.343) and its value.\",\n-                                \"name\": \"snmp$<OID>\"\n+                                \"description\": \"The filename is set to the name of the file on disk\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Denotes the variable binding in which the error occured.\",\n-                                \"name\": \"snmp$errorIndex\"\n+                                \"description\": \"The path is set to the relative path of the file's directory on disk. For example, if the <Input Directory> property is set to /tmp, files picked up from /tmp will have the path attribute set to ./. If the <Recurse Subdirectories> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to abc/1/2/3\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The snmp4j error status of the PDU.\",\n-                                \"name\": \"snmp$errorStatus\"\n+                                \"description\": \"The date and time that the file was created. May not work on all file systems\",\n+                                \"name\": \"file.creationTime\"\n                             },\n                             {\n-                                \"description\": \"The description of error status.\",\n-                                \"name\": \"snmp$errorStatusText\"\n+                                \"description\": \"The date and time that the file was last modified. May not work on all file systems\",\n+                                \"name\": \"file.lastModifiedTime\"\n                             },\n                             {\n-                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n-                                \"name\": \"snmp$nonRepeaters\"\n+                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n+                                \"name\": \"file.lastAccessTime\"\n                             },\n                             {\n-                                \"description\": \"The request ID associated with the PDU.\",\n-                                \"name\": \"snmp$requestID\"\n+                                \"description\": \"The owner of the file. May not work on all file systems\",\n+                                \"name\": \"file.owner\"\n                             },\n                             {\n-                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n-                                \"name\": \"snmp$type\"\n+                                \"description\": \"The group owner of the file. May not work on all file systems\",\n+                                \"name\": \"file.group\"\n                             },\n                             {\n-                                \"description\": \"The name of the PDU type.\",\n-                                \"name\": \"snmp$typeString\"\n+                                \"description\": \"The read/write/execute permissions of the file. May not work on all file systems\",\n+                                \"name\": \"file.permissions\"\n                             },\n                             {\n-                                \"description\": \"This attribute will exist if and only if the strategy is GET and will be equal to the value given in Textual Oid property.\",\n-                                \"name\": \"snmp$textualOid\"\n+                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n+                                \"name\": \"absolute.path\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -86970,283 +85833,279 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.standard.InvokeHTTP\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"The additional headers to be sent by the processor whenever making a new HTTP request. \\n Setting a dynamic property name to XYZ and value to ${attribute} will result in the header 'XYZ: attribute_value' being sent to the HTTP endpoint\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"Header Name\",\n+                                \"value\": \"The Expression Language to be used to populate the header value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"snmp-community\": {\n-                                \"defaultValue\": \"public\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n-                                \"displayName\": \"SNMP Community\",\n+                            \"Accept Content-Type\": {\n+                                \"description\": \"If specified, requests will only accept the provided Content-Type\",\n+                                \"displayName\": \"Accept Content-Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-community\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"name\": \"Accept Content-Type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-manager-port\": {\n-                                \"description\": \"The port where the SNMP Manager listens to the incoming traps.\",\n-                                \"displayName\": \"SNMP Manager Port\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"How long to wait when attempting to connect to the remote server before giving up\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-manager-port\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Communication without authentication and privacy.\",\n-                                        \"displayName\": \"noAuthNoPriv\",\n-                                        \"value\": \"noAuthNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and without privacy.\",\n-                                        \"displayName\": \"authNoPriv\",\n-                                        \"value\": \"authNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and privacy.\",\n-                                        \"displayName\": \"authPriv\",\n-                                        \"value\": \"authPriv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"noAuthNoPriv\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n-                                \"displayName\": \"SNMP Security Level\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"How long to wait between receiving segments of data from the remote server before giving up and discarding the partial file\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-level\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-usm-security-names\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"usm-security-names\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"USM Users Source\",\n-                                        \"propertyName\": \"snmp-usm-users-source\"\n-                                    },\n+                            \"Filename\": {\n+                                \"description\": \"The filename to assign to the file when pulled\",\n+                                \"displayName\": \"Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Filename\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Follow Redirects\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"noAuthNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Security names listed separated by commas in SNMPv3. Check Usage for more details.\",\n-                                \"displayName\": \"SNMP Users Security Names\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If we receive a 3xx HTTP Status Code from the server, indicates whether or not we should follow the redirect that the server specifies\",\n+                                \"displayName\": \"Follow Redirects\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-usm-security-names\",\n+                                \"name\": \"Follow Redirects\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-usm-users-file-path\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"usm-json-file-path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"USM Users Source\",\n-                                        \"propertyName\": \"snmp-usm-users-source\"\n-                                    }\n-                                ],\n-                                \"description\": \"The path of the json file containing the user credentials for SNMPv3. Check Usage for more details.\",\n-                                \"displayName\": \"USM Users JSON File Path\",\n+                            \"Password\": {\n+                                \"description\": \"Password required to access the URL\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-usm-users-file-path\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Host\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-usm-users-json-content\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"usm-json-content\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"USM Users Source\",\n-                                        \"propertyName\": \"snmp-usm-users-source\"\n-                                    }\n-                                ],\n-                                \"description\": \"The JSON containing the user credentials for SNMPv3. Check Usage for more details.\",\n-                                \"displayName\": \"USM Users JSON content\",\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-usm-users-json-content\",\n+                                \"name\": \"Proxy Port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-usm-users-source\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The JSON containing the USM users\",\n-                                        \"displayName\": \"Json Content\",\n-                                        \"value\": \"usm-json-content\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The path of the JSON file containing the USM users\",\n-                                        \"displayName\": \"Json File Path\",\n-                                        \"value\": \"usm-json-file-path\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In case of noAuthNoPriv security level - the list of security names separated by commas\",\n-                                        \"displayName\": \"Security Names\",\n-                                        \"value\": \"usm-security-names\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"The ways to provide USM User data\",\n-                                \"displayName\": \"USM Users Source\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-usm-users-source\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"URL\": {\n+                                \"description\": \"The URL to pull from\",\n+                                \"displayName\": \"URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-version\": {\n+                            \"User Agent\": {\n+                                \"description\": \"What to report as the User Agent when we connect to the remote server\",\n+                                \"displayName\": \"User Agent\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"User Agent\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username required to access the URL\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"redirect-cookie-policy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"SNMP version 1\",\n-                                        \"displayName\": \"v1\",\n-                                        \"value\": \"SNMPv1\"\n+                                        \"description\": \"Default cookie policy that provides a higher degree of compatibility with common cookie management of popular HTTP agents for non-standard (Netscape style) cookies.\",\n+                                        \"displayName\": \"default\",\n+                                        \"value\": \"default\"\n                                     },\n                                     {\n-                                        \"description\": \"SNMP version 2c\",\n-                                        \"displayName\": \"v2c\",\n-                                        \"value\": \"SNMPv2c\"\n+                                        \"description\": \"RFC 6265 compliant cookie policy (interoperability profile).\",\n+                                        \"displayName\": \"standard\",\n+                                        \"value\": \"standard\"\n                                     },\n                                     {\n-                                        \"description\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\n+                                        \"description\": \"RFC 6265 compliant cookie policy (strict profile).\",\n+                                        \"displayName\": \"strict\",\n+                                        \"value\": \"strict\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Netscape draft compliant cookie policy.\",\n+                                        \"displayName\": \"netscape\",\n+                                        \"value\": \"netscape\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A cookie policy that ignores cookies.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SNMPv1\",\n-                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n-                                \"displayName\": \"SNMP Version\",\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"When a HTTP server responds to a request with a redirect, this is the cookie policy used to copy cookies to the following request.\",\n+                                \"displayName\": \"Redirect Cookie Policy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-version\",\n-                                \"required\": true,\n+                                \"name\": \"redirect-cookie-policy\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Stores Last Modified Time and ETag headers returned by server so that the same data will not be fetched multiple times.\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received from the SNMP agent are routed to this relationship\",\n+                                \"description\": \"All files are transferred to the success relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"listen\",\n-                            \"snmp\",\n-                            \"trap\"\n+                            \"fetch\",\n+                            \"get\",\n+                            \"http\",\n+                            \"https\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"poll\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.snmp.processors.ListenTrapSNMP\",\n-                        \"typeDescription\": \"Receives information from SNMP Agent and outputs a FlowFile with information in attributes and without any content\",\n+                        \"type\": \"org.apache.nifi.processors.standard.GetHTTP\",\n+                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use InvokeHTTP instead. Fetches data from an HTTP or HTTPS URL and writes the data to the content of a FlowFile. Once the content has been fetched, the ETag and Last Modified dates are remembered (if the web server supports these concepts). This allows the Processor to fetch new data only if the remote data has changed or until the state is cleared. That is, once the content has been fetched from the given URL, it will not be fetched again until the content on the remote server changes. Note that due to limitations on state management, stored \\\"last modified\\\" and etag fields never expire. If the URL in GetHttp uses Expression Language that is unbounded, there is the potential for Out of Memory Errors to occur.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Attributes retrieved from the SNMP response. It may include: snmp$errorIndex, snmp$errorStatus, snmp$errorStatusText, snmp$nonRepeaters, snmp$requestID, snmp$type, snmp$variableBindings\",\n-                                \"name\": \"snmp$*\"\n+                                \"description\": \"The filename is set to the name of the file on the remote server\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type of the FlowFile, as reported by the HTTP Content-Type header\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -87254,484 +86113,225 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.jms.processors.ConsumeJMS\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases. \",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"snmp-authentication-passphrase\": {\n-                                \"dependencies\": [\n+                            \"Acknowledgement Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Client Acknowledge\",\n+                                        \"value\": \"Client Acknowledge\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Auto Acknowledge\",\n+                                        \"value\": \"Auto Acknowledge\"\n                                     }\n                                 ],\n-                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n-                                \"displayName\": \"SNMP Authentication Passphrase\",\n+                                \"defaultValue\": \"Client Acknowledge\",\n+                                \"description\": \"The JMS Acknowledgement Mode. Using Auto Acknowledge can cause messages to be lost on restart of NiFi but may provide better performance than Client Acknowledge.\",\n+                                \"displayName\": \"Acknowledgement Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-passphrase\",\n+                                \"name\": \"Acknowledgement Mode\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-authentication-protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n-                                        \"displayName\": \"SHA\",\n-                                        \"value\": \"SHA\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA224\",\n-                                        \"value\": \"HMAC128SHA224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA256\",\n-                                        \"value\": \"HMAC192SHA256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA384\",\n-                                        \"value\": \"HMAC256SHA384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA512\",\n-                                        \"value\": \"HMAC384SHA512\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n-                                \"displayName\": \"SNMP Authentication Protocol\",\n+                            \"Client ID Prefix\": {\n+                                \"description\": \"A human-readable ID that can be used to associate connections with yourself so that the maintainers of the JMS Server know who to contact if problems arise\",\n+                                \"displayName\": \"Client ID Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-protocol\",\n-                                \"required\": true,\n+                                \"name\": \"Client ID Prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-community\": {\n-                                \"defaultValue\": \"public\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n-                                \"displayName\": \"SNMP Community\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"The amount of time to wait when attempting to receive a message before giving up and assuming failure\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-community\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol\": {\n+                            \"Copy JMS Properties to Attributes\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"DES\",\n-                                        \"value\": \"DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"3DES\",\n-                                        \"value\": \"3DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES128\",\n-                                        \"value\": \"AES128\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES192\",\n-                                        \"value\": \"AES192\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES256\",\n-                                        \"value\": \"AES256\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n-                                \"displayName\": \"SNMP Privacy Protocol\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not the JMS Message Properties should be copied to the FlowFile Attributes; if so, the attribute name will be jms.XXX, where XXX is the JMS Property name\",\n+                                \"displayName\": \"Copy JMS Properties to Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol\",\n+                                \"name\": \"Copy JMS Properties to Attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol-passphrase\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n-                                \"displayName\": \"SNMP Privacy Passphrase\",\n+                            \"Destination Name\": {\n+                                \"description\": \"The name of the JMS Topic or queue to use\",\n+                                \"displayName\": \"Destination Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol-passphrase\",\n+                                \"name\": \"Destination Name\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-retries\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Number of Retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-retries\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-level\": {\n+                            \"JMS Provider\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Communication without authentication and privacy.\",\n-                                        \"displayName\": \"noAuthNoPriv\",\n-                                        \"value\": \"noAuthNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and without privacy.\",\n-                                        \"displayName\": \"authNoPriv\",\n-                                        \"value\": \"authNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and privacy.\",\n-                                        \"displayName\": \"authPriv\",\n-                                        \"value\": \"authPriv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"noAuthNoPriv\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ActiveMQ\",\n+                                        \"value\": \"ActiveMQ\"\n                                     }\n                                 ],\n-                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n-                                \"displayName\": \"SNMP Security Level\",\n+                                \"defaultValue\": \"ActiveMQ\",\n+                                \"description\": \"The Provider used for the JMS Server\",\n+                                \"displayName\": \"JMS Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-level\",\n+                                \"name\": \"JMS Provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"User name used for SNMP v3 Authentication.\",\n-                                \"displayName\": \"SNMP Security Name\",\n+                            \"Message Batch Size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The number of messages to pull/push in a single iteration of the processor\",\n+                                \"displayName\": \"Message Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-name\",\n+                                \"name\": \"Message Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-timeout\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Timeout (ms)\",\n+                            \"Message Selector\": {\n+                                \"description\": \"The JMS Message Selector to use in order to narrow the messages that are pulled\",\n+                                \"displayName\": \"Message Selector\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-timeout\",\n+                                \"name\": \"Message Selector\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-trap-agent-address\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"The address where the SNMP Manager sends the trap.\",\n-                                \"displayName\": \"SNMP Trap Agent Address\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-agent-address\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-trap-enterprise-oid\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enterprise is the vendor identification (OID) for the network management sub-system that generated the trap.\",\n-                                \"displayName\": \"Enterprise OID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-enterprise-oid\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-trap-generic-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"A coldStart trap signifies that the sending protocol entity is reinitializing itself such that the agent's configuration or the protocol entity implementation may be altered\",\n-                                        \"displayName\": \"Cold Start\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A warmStart trap signifies that the sending protocol entity is reinitializing itself such that neither the agent configuration nor the protocol entity implementation is altered.\",\n-                                        \"displayName\": \"Warm Start\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A linkDown trap signifies that the sending protocol entity recognizes a failure in one of the communication links represented in the agent's configuration.\",\n-                                        \"displayName\": \"Link Down\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A linkUp trap signifies that the sending protocol entity recognizes that one of the communication links represented in the agent's configuration has come up.\",\n-                                        \"displayName\": \"Link Up\",\n-                                        \"value\": \"3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"An authenticationFailure trap signifies that the sending protocol entity is the addressee of a protocol message that is not properly authenticated. While implementations of the SNMP must be capable of generating this trap, they must also be capable of suppressing the emission of such traps via an implementation- specific mechanism.\",\n-                                        \"displayName\": \"Authentication Failure\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"An egpNeighborLoss trap signifies that an EGP neighbor for whom the sending protocol entity was an EGP peer has been marked down and the peer relationship no longer obtains\",\n-                                        \"displayName\": \"EGP Neighborloss\",\n-                                        \"value\": \"5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"An enterpriseSpecific trap signifies that a particular enterprise-specific trap has occurred which can be defined in the Specific Trap Type field.\",\n-                                        \"displayName\": \"Enterprise Specific\",\n-                                        \"value\": \"6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provide the Generic Trap Type with the \\\"generic-trap-type\\\" flowfile attribute.\",\n-                                        \"displayName\": \"With \\\"generic-trap-type\\\" FlowFile Attribute\",\n-                                        \"value\": \"generic-trap-type\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"Generic trap type is an integer in the range of 0 to 6. See processor usage for details.\",\n-                                \"displayName\": \"Generic Trap Type\",\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-trap-generic-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-trap-manager-host\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The host of the SNMP Manager where the trap is sent.\",\n-                                \"displayName\": \"SNMP Manager Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-manager-host\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"snmp-trap-manager-port\": {\n-                                \"description\": \"The port of the SNMP Manager where the trap is sent.\",\n-                                \"displayName\": \"SNMP Manager Port\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-manager-port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"snmp-trap-oid-value\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"The value of the trap OID.\",\n-                                \"displayName\": \"Trap OID Value\",\n+                            \"URL\": {\n+                                \"description\": \"The URL of the JMS Server\",\n+                                \"displayName\": \"URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-oid-value\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-trap-specific-type\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"6\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Generic Trap Type\",\n-                                        \"propertyName\": \"snmp-trap-generic-type\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specific trap type is a number that further specifies the nature of the event that generated the trap in the case of traps of generic type 6 (enterpriseSpecific). The interpretation of this code is vendor-specific.\",\n-                                \"displayName\": \"Specific Trap Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-specific-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"SNMP version 1\",\n-                                        \"displayName\": \"v1\",\n-                                        \"value\": \"SNMPv1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SNMP version 2c\",\n-                                        \"displayName\": \"v2c\",\n-                                        \"value\": \"SNMPv2c\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SNMPv1\",\n-                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n-                                \"displayName\": \"SNMP Version\",\n+                            \"Username\": {\n+                                \"description\": \"Username used for authentication and authorization\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-version\",\n-                                \"required\": true,\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.PutJMS\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that have been successfully used to perform SNMP Set are routed to this relationship\",\n+                                \"description\": \"All FlowFiles are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"send\",\n-                            \"snmp\",\n-                            \"trap\"\n+                            \"consume\",\n+                            \"consumer\",\n+                            \"get\",\n+                            \"jms\",\n+                            \"listen\",\n+                            \"pull\",\n+                            \"queue\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.snmp.processors.SendTrapSNMP\",\n-                        \"typeDescription\": \"Sends information to SNMP Manager.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.GetJMSQueue\",\n+                        \"typeDescription\": \"Pulls messages from a ActiveMQ JMS Queue, creating a FlowFile for each JMS Message or bundle of messages, as configured\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -87739,1020 +86339,817 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.jms.processors.ConsumeJMS\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"snmp-authentication-passphrase\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n-                                \"displayName\": \"SNMP Authentication Passphrase\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-passphrase\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-authentication-protocol\": {\n+                            \"Acknowledgement Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n-                                        \"displayName\": \"SHA\",\n-                                        \"value\": \"SHA\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA224\",\n-                                        \"value\": \"HMAC128SHA224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA256\",\n-                                        \"value\": \"HMAC192SHA256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA384\",\n-                                        \"value\": \"HMAC256SHA384\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Client Acknowledge\",\n+                                        \"value\": \"Client Acknowledge\"\n                                     },\n                                     {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA512\",\n-                                        \"value\": \"HMAC384SHA512\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Auto Acknowledge\",\n+                                        \"value\": \"Auto Acknowledge\"\n                                     }\n                                 ],\n-                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n-                                \"displayName\": \"SNMP Authentication Protocol\",\n+                                \"defaultValue\": \"Client Acknowledge\",\n+                                \"description\": \"The JMS Acknowledgement Mode. Using Auto Acknowledge can cause messages to be lost on restart of NiFi but may provide better performance than Client Acknowledge.\",\n+                                \"displayName\": \"Acknowledgement Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-protocol\",\n+                                \"name\": \"Acknowledgement Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-community\": {\n-                                \"defaultValue\": \"public\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n-                                \"displayName\": \"SNMP Community\",\n+                            \"Client ID Prefix\": {\n+                                \"description\": \"A human-readable ID that can be used to associate connections with yourself so that the maintainers of the JMS Server know who to contact if problems arise\",\n+                                \"displayName\": \"Client ID Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-community\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Hostname or network address of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"snmp-hostname\",\n-                                \"required\": true,\n+                                \"name\": \"Client ID Prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-port\": {\n-                                \"defaultValue\": \"161\",\n-                                \"description\": \"Port of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Port\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"The amount of time to wait when attempting to receive a message before giving up and assuming failure\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"snmp-port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol\": {\n+                            \"Copy JMS Properties to Attributes\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"DES\",\n-                                        \"value\": \"DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"3DES\",\n-                                        \"value\": \"3DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES128\",\n-                                        \"value\": \"AES128\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES192\",\n-                                        \"value\": \"AES192\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES256\",\n-                                        \"value\": \"AES256\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n-                                \"displayName\": \"SNMP Privacy Protocol\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not the JMS Message Properties should be copied to the FlowFile Attributes; if so, the attribute name will be jms.XXX, where XXX is the JMS Property name\",\n+                                \"displayName\": \"Copy JMS Properties to Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol\",\n+                                \"name\": \"Copy JMS Properties to Attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol-passphrase\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n-                                \"displayName\": \"SNMP Privacy Passphrase\",\n+                            \"Destination Name\": {\n+                                \"description\": \"The name of the JMS Topic or queue to use\",\n+                                \"displayName\": \"Destination Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol-passphrase\",\n+                                \"name\": \"Destination Name\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-retries\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Number of Retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-retries\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-level\": {\n+                            \"JMS Provider\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Communication without authentication and privacy.\",\n-                                        \"displayName\": \"noAuthNoPriv\",\n-                                        \"value\": \"noAuthNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and without privacy.\",\n-                                        \"displayName\": \"authNoPriv\",\n-                                        \"value\": \"authNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and privacy.\",\n-                                        \"displayName\": \"authPriv\",\n-                                        \"value\": \"authPriv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"noAuthNoPriv\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ActiveMQ\",\n+                                        \"value\": \"ActiveMQ\"\n                                     }\n                                 ],\n-                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n-                                \"displayName\": \"SNMP Security Level\",\n+                                \"defaultValue\": \"ActiveMQ\",\n+                                \"description\": \"The Provider used for the JMS Server\",\n+                                \"displayName\": \"JMS Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-level\",\n+                                \"name\": \"JMS Provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"User name used for SNMP v3 Authentication.\",\n-                                \"displayName\": \"SNMP Security Name\",\n+                            \"Message Batch Size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The number of messages to pull/push in a single iteration of the processor\",\n+                                \"displayName\": \"Message Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-name\",\n+                                \"name\": \"Message Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-timeout\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Timeout (ms)\",\n+                            \"Message Selector\": {\n+                                \"description\": \"The JMS Message Selector to use in order to narrow the messages that are pulled\",\n+                                \"displayName\": \"Message Selector\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-timeout\",\n+                                \"name\": \"Message Selector\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-version\": {\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"URL\": {\n+                                \"description\": \"The URL of the JMS Server\",\n+                                \"displayName\": \"URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Use Durable Subscription\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"SNMP version 1\",\n-                                        \"displayName\": \"v1\",\n-                                        \"value\": \"SNMPv1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SNMP version 2c\",\n-                                        \"displayName\": \"v2c\",\n-                                        \"value\": \"SNMPv2c\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SNMPv1\",\n-                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n-                                \"displayName\": \"SNMP Version\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, connections to the specified topic will use Durable Subscription so that messages are queued when we are not pulling them\",\n+                                \"displayName\": \"Use Durable Subscription\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-version\",\n+                                \"name\": \"Use Durable Subscription\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username used for authentication and authorization\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.PutJMS\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that have been successfully used to perform SNMP Set are routed to this relationship\",\n+                                \"description\": \"All FlowFiles are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that failed during the SNMP Set care routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"oid\",\n-                            \"set\",\n-                            \"snmp\"\n+                            \"consume\",\n+                            \"consumer\",\n+                            \"durable\",\n+                            \"get\",\n+                            \"jms\",\n+                            \"listen\",\n+                            \"non-durable\",\n+                            \"pull\",\n+                            \"source\",\n+                            \"subscription\",\n+                            \"topic\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.snmp.processors.SetSNMP\",\n-                        \"typeDescription\": \"Based on incoming FlowFile attributes, the processor will execute SNMP Set requests. When finding attributes with the name snmp$<OID>, the processor will attempt to set the value of the attribute to the corresponding OID given in the attribute name.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Response variable binding: OID (e.g. 1.3.6.1.4.1.343) and its value.\",\n-                                \"name\": \"snmp$<OID>\"\n-                            },\n-                            {\n-                                \"description\": \"Denotes the variable binding in which the error occured.\",\n-                                \"name\": \"snmp$errorIndex\"\n-                            },\n-                            {\n-                                \"description\": \"The snmp4j error status of the PDU.\",\n-                                \"name\": \"snmp$errorStatus\"\n-                            },\n-                            {\n-                                \"description\": \"The description of error status.\",\n-                                \"name\": \"snmp$errorStatusText\"\n-                            },\n-                            {\n-                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n-                                \"name\": \"snmp$nonRepeaters\"\n-                            },\n-                            {\n-                                \"description\": \"The request ID associated with the PDU.\",\n-                                \"name\": \"snmp$requestID\"\n-                            },\n-                            {\n-                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n-                                \"name\": \"snmp$type\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the PDU type.\",\n-                                \"name\": \"snmp$typeString\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-ssl-context-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.GetJMSTopic\",\n+                        \"typeDescription\": \"Pulls messages from a ActiveMQ JMS Topic, creating a FlowFile for each JMS Message or bundle of messages, as configured.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-ssl-context-service-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Keystore Filename\": {\n-                                \"description\": \"The fully-qualified filename of the Keystore\",\n-                                \"displayName\": \"Keystore Filename\",\n+                            \"Ciphers Allowed\": {\n+                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n+                                \"displayName\": \"Ciphers Allowed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Keystore Filename\",\n+                                \"name\": \"Ciphers Allowed\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Keystore Password\": {\n-                                \"description\": \"The password for the Keystore\",\n-                                \"displayName\": \"Keystore Password\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keystore Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Keystore Type\": {\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Delete Original\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BCFKS\",\n-                                        \"value\": \"BCFKS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PKCS12\",\n-                                        \"value\": \"PKCS12\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"JKS\",\n-                                        \"value\": \"JKS\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The Type of the Keystore\",\n-                                \"displayName\": \"Keystore Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines whether or not the file is deleted from the remote system after it has been successfully transferred\",\n+                                \"displayName\": \"Delete Original\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keystore Type\",\n-                                \"required\": false,\n+                                \"name\": \"Delete Original\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Negotiate latest protocol version based on platform supported versions\",\n-                                        \"displayName\": \"TLS\",\n-                                        \"value\": \"TLS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Require TLSv1.3 protocol version\",\n-                                        \"displayName\": \"TLSv1.3\",\n-                                        \"value\": \"TLSv1.3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Require TLSv1.2 protocol version\",\n-                                        \"displayName\": \"TLSv1.2\",\n-                                        \"value\": \"TLSv1.2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"TLS\",\n-                                \"description\": \"TLS Protocol Version for encrypted connections. Supported versions depend on the specific version of Java used.\",\n-                                \"displayName\": \"TLS Protocol\",\n+                            \"File Filter Regex\": {\n+                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Protocol\",\n+                                \"name\": \"File Filter Regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Truststore Filename\": {\n-                                \"description\": \"The fully-qualified filename of the Truststore\",\n-                                \"displayName\": \"Truststore Filename\",\n+                            \"Host Key File\": {\n+                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n+                                \"displayName\": \"Host Key File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Truststore Filename\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Host Key File\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Truststore Password\": {\n-                                \"description\": \"The password for the Truststore\",\n-                                \"displayName\": \"Truststore Password\",\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Truststore Password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Truststore Type\": {\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ignore Dotted Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BCFKS\",\n-                                        \"value\": \"BCFKS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PKCS12\",\n-                                        \"value\": \"PKCS12\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"JKS\",\n-                                        \"value\": \"JKS\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The Type of the Truststore\",\n-                                \"displayName\": \"Truststore Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Truststore Type\",\n-                                \"required\": false,\n+                                \"name\": \"Ignore Dotted Files\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-password\": {\n-                                \"description\": \"The password for the key. If this is not specified, but the Keystore Filename, Password, and Type are specified, then the Keystore Password will be assumed to be the same as the Key Password.\",\n-                                \"displayName\": \"Key Password\",\n+                            \"Key Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n+                                \"displayName\": \"Key Algorithms Allowed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-password\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Key Algorithms Allowed\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                \"version\": \"1.27.0\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"certificate\",\n-                            \"jks\",\n-                            \"keystore\",\n-                            \"p12\",\n-                            \"pkcs\",\n-                            \"pkcs12\",\n-                            \"secure\",\n-                            \"ssl\",\n-                            \"tls\",\n-                            \"truststore\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.ssl.StandardRestrictedSSLContextService\",\n-                        \"typeDescription\": \"Restricted implementation of the SSLContextService. Provides the ability to configure keystore and/or truststore properties once and reuse that configuration throughout the application, but only allows a restricted set of TLS/SSL protocols to be chosen (no SSL protocols are supported). The set of protocols selectable will evolve over time as new protocols emerge and older protocols are deprecated. This service is recommended over StandardSSLContextService if a component doesn't expect to communicate with legacy systems since it is unlikely that legacy systems will support these protocols.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-ssl-context-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Keystore Filename\": {\n-                                \"description\": \"The fully-qualified filename of the Keystore\",\n-                                \"displayName\": \"Keystore Filename\",\n+                            \"Key Exchange Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n+                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Keystore Filename\",\n+                                \"name\": \"Key Exchange Algorithms Allowed\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Keystore Password\": {\n-                                \"description\": \"The password for the Keystore\",\n-                                \"displayName\": \"Keystore Password\",\n+                            \"Max Selects\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of files to pull in a single connection\",\n+                                \"displayName\": \"Max Selects\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keystore Password\",\n+                                \"name\": \"Max Selects\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Authentication Codes Allowed\": {\n+                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n+                                \"displayName\": \"Message Authentication Codes Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Keystore Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BCFKS\",\n-                                        \"value\": \"BCFKS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PKCS12\",\n-                                        \"value\": \"PKCS12\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JKS\",\n-                                        \"value\": \"JKS\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Type of the Keystore\",\n-                                \"displayName\": \"Keystore Type\",\n+                            \"Path Filter Regex\": {\n+                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n+                                \"displayName\": \"Path Filter Regex\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keystore Type\",\n+                                \"name\": \"Path Filter Regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Negotiate latest SSL or TLS protocol version based on platform supported versions\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Negotiate latest TLS protocol version based on platform supported versions\",\n-                                        \"displayName\": \"TLS\",\n-                                        \"value\": \"TLS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Require TLSv1.3 protocol version\",\n-                                        \"displayName\": \"TLSv1.3\",\n-                                        \"value\": \"TLSv1.3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Require TLSv1.2 protocol version\",\n-                                        \"displayName\": \"TLSv1.2\",\n-                                        \"value\": \"TLSv1.2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Require TLSv1.1 protocol version\",\n-                                        \"displayName\": \"TLSv1.1\",\n-                                        \"value\": \"TLSv1.1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Require TLSv1 protocol version\",\n-                                        \"displayName\": \"TLSv1\",\n-                                        \"value\": \"TLSv1\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"TLS\",\n-                                \"description\": \"SSL or TLS Protocol Version for encrypted connections. Supported versions include insecure legacy options and depend on the specific version of Java used.\",\n-                                \"displayName\": \"TLS Protocol\",\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"60 sec\",\n+                                \"description\": \"Determines how long to wait between fetching the listing for new files\",\n+                                \"displayName\": \"Polling Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Protocol\",\n-                                \"required\": false,\n+                                \"name\": \"Polling Interval\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Truststore Filename\": {\n-                                \"description\": \"The fully-qualified filename of the Truststore\",\n-                                \"displayName\": \"Truststore Filename\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"22\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Truststore Filename\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Private Key Passphrase\": {\n+                                \"description\": \"Password for the private key\",\n+                                \"displayName\": \"Private Key Passphrase\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Private Key Path\": {\n+                                \"description\": \"The fully qualified path to the Private Key file\",\n+                                \"displayName\": \"Private Key Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Path\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Truststore Password\": {\n-                                \"description\": \"The password for the Truststore\",\n-                                \"displayName\": \"Truststore Password\",\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Truststore Password\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Host\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Truststore Type\": {\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BCFKS\",\n-                                        \"value\": \"BCFKS\"\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PKCS12\",\n-                                        \"value\": \"PKCS12\"\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"JKS\",\n-                                        \"value\": \"JKS\"\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"description\": \"The Type of the Truststore\",\n-                                \"displayName\": \"Truststore Type\",\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Truststore Type\",\n+                                \"name\": \"Proxy Type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"key-password\": {\n-                                \"description\": \"The password for the key. If this is not specified, but the Keystore Filename, Password, and Type are specified, then the Keystore Password will be assumed to be the same as the Key Password.\",\n-                                \"displayName\": \"Key Password\",\n+                            \"Remote Path\": {\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote Path\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"certificate\",\n-                            \"jks\",\n-                            \"keystore\",\n-                            \"p12\",\n-                            \"pkcs\",\n-                            \"pkcs12\",\n-                            \"secure\",\n-                            \"ssl\",\n-                            \"tls\",\n-                            \"truststore\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.ssl.StandardSSLContextService\",\n-                        \"typeDescription\": \"Standard implementation of the SSLContextService. Provides the ability to configure keystore and/or truststore properties once and reuse that configuration throughout the application. This service can be used to communicate with both legacy and modern systems. If you only need to communicate with non-legacy systems, then the StandardRestrictedSSLContextService is recommended as it only allows a specific set of SSL protocols to be chosen.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-email-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"The supporting ews-java-api library is no longer maintained\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"connection.timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"The amount of time to wait to connect to Email server\",\n-                                \"displayName\": \"Connection timeout\",\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Poll Batch Size\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n+                                \"displayName\": \"Remote Poll Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection.timeout\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Remote Poll Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete.messages\": {\n+                            \"Search Recursively\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n-                                \"displayName\": \"Delete Messages\",\n+                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete.messages\",\n+                                \"name\": \"Search Recursively\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ews-autodiscover\": {\n+                            \"Send Keep Alive On Timeout\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to use the Exchange email address to Autodiscover the EWS endpoint URL.\",\n-                                \"displayName\": \"Auto Discover URL\",\n+                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n+                                \"displayName\": \"Send Keep Alive On Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ews-autodiscover\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ews-exclude-headers\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"Comma delimited list specifying which headers from the original message to exclude in the exported email message. Blank means don't exclude any headers.\",\n-                                \"displayName\": \"Original Headers to Exclude\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ews-exclude-headers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ews-include-headers\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"Comma delimited list specifying which headers from the original message to include in the exported email message. Blank means copy all headers. Some headers can cause problems with message parsing, specifically the 'Content-Type' header.\",\n-                                \"displayName\": \"Original Headers to Include\",\n+                            \"Strict Host Key Checking\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n+                                \"displayName\": \"Strict Host Key Checking\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ews-include-headers\",\n-                                \"required\": false,\n+                                \"name\": \"Strict Host Key Checking\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ews-mark-as-read\": {\n+                            \"Use Compression\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specify if messages should be marked as read after retrieval.\",\n-                                \"displayName\": \"Mark Messages as Read\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ews-mark-as-read\",\n+                                \"name\": \"Use Compression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ews-url\": {\n-                                \"description\": \"URL of the EWS Endpoint. Required if Autodiscover is false.\",\n-                                \"displayName\": \"EWS URL\",\n+                            \"Use Natural Ordering\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files in the order in which they are naturally listed; otherwise, the order in which the files will be pulled is not defined\",\n+                                \"displayName\": \"Use Natural Ordering\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ews-url\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"fetch.size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n-                                \"displayName\": \"Fetch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"fetch.size\",\n+                                \"name\": \"Use Natural Ordering\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"folder\": {\n-                                \"defaultValue\": \"INBOX\",\n-                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n-                                \"displayName\": \"Folder\",\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"folder\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mail-ews-version\": {\n+                            \"follow-symlink\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Exchange2007_SP1\",\n-                                        \"value\": \"Exchange2007_SP1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Exchange2010\",\n-                                        \"value\": \"Exchange2010\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Exchange2010_SP1\",\n-                                        \"value\": \"Exchange2010_SP1\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Exchange2010_SP2\",\n-                                        \"value\": \"Exchange2010_SP2\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Exchange2010_SP2\",\n-                                \"description\": \"What version of Exchange Server the server is running.\",\n-                                \"displayName\": \"Exchange Version\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n+                                \"displayName\": \"Follow symlink\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mail-ews-version\",\n+                                \"name\": \"follow-symlink\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"password\": {\n-                                \"description\": \"Password used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"user\": {\n-                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"User Name\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"user\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Consume\",\n-                            \"EWS\",\n-                            \"Email\",\n-                            \"Exchange\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Message\"\n+                            \"fetch\",\n+                            \"files\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"sftp\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ConsumeEWS\",\n-                        \"typeDescription\": \"Consumes messages from Microsoft Exchange using Exchange Web Services. The raw-bytes of each received email message are written as contents of the FlowFile\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.GetSFTP\",\n+                        \"typeDescription\": \"Fetches files from an SFTP Server and creates FlowFiles from them\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The filename is set to the name of the file on the remote server\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the source file was last modified\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n+                                \"name\": \"absolute.path\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-email-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -88764,249 +87161,508 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Mark Messages as Read\": {\n+                            \"Additional HTTP Methods\": {\n+                                \"description\": \"A comma-separated list of non-standard HTTP Methods that should be allowed\",\n+                                \"displayName\": \"Additional HTTP Methods\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional HTTP Methods\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Allow DELETE\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specify if messages should be marked as read after retrieval.\",\n-                                \"displayName\": \"Mark Messages as Read\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP DELETE Method\",\n+                                \"displayName\": \"Allow DELETE\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mark Messages as Read\",\n+                                \"name\": \"Allow DELETE\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use SSL\": {\n+                            \"Allow GET\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies if IMAP connection must be obtained via SSL encrypted connection (i.e., IMAPS)\",\n-                                \"displayName\": \"Use SSL\",\n+                                \"description\": \"Allow HTTP GET Method\",\n+                                \"displayName\": \"Allow GET\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use SSL\",\n+                                \"name\": \"Allow GET\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"authorization-mode\": {\n+                            \"Allow HEAD\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use password\",\n-                                        \"displayName\": \"Use Password\",\n-                                        \"value\": \"password-based-authorization-mode\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Use OAuth2 to acquire access token\",\n-                                        \"displayName\": \"Use OAuth2\",\n-                                        \"value\": \"oauth-based-authorization-mode\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"password-based-authorization-mode\",\n-                                \"description\": \"How to authorize sending email on the user's behalf.\",\n-                                \"displayName\": \"Authorization Mode\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Allow HTTP HEAD Method\",\n+                                \"displayName\": \"Allow HEAD\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorization-mode\",\n+                                \"name\": \"Allow HEAD\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"connection.timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"The amount of time to wait to connect to Email server\",\n-                                \"displayName\": \"Connection timeout\",\n+                            \"Allow OPTIONS\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Allow HTTP OPTIONS Method\",\n+                                \"displayName\": \"Allow OPTIONS\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection.timeout\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Allow OPTIONS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete.messages\": {\n+                            \"Allow POST\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n-                                \"displayName\": \"Delete Messages\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP POST Method\",\n+                                \"displayName\": \"Allow POST\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete.messages\",\n+                                \"name\": \"Allow POST\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"fetch.size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n-                                \"displayName\": \"Fetch Size\",\n+                            \"Allow PUT\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP PUT Method\",\n+                                \"displayName\": \"Allow PUT\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"fetch.size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Allow PUT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"folder\": {\n-                                \"defaultValue\": \"INBOX\",\n-                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n-                                \"displayName\": \"Folder\",\n+                            \"Allowed Paths\": {\n+                                \"description\": \"A Regular Expression that specifies the valid HTTP Paths that are allowed in the incoming URL Requests. If this value is specified and the path of the HTTP Requests does not match this Regular Expression, the Processor will respond with a 404: NotFound\",\n+                                \"displayName\": \"Allowed Paths\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"folder\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Allowed Paths\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client Authentication\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Processor will not authenticate clients. Anyone can communicate with this Processor anonymously\",\n+                                        \"displayName\": \"No Authentication\",\n+                                        \"value\": \"No Authentication\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Processor will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n+                                        \"displayName\": \"Want Authentication\",\n+                                        \"value\": \"Want Authentication\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Processor will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n+                                        \"displayName\": \"Need Authentication\",\n+                                        \"value\": \"Need Authentication\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"No Authentication\",\n+                                \"description\": \"Specifies whether or not the Processor should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n+                                \"displayName\": \"Client Authentication\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client Authentication\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"host\": {\n-                                \"description\": \"Network address of Email server (e.g., pop.gmail.com, imap.gmail.com . . .)\",\n-                                \"displayName\": \"Host Name\",\n+                            \"Default URL Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The character set to use for decoding URL parameters if the HTTP Request does not supply one\",\n+                                \"displayName\": \"Default URL Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"host\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Default URL Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"oauth2-access-token-provider\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"oauth-based-authorization-mode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"OAuth2 service that can provide access tokens.\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n+                            \"HTTP Context Map\": {\n+                                \"description\": \"The HTTP Context Map Controller Service to use for caching the HTTP Request Information\",\n+                                \"displayName\": \"HTTP Context Map\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n+                                \"name\": \"HTTP Context Map\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"password\": {\n+                            \"HTTP Protocols\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"HTTP/1.1\",\n+                                        \"displayName\": \"http/1.1\",\n+                                        \"value\": \"HTTP_1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n+                                        \"displayName\": \"h2 http/1.1\",\n+                                        \"value\": \"H2_HTTP_1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"HTTP/2\",\n+                                        \"displayName\": \"h2\",\n+                                        \"value\": \"H2\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"HTTP_1_1\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"password-based-authorization-mode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n                                     }\n                                 ],\n-                                \"description\": \"Password used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"Password\",\n+                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n+                                \"displayName\": \"HTTP Protocols\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"HTTP Protocols\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"port\": {\n-                                \"description\": \"Numeric value identifying Port of Email server (e.g., 993)\",\n-                                \"displayName\": \"Port\",\n+                            \"Hostname\": {\n+                                \"description\": \"The Hostname to bind to. If not specified, will bind to all hosts\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Listening Port\": {\n+                                \"defaultValue\": \"80\",\n+                                \"description\": \"The Port to listen on for incoming HTTP requests\",\n+                                \"displayName\": \"Listening Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"port\",\n+                                \"name\": \"Listening Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"user\": {\n-                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"User Name\",\n+                            \"Maximum Threads\": {\n+                                \"defaultValue\": \"200\",\n+                                \"description\": \"The maximum number of threads that the embedded HTTP server will use for handling requests.\",\n+                                \"displayName\": \"Maximum Threads\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"user\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Threads\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"container-queue-size\": {\n+                                \"defaultValue\": \"50\",\n+                                \"description\": \"The size of the queue for Http Request Containers\",\n+                                \"displayName\": \"Container Queue Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"container-queue-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"multipart-read-buffer-size\": {\n+                                \"defaultValue\": \"512 KB\",\n+                                \"description\": \"The threshold size, at which the contents of an incoming file would be written to disk. Only applies for requests with Content-Type: multipart/form-data. It is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space.\",\n+                                \"displayName\": \"Multipart Read Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"multipart-read-buffer-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"multipart-request-max-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The max size of the request. Only applies for requests with Content-Type: multipart/form-data, and is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space\",\n+                                \"displayName\": \"Multipart Request Max Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"multipart-request-max-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"parameters-to-attributes\": {\n+                                \"description\": \"A comma-separated list of HTTP parameters or form data to output as attributes\",\n+                                \"displayName\": \"Parameters to Attributes List\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"parameters-to-attributes\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n+                                \"description\": \"All content that is received is routed to the 'success' relationship\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Consume\",\n-                            \"Email\",\n-                            \"Get\",\n-                            \"Imap\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Message\"\n+                            \"http\",\n+                            \"https\",\n+                            \"ingress\",\n+                            \"listen\",\n+                            \"request\",\n+                            \"web service\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ConsumeIMAP\",\n-                        \"typeDescription\": \"Consumes messages from Email Server using IMAP protocol. The raw-bytes of each received email message are written as contents of the FlowFile\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.HandleHttpRequest\",\n+                        \"typeDescription\": \"Starts an HTTP Server and listens for HTTP Requests. For each request, creates a FlowFile and transfers to 'success'. This Processor is designed to be used in conjunction with the HandleHttpResponse Processor in order to create a Web Service. In case  of a multipart request, one FlowFile is generated for each part.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"An identifier that allows the HandleHttpRequest and HandleHttpResponse to coordinate which FlowFile belongs to which HTTP Request/Response.\",\n+                                \"name\": \"http.context.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type of the data, according to the HTTP Header \\\"Content-Type\\\"\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The part of the request URL that is considered the Servlet Path\",\n+                                \"name\": \"http.servlet.path\"\n+                            },\n+                            {\n+                                \"description\": \"The part of the request URL that is considered to be the Context Path\",\n+                                \"name\": \"http.context.path\"\n+                            },\n+                            {\n+                                \"description\": \"The HTTP Method that was used for the request, such as GET or POST\",\n+                                \"name\": \"http.method\"\n+                            },\n+                            {\n+                                \"description\": \"IP address/hostname of the server\",\n+                                \"name\": \"http.local.name\"\n+                            },\n+                            {\n+                                \"description\": \"Listening port of the server\",\n+                                \"name\": \"http.server.port\"\n+                            },\n+                            {\n+                                \"description\": \"The query string portion of the Request URL\",\n+                                \"name\": \"http.query.string\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname of the requestor\",\n+                                \"name\": \"http.remote.host\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname:port combination of the requestor\",\n+                                \"name\": \"http.remote.addr\"\n+                            },\n+                            {\n+                                \"description\": \"The username of the requestor\",\n+                                \"name\": \"http.remote.user\"\n+                            },\n+                            {\n+                                \"description\": \"The protocol used to communicate\",\n+                                \"name\": \"http.protocol\"\n+                            },\n+                            {\n+                                \"description\": \"The full Request URL\",\n+                                \"name\": \"http.request.uri\"\n+                            },\n+                            {\n+                                \"description\": \"The type of HTTP Authorization used\",\n+                                \"name\": \"http.auth.type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the authenticated user making the request\",\n+                                \"name\": \"http.principal.name\"\n+                            },\n+                            {\n+                                \"description\": \"Each of query parameters in the request will be added as an attribute, prefixed with \\\"http.query.param.\\\"\",\n+                                \"name\": \"http.query.param.XXX\"\n+                            },\n+                            {\n+                                \"description\": \"Form parameters in the request that are configured by \\\"Parameters to Attributes List\\\" will be added as an attribute, prefixed with \\\"http.param.\\\". Putting form parameters of large size is not recommended.\",\n+                                \"name\": \"http.param.XXX\"\n+                            },\n+                            {\n+                                \"description\": \"The Distinguished Name of the requestor. This value will not be populated unless the Processor is configured to use an SSLContext Service\",\n+                                \"name\": \"http.subject.dn\"\n+                            },\n+                            {\n+                                \"description\": \"The Distinguished Name of the entity that issued the Subject's certificate. This value will not be populated unless the Processor is configured to use an SSLContext Service\",\n+                                \"name\": \"http.issuer.dn\"\n+                            },\n+                            {\n+                                \"description\": \"X.509 Client Certificate Subject Alternative Name value from mutual TLS authentication. The attribute name has a zero-based index ordered according to the content of Client Certificate\",\n+                                \"name\": \"http.certificate.sans.N.name\"\n+                            },\n+                            {\n+                                \"description\": \"X.509 Client Certificate Subject Alternative Name type from mutual TLS authentication. The attribute name has a zero-based index ordered according to the content of Client Certificate. The attribute value is one of the General Names from RFC 3280 Section 4.1.2.7\",\n+                                \"name\": \"http.certificate.sans.N.nameType\"\n+                            },\n+                            {\n+                                \"description\": \"Each of the HTTP Headers that is received in the request will be added as an attribute, prefixed with \\\"http.headers.\\\" For example, if the request contains an HTTP Header named \\\"x-my-header\\\", then the value will be added to an attribute named \\\"http.headers.x-my-header\\\"\",\n+                                \"name\": \"http.headers.XXX\"\n+                            },\n+                            {\n+                                \"description\": \"Each of the HTTP Headers that is received in the multipart request will be added as an attribute, prefixed with \\\"http.headers.multipart.\\\" For example, if the multipart request contains an HTTP Header named \\\"content-disposition\\\", then the value will be added to an attribute named \\\"http.headers.multipart.content-disposition\\\"\",\n+                                \"name\": \"http.headers.multipart.XXX\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's content size is recorded into this attribute\",\n+                                \"name\": \"http.multipart.size\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's content type is recorded into this attribute\",\n+                                \"name\": \"http.multipart.content.type\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's name is recorded into this attribute\",\n+                                \"name\": \"http.multipart.name\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", when the part contains an uploaded file, the name of the file is recorded into this attribute. Files are stored temporarily at the default temporary-file directory specified in \\\"java.io.File\\\" Java Docs)\",\n+                                \"name\": \"http.multipart.filename\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's index is recorded into this attribute. The index starts with 1.\",\n+                                \"name\": \"http.multipart.fragments.sequence.number\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the count of all parts is recorded into this attribute.\",\n+                                \"name\": \"http.multipart.fragments.total.number\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-email-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -89014,207 +87670,130 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These HTTPHeaders are set in the HTTP Response\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"An HTTP header name\",\n+                                \"value\": \"An HTTP header value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"authorization-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use password\",\n-                                        \"displayName\": \"Use Password\",\n-                                        \"value\": \"password-based-authorization-mode\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use OAuth2 to acquire access token\",\n-                                        \"displayName\": \"Use OAuth2\",\n-                                        \"value\": \"oauth-based-authorization-mode\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"password-based-authorization-mode\",\n-                                \"description\": \"How to authorize sending email on the user's behalf.\",\n-                                \"displayName\": \"Authorization Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorization-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"connection.timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"The amount of time to wait to connect to Email server\",\n-                                \"displayName\": \"Connection timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection.timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"delete.messages\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n-                                \"displayName\": \"Delete Messages\",\n+                            \"Attributes to add to the HTTP Response (Regex)\": {\n+                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be added to the HTTP response\",\n+                                \"displayName\": \"Attributes to add to the HTTP Response (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete.messages\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"fetch.size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n-                                \"displayName\": \"Fetch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"fetch.size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"folder\": {\n-                                \"defaultValue\": \"INBOX\",\n-                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n-                                \"displayName\": \"Folder\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"folder\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"host\": {\n-                                \"description\": \"Network address of Email server (e.g., pop.gmail.com, imap.gmail.com . . .)\",\n-                                \"displayName\": \"Host Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"host\",\n-                                \"required\": true,\n+                                \"name\": \"Attributes to add to the HTTP Response (Regex)\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"oauth2-access-token-provider\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"oauth-based-authorization-mode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"OAuth2 service that can provide access tokens.\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n+                            \"HTTP Context Map\": {\n+                                \"description\": \"The HTTP Context Map Controller Service to use for caching the HTTP Request Information\",\n+                                \"displayName\": \"HTTP Context Map\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n+                                \"name\": \"HTTP Context Map\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"password-based-authorization-mode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"port\": {\n-                                \"description\": \"Numeric value identifying Port of Email server (e.g., 993)\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"user\": {\n-                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"User Name\",\n+                            \"HTTP Status Code\": {\n+                                \"description\": \"The HTTP Status Code to use when responding to the HTTP Request. See Section 10 of RFC 2616 for more information.\",\n+                                \"displayName\": \"HTTP Status Code\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"user\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"HTTP Status Code\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The value of this attribute is used to lookup the HTTP Response so that the proper message can be sent back to the requestor. If this attribute is missing, the FlowFile will be routed to 'failure.'\",\n+                                \"name\": \"http.context.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"Value of the URI requested by the client. Used for provenance event.\",\n+                                \"name\": \"http.request.uri\"\n+                            },\n+                            {\n+                                \"description\": \"IP address of the client. Used for provenance event.\",\n+                                \"name\": \"http.remote.host\"\n+                            },\n+                            {\n+                                \"description\": \"IP address/hostname of the server. Used for provenance event.\",\n+                                \"name\": \"http.local.name\"\n+                            },\n+                            {\n+                                \"description\": \"Listening port of the server. Used for provenance event.\",\n+                                \"name\": \"http.server.port\"\n+                            },\n+                            {\n+                                \"description\": \"SSL distinguished name (if any). Used for provenance event.\",\n+                                \"name\": \"http.subject.dn\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.http.StandardHttpContextMap\",\n+                            \"org.apache.nifi.processors.standard.HandleHttpRequest\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n+                                \"description\": \"FlowFiles will be routed to this Relationship after the response has been successfully sent to the requestor\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles will be routed to this Relationship if the Processor is unable to respond to the requestor. This may happen, for instance, if the connection times out or if NiFi is restarted before responding to the HTTP Request.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Consume\",\n-                            \"Email\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Message\",\n-                            \"POP3\"\n+                            \"egress\",\n+                            \"http\",\n+                            \"https\",\n+                            \"response\",\n+                            \"web service\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ConsumePOP3\",\n-                        \"typeDescription\": \"Consumes messages from Email Server using POP3 protocol. The raw-bytes of each received email message are written as contents of the FlowFile\",\n+                        \"type\": \"org.apache.nifi.processors.standard.HandleHttpResponse\",\n+                        \"typeDescription\": \"Sends an HTTP Response to the Requestor that generated a FlowFile. This Processor is designed to be used in conjunction with the HandleHttpRequest in order to create a web service.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"EVENT_DRIVEN\": 0,\n@@ -89223,74 +87802,592 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.attributes.UpdateAttribute\"\n+                        ],\n+                        \"deprecationReason\": \"UpdateAttribute can be configured using the hash Expression Language function to digest one or more attributes\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"This regular expression is evaluated against the flowfile attribute values. If the regular expression contains a capturing group, the value of that group will be used when comparing flow file attributes. Otherwise, the original flow file attribute's value will be used if and only if the value matches the given regular expression.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A flowfile attribute key for attribute inspection\",\n+                                \"value\": \"A Regular Expression\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Hash Value Attribute Key\": {\n+                                \"description\": \"The name of the flowfile attribute where the hash value should be stored\",\n+                                \"displayName\": \"Hash Value Attribute Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Hash Value Attribute Key\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Flowfiles that could not be parsed\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original file\",\n-                                \"name\": \"original\"\n+                                \"description\": \"Used for flowfiles that have a hash value added\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n-                                \"name\": \"attachments\"\n+                                \"description\": \"Used for flowfiles that are missing required attributes\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"email\",\n-                            \"split\"\n+                            \"attributes\",\n+                            \"hash\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ExtractEmailAttachments\",\n-                        \"typeDescription\": \"Extract attachments from a mime formatted email file, splitting them into individual flowfiles.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.HashAttribute\",\n+                        \"typeDescription\": \"Hashes together the key/value pairs of several flowfile attributes and adds the hash as a new attribute. Optional properties are to be added such that the name of the property is the name of a flowfile attribute to consider and the value of the property is a regular expression that, if matched by the attribute value, will cause that attribute to be used as part of the hash. If the regular expression contains a capturing group, only the value of the capturing group will be used. For a processor which accepts various attributes and generates a cryptographic hash of each, see \\\"CryptographicHashAttribute\\\". \",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename of the attachment\",\n-                                \"name\": \"filename \"\n+                                \"description\": \"This Processor adds an attribute whose value is the result of Hashing the existing flowfile attributes. The name of this attribute is specified by the <Hash Value Attribute Key> property.\",\n+                                \"name\": \"<Hash Value Attribute Key>\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.standard.CryptographicHashContent\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Hash Algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1.0.10118.3.0.55\",\n+                                        \"value\": \"1.0.10118.3.0.55\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-1\",\n+                                        \"value\": \"SHA-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-384\",\n+                                        \"value\": \"SHA-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HARAKA-256\",\n+                                        \"value\": \"HARAKA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-512-256\",\n+                                        \"value\": \"SKEIN-512-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-1024-384\",\n+                                        \"value\": \"SKEIN-1024-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE3-256\",\n+                                        \"value\": \"BLAKE3-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2B-160\",\n+                                        \"value\": \"BLAKE2B-160\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA\",\n+                                        \"value\": \"SHA\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KECCAK-288\",\n+                                        \"value\": \"KECCAK-288\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WHIRLPOOL\",\n+                                        \"value\": \"WHIRLPOOL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-512-384\",\n+                                        \"value\": \"SKEIN-512-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-224\",\n+                                        \"value\": \"SHA-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SM3\",\n+                                        \"value\": \"SM3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2B-512\",\n+                                        \"value\": \"BLAKE2B-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.1.0.10118.3.0.55\",\n+                                        \"value\": \"OID.1.0.10118.3.0.55\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TUPLEHASH128-256\",\n+                                        \"value\": \"TUPLEHASH128-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GOST3411-2012-512\",\n+                                        \"value\": \"GOST3411-2012-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KECCAK-256\",\n+                                        \"value\": \"KECCAK-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-512-128\",\n+                                        \"value\": \"SKEIN-512-128\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2B-384\",\n+                                        \"value\": \"BLAKE2B-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHAKE256-512\",\n+                                        \"value\": \"SHAKE256-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.12\",\n+                                        \"value\": \"OID.2.16.840.1.101.3.4.2.12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.11\",\n+                                        \"value\": \"OID.2.16.840.1.101.3.4.2.11\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-256-160\",\n+                                        \"value\": \"SKEIN-256-160\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.10\",\n+                                        \"value\": \"OID.2.16.840.1.101.3.4.2.10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DSTU7564-256\",\n+                                        \"value\": \"DSTU7564-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-256\",\n+                                        \"value\": \"SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2S-224\",\n+                                        \"value\": \"BLAKE2S-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA3-256\",\n+                                        \"value\": \"SHA3-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KECCAK-384\",\n+                                        \"value\": \"KECCAK-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-256-128\",\n+                                        \"value\": \"SKEIN-256-128\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DSTU7564-384\",\n+                                        \"value\": \"DSTU7564-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HARAKA-512\",\n+                                        \"value\": \"HARAKA-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PARALLELHASH128-256\",\n+                                        \"value\": \"PARALLELHASH128-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHAKE128-256\",\n+                                        \"value\": \"SHAKE128-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KECCAK-224\",\n+                                        \"value\": \"KECCAK-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-512-512\",\n+                                        \"value\": \"SKEIN-512-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PARALLELHASH256-512\",\n+                                        \"value\": \"PARALLELHASH256-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-1024-512\",\n+                                        \"value\": \"SKEIN-1024-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-512-160\",\n+                                        \"value\": \"SKEIN-512-160\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.1.2.804.2.1.1.1.1.2.2.3\",\n+                                        \"value\": \"OID.1.2.804.2.1.1.1.1.2.2.3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GOST3411\",\n+                                        \"value\": \"GOST3411\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1.2.804.2.1.1.1.1.2.2.3\",\n+                                        \"value\": \"1.2.804.2.1.1.1.1.2.2.3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2B-256\",\n+                                        \"value\": \"BLAKE2B-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.1.2.804.2.1.1.1.1.2.2.2\",\n+                                        \"value\": \"OID.1.2.804.2.1.1.1.1.2.2.2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-1024-1024\",\n+                                        \"value\": \"SKEIN-1024-1024\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.1.2.804.2.1.1.1.1.2.2.1\",\n+                                        \"value\": \"OID.1.2.804.2.1.1.1.1.2.2.1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA3-384\",\n+                                        \"value\": \"SHA3-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-512/224\",\n+                                        \"value\": \"SHA-512/224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.9\",\n+                                        \"value\": \"OID.2.16.840.1.101.3.4.2.9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2S-256\",\n+                                        \"value\": \"BLAKE2S-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.8\",\n+                                        \"value\": \"OID.2.16.840.1.101.3.4.2.8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.7\",\n+                                        \"value\": \"OID.2.16.840.1.101.3.4.2.7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TIGER\",\n+                                        \"value\": \"TIGER\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RIPEMD256\",\n+                                        \"value\": \"RIPEMD256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-256-256\",\n+                                        \"value\": \"SKEIN-256-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA3-224\",\n+                                        \"value\": \"SHA3-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA3-512\",\n+                                        \"value\": \"SHA3-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RIPEMD320\",\n+                                        \"value\": \"RIPEMD320\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.16.840.1.101.3.4.2.9\",\n+                                        \"value\": \"2.16.840.1.101.3.4.2.9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RIPEMD160\",\n+                                        \"value\": \"RIPEMD160\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TUPLEHASH256-512\",\n+                                        \"value\": \"TUPLEHASH256-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GOST3411-2012-256\",\n+                                        \"value\": \"GOST3411-2012-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.16.840.1.101.3.4.2.8\",\n+                                        \"value\": \"2.16.840.1.101.3.4.2.8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1.2.804.2.1.1.1.1.2.2.1\",\n+                                        \"value\": \"1.2.804.2.1.1.1.1.2.2.1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KECCAK-512\",\n+                                        \"value\": \"KECCAK-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-512-224\",\n+                                        \"value\": \"SKEIN-512-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.16.840.1.101.3.4.2.7\",\n+                                        \"value\": \"2.16.840.1.101.3.4.2.7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1.2.804.2.1.1.1.1.2.2.2\",\n+                                        \"value\": \"1.2.804.2.1.1.1.1.2.2.2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.16.840.1.101.3.4.2.12\",\n+                                        \"value\": \"2.16.840.1.101.3.4.2.12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.16.840.1.101.3.4.2.10\",\n+                                        \"value\": \"2.16.840.1.101.3.4.2.10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.16.840.1.101.3.4.2.11\",\n+                                        \"value\": \"2.16.840.1.101.3.4.2.11\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2S-160\",\n+                                        \"value\": \"BLAKE2S-160\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-512/256\",\n+                                        \"value\": \"SHA-512/256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MD2\",\n+                                        \"value\": \"MD2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RIPEMD128\",\n+                                        \"value\": \"RIPEMD128\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MD4\",\n+                                        \"value\": \"MD4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-512\",\n+                                        \"value\": \"SHA-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-256-224\",\n+                                        \"value\": \"SKEIN-256-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2S-128\",\n+                                        \"value\": \"BLAKE2S-128\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DSTU7564-512\",\n+                                        \"value\": \"DSTU7564-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"MD5\",\n+                                \"description\": \"Determines what hashing algorithm should be used to perform the hashing function\",\n+                                \"displayName\": \"Hash Algorithm\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Hash Algorithm\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n+                            \"Hash Attribute Name\": {\n+                                \"defaultValue\": \"hash.value\",\n+                                \"description\": \"The name of the FlowFile Attribute into which the Hash Value should be written. If the value already exists, it will be overwritten\",\n+                                \"displayName\": \"Hash Attribute Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Hash Attribute Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"email.attachment.parent.filename \"\n+                                \"description\": \"FlowFiles that are process successfully will be sent to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The UUID of the original FlowFile.\",\n-                                \"name\": \"email.attachment.parent.uuid\"\n-                            },\n+                                \"description\": \"Any FlowFile that cannot be processed successfully will be sent to this relationship without any attribute being added\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"MD5\",\n+                            \"SHA-1\",\n+                            \"SHA-256\",\n+                            \"content\",\n+                            \"hash\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.HashContent\",\n+                        \"typeDescription\": \"Calculates a hash value for the Content of a FlowFile and puts that hash value on the FlowFile as an attribute whose name is determined by the <Hash Attribute Name> property. This processor did not provide a consistent offering of hash algorithms, and is now deprecated. For modern cryptographic hashing capabilities, see \\\"CryptographicHashContent\\\". \",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"description\": \"The mime type of the attachment.\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"This Processor adds an attribute whose value is the result of Hashing the existing FlowFile content. The name of this attribute is specified by the <Hash Attribute Name> property\",\n+                                \"name\": \"<Hash Attribute Name>\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"EVENT_DRIVEN\": 0,\n@@ -89303,194 +88400,954 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"CAPTURED_HEADERS\": {\n-                                \"defaultValue\": \"x-mailer\",\n-                                \"description\": \"COLON separated list of additional headers to be extracted from the flowfile content.NOTE the header key is case insensitive and will be matched as lower-case. Values will respect email contents.\",\n-                                \"displayName\": \"Additional Header List\",\n+                            \"config-body\": {\n+                                \"description\": \"Body of MIME type config file. Only one of Config File or Config Body may be used.\",\n+                                \"displayName\": \"Config Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CAPTURED_HEADERS\",\n+                                \"name\": \"config-body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"STRICT_ADDRESS_PARSING\": {\n+                            \"config-file\": {\n+                                \"description\": \"Path to MIME type config file. Only one of Config File or Config Body may be used.\",\n+                                \"displayName\": \"Config File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"config-file\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"use-filename-in-detection\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Strict email address format will be enforced. FlowFiles will be transfered to the failure relationship if the email address is invalid.\",\n-                                        \"displayName\": \"Strict Address Parsing\",\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Accept emails, even if the address is poorly formed and doesn't strictly comply with RFC Validation.\",\n-                                        \"displayName\": \"Non-Strict Address Parsing\",\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"If \\\"strict\\\", strict address format parsing rules are applied to mailbox and mailbox list fields, such as \\\"to\\\" and \\\"from\\\" headers, and FlowFiles with poorly formed addresses will be routed to the failure relationship, similar to messages that fail RFC compliant format validation. If \\\"non-strict\\\", the processor will extract the contents of mailbox list headers as comma-separated values without attempting to parse each value as well-formed Internet mailbox addresses. This is optional and defaults to Strict Address Parsing\",\n-                                \"displayName\": \"Email Address Parsing\",\n+                                \"description\": \"If true will pass the filename to Tika to aid in detection.\",\n+                                \"displayName\": \"Use Filename In Detection\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"STRICT_ADDRESS_PARSING\",\n-                                \"required\": false,\n+                                \"name\": \"use-filename-in-detection\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Extraction was successful\",\n+                                \"description\": \"All FlowFiles are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Flowfiles that could not be parsed as a RFC-2822 compliant message\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"email\",\n-                            \"split\"\n+                            \"MIME\",\n+                            \"bzip2\",\n+                            \"compression\",\n+                            \"file\",\n+                            \"gzip\",\n+                            \"identify\",\n+                            \"mime.type\",\n+                            \"zip\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ExtractEmailHeaders\",\n-                        \"typeDescription\": \"Using the flowfile content as source of data, extract header from an RFC compliant  email file adding the relevant attributes to the flowfile. This processor does not perform extensive RFC validation but still requires a bare minimum compliance with RFC 2822\",\n+                        \"type\": \"org.apache.nifi.processors.standard.IdentifyMimeType\",\n+                        \"typeDescription\": \"Attempts to identify the MIME Type used for a FlowFile. If the MIME Type can be identified, an attribute with the name 'mime.type' is added with the value being the MIME Type. If the MIME Type cannot be determined, the value will be set to 'application/octet-stream'. In addition, the attribute 'mime.extension' will be set if a common file extension for the MIME Type is known. If the MIME Type detected is of type text/*, attempts to identify the charset used and an attribute with the name 'mime.charset' is added with the value being the charset.If both Config File and Config Body are not set, the default NiFi MIME Types will be used.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Each individual BCC recipient (if available)\",\n-                                \"name\": \"email.headers.bcc.*\"\n-                            },\n-                            {\n-                                \"description\": \"Each individual CC recipient (if available)\",\n-                                \"name\": \"email.headers.cc.*\"\n-                            },\n-                            {\n-                                \"description\": \"Each individual mailbox contained in the From  of the Email (array as per RFC-2822)\",\n-                                \"name\": \"email.headers.from.*\"\n-                            },\n-                            {\n-                                \"description\": \"The value of the Message-ID header (if available)\",\n-                                \"name\": \"email.headers.message-id\"\n-                            },\n-                            {\n-                                \"description\": \"The Received-Date of the message (if available)\",\n-                                \"name\": \"email.headers.received_date\"\n-                            },\n-                            {\n-                                \"description\": \"Date the message was sent\",\n-                                \"name\": \"email.headers.sent_date\"\n-                            },\n-                            {\n-                                \"description\": \"Subject of the message (if available)\",\n-                                \"name\": \"email.headers.subject\"\n+                                \"description\": \"This Processor sets the FlowFile's mime.type attribute to the detected MIME Type. If unable to detect the MIME Type, the attribute's value will be set to application/octet-stream\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"Each individual TO recipient (if available)\",\n-                                \"name\": \"email.headers.to.*\"\n+                                \"description\": \"This Processor sets the FlowFile's mime.extension attribute to the file extension associated with the detected MIME Type. If there is no correlated extension, the attribute's value will be empty\",\n+                                \"name\": \"mime.extension\"\n                             },\n                             {\n-                                \"description\": \"Number of attachments of the message\",\n-                                \"name\": \"email.attachment_count\"\n+                                \"description\": \"This Processor sets the FlowFile's mime.charset attribute to the detected charset. If unable to detect the charset or the detected MIME type is not of type text/*, the attribute will not be set\",\n+                                \"name\": \"mime.charset\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Send request header with a key matching the Dynamic Property Key and a value created by evaluating the Attribute Expression Language set in the value of the Dynamic Property.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Header Name\",\n+                                \"value\": \"Attribute Expression Language\"\n+                            },\n+                            {\n+                                \"description\": \"When the HTTP Method is POST, dynamic properties with the property name in the form of post:form:<NAME>, where the <NAME> will be the form data name, will be used to fill out the multipart form parts.  If send message body is false, the flowfile will not be sent, but any other form data will be.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"post:form:<NAME>\",\n+                                \"value\": \"Attribute Expression Language\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n-                        \"sideEffectFree\": true,\n+                        \"propertyDescriptors\": {\n+                            \"Add Response Headers to Request\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enable adding HTTP response headers as attributes to FlowFiles transferred to the Original relationship.\",\n+                                \"displayName\": \"Response Header Request Attributes Enabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Add Response Headers to Request\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Always Output Response\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enable generation and transfer of a FlowFile to the Response relationship regardless of HTTP response received.\",\n+                                \"displayName\": \"Response Generation Required\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Always Output Response\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Attributes to Send\": {\n+                                \"description\": \"Regular expression that defines which FlowFile attributes to send as HTTP headers in the request. If not defined, no attributes are sent as headers. Dynamic properties will be always be sent as headers. The dynamic property name will be the header key and the dynamic property value, interpreted as Expression Language, will be the header value. Attributes and their values are limited to ASCII characters due to the requirement of the HTTP protocol.\",\n+                                \"displayName\": \"Request Header Attributes Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Attributes to Send\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Basic Authentication Password\": {\n+                                \"description\": \"The password provided for authentication of HTTP requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n+                                \"displayName\": \"Request Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Basic Authentication Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Basic Authentication Username\": {\n+                                \"description\": \"The username provided for authentication of HTTP requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n+                                \"displayName\": \"Request Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Basic Authentication Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Maximum time to wait for initial socket connection to the HTTP URL.\",\n+                                \"displayName\": \"Socket Connect Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Content-Encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Content encoding not applied during transmission\",\n+                                        \"displayName\": \"DISABLED\",\n+                                        \"value\": \"DISABLED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gzip content encoding and HTTP Content-Encoding header applied during transmission\",\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DISABLED\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\n+                                    }\n+                                ],\n+                                \"description\": \"HTTP Content-Encoding applied to request body during transmission. The receiving server must support the selected encoding to avoid request failures.\",\n+                                \"displayName\": \"Request Content-Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Content-Encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Content-Type\": {\n+                                \"defaultValue\": \"${mime.type}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\n+                                    }\n+                                ],\n+                                \"description\": \"HTTP Content-Type Header applied to when sending an HTTP request body for PATCH, POST, or PUT methods. The Content-Type defaults to application/octet-stream when not configured.\",\n+                                \"displayName\": \"Request Content-Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Content-Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Digest Authentication\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Request Username\",\n+                                        \"propertyName\": \"Basic Authentication Username\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enable Digest Authentication on HTTP requests with Username and Password credentials as described in RFC 7616.\",\n+                                \"displayName\": \"Request Digest Authentication Enabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Digest Authentication\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Follow Redirects\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"True\",\n+                                \"description\": \"Enable following HTTP redirects sent with HTTP 300 series responses as described in RFC 7231 Section 6.4.\",\n+                                \"displayName\": \"Response Redirects Enabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Follow Redirects\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"HTTP Method\": {\n+                                \"defaultValue\": \"GET\",\n+                                \"description\": \"HTTP request method (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS). Arbitrary methods are also supported. Methods other than POST, PUT and PATCH will be sent without a message body.\",\n+                                \"displayName\": \"HTTP Method\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"HTTP Method\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Include Date Header\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"True\",\n+                                \"description\": \"Enable sending HTTP Date Header on HTTP requests as described in RFC 7231 Section 7.1.1.2.\",\n+                                \"displayName\": \"Request Date Header Enabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Include Date Header\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Length To Put In Attribute\": {\n+                                \"defaultValue\": \"256\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Response Body Attribute Name\",\n+                                        \"propertyName\": \"Put Response Body In Attribute\"\n+                                    }\n+                                ],\n+                                \"description\": \"Maximum size in bytes applied when writing an HTTP response body to a FlowFile attribute. Attributes exceeding the maximum will be truncated.\",\n+                                \"displayName\": \"Response Body Attribute Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Length To Put In Attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Penalize on \\\"No Retry\\\"\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enable penalization of request FlowFiles when receiving HTTP response with a status code between 400 and 499.\",\n+                                \"displayName\": \"Request Failure Penalization Enabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Penalize on \\\"No Retry\\\"\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"Proxy Host and dependent properties are deprecated in favor of Proxy Configuration Service. Proxy Host can be configured using an IP address or DNS address.\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Port\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Proxy Host\",\n+                                        \"propertyName\": \"Proxy Host\"\n+                                    }\n+                                ],\n+                                \"description\": \"Proxy Port and dependent properties are deprecated in favor of Proxy Configuration Service. Port number for the configured Proxy Host address.\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n+                                \"defaultValue\": \"http\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Proxy Host\",\n+                                        \"propertyName\": \"Proxy Host\"\n+                                    }\n+                                ],\n+                                \"description\": \"Proxy Type and dependent properties are deprecated in favor of Proxy Configuration Service. Proxy protocol type is not used\",\n+                                \"displayName\": \"Proxy Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Put Response Body In Attribute\": {\n+                                \"description\": \"FlowFile attribute name used to write an HTTP response body for FlowFiles transferred to the Original relationship.\",\n+                                \"displayName\": \"Response Body Attribute Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Put Response Body In Attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Read Timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Maximum time to wait for receiving responses from a socket connection to the HTTP URL.\",\n+                                \"displayName\": \"Socket Read Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Read Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote URL\": {\n+                                \"description\": \"HTTP remote URL including a scheme of http or https, as well as a hostname or IP address with optional port and path elements. Any encoding of the URL must be done by the user.\",\n+                                \"displayName\": \"HTTP URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"SSL Context Service provides trusted certificates and client certificates for TLS communication.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Socket Write Timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Maximum time to wait for write operations while sending requests from a socket connection to the HTTP URL.\",\n+                                \"displayName\": \"Socket Write Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Socket Write Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Use Chunked Encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enable sending HTTP requests with the Transfer-Encoding Header set to chunked, and disable sending the Content-Length Header. Transfer-Encoding applies to the body in HTTP/1.1 requests as described in RFC 7230 Section 3.3.1\",\n+                                \"displayName\": \"Request Chunked Transfer-Encoding Enabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Use Chunked Encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Useragent\": {\n+                                \"description\": \"HTTP User-Agent Header applied to requests. RFC 7231 Section 5.5.3 describes recommend formatting.\",\n+                                \"displayName\": \"Request User-Agent\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Useragent\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cookie-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DISABLED\",\n+                                        \"value\": \"DISABLED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ACCEPT_ALL\",\n+                                        \"value\": \"ACCEPT_ALL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DISABLED\",\n+                                \"description\": \"Strategy for accepting and persisting HTTP cookies. Accepting cookies enables persistence across multiple requests.\",\n+                                \"displayName\": \"Response Cookie Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cookie-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"disable-http2\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"False\",\n+                                \"description\": \"Disable negotiation of HTTP/2 protocol. HTTP/2 requires TLS. HTTP/1.1 protocol supported is required when HTTP/2 is disabled.\",\n+                                \"displayName\": \"HTTP/2 Disabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"disable-http2\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"etag-max-cache-size\": {\n+                                \"defaultValue\": \"10MB\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Response Cache Enabled\",\n+                                        \"propertyName\": \"use-etag\"\n+                                    }\n+                                ],\n+                                \"description\": \"Maximum size of HTTP response cache in bytes. Caching responses considers ETag and other headers.\",\n+                                \"displayName\": \"Response Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"etag-max-cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"flow-file-naming-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"FlowFile filename attribute will be a random value.\",\n+                                        \"displayName\": \"RANDOM\",\n+                                        \"value\": \"RANDOM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile filename attribute will be extracted from the remote URL path. The attribute may contain URL encoded characters. If the path doesn't exist, the attribute will be a random value.\",\n+                                        \"displayName\": \"URL_PATH\",\n+                                        \"value\": \"URL_PATH\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"RANDOM\",\n+                                \"description\": \"Determines the strategy used for setting the filename attribute of FlowFiles transferred to the Response relationship.\",\n+                                \"displayName\": \"Response FlowFile Naming Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"flow-file-naming-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"form-body-form-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Request Body Enabled\",\n+                                        \"propertyName\": \"send-message-body\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enable sending HTTP request body formatted using multipart/form-data and using the form name configured.\",\n+                                \"displayName\": \"Request Multipart Form-Data Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"form-body-form-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"idle-timeout\": {\n+                                \"defaultValue\": \"5 mins\",\n+                                \"description\": \"Maximum time to wait before closing idle connections to the HTTP URL.\",\n+                                \"displayName\": \"Socket Idle Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"idle-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ignore-response-content\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Disable writing HTTP response FlowFiles to Response relationship\",\n+                                \"displayName\": \"Response Body Ignored\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ignore-response-content\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"invokehttp-proxy-password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Proxy Host\",\n+                                        \"propertyName\": \"Proxy Host\"\n+                                    }\n+                                ],\n+                                \"description\": \"Proxy Password and dependent properties are deprecated in favor of Proxy Configuration Service. Password to set when authenticating with a Proxy server.\",\n+                                \"displayName\": \"Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"invokehttp-proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"invokehttp-proxy-user\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Proxy Host\",\n+                                        \"propertyName\": \"Proxy Host\"\n+                                    }\n+                                ],\n+                                \"description\": \"Proxy Username and dependent properties are deprecated in favor of Proxy Configuration Service. Username to set when authenticating with a Proxy server.\",\n+                                \"displayName\": \"Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"invokehttp-proxy-user\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-idle-connections\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"Maximum number of idle connections to the HTTP URL.\",\n+                                \"displayName\": \"Socket Idle Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-idle-connections\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"oauth2-access-token-provider\": {\n+                                \"description\": \"Enables managed retrieval of OAuth2 Bearer Token applied to HTTP requests using the Authorization Header.\",\n+                                \"displayName\": \"Request OAuth2 Access Token Provider\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"oauth2-access-token-provider\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"send-message-body\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enable sending HTTP request body for PATCH, POST, or PUT methods.\",\n+                                \"displayName\": \"Request Body Enabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"send-message-body\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"set-form-filename\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Request Multipart Form-Data Name\",\n+                                        \"propertyName\": \"form-body-form-name\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enable sending the FlowFile filename attribute as the filename parameter in the Content-Disposition Header for multipart/form-data HTTP requests.\",\n+                                \"displayName\": \"Request Multipart Form-Data Filename Enabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"set-form-filename\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"use-etag\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enable HTTP response caching described in RFC 7234. Caching responses considers ETag and other headers.\",\n+                                \"displayName\": \"Response Cache Enabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-etag\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Each individual flowfile that could not be parsed will be routed to the failure relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"name\": \"Original\"\n                             },\n                             {\n-                                \"description\": \"Each original flowfile (i.e. before extraction) will be routed to the original relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n+                                \"name\": \"Failure\"\n+                            },\n+                            {\n+                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 500 and 599.\",\n+                                \"name\": \"Retry\"\n+                            },\n+                            {\n+                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 400 an 499.\",\n+                                \"name\": \"No Retry\"\n                             },\n                             {\n-                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n-                                \"name\": \"attachments\"\n+                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"name\": \"Response\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"email\",\n-                            \"split\"\n+                            \"client\",\n+                            \"http\",\n+                            \"https\",\n+                            \"rest\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ExtractTNEFAttachments\",\n-                        \"typeDescription\": \"Extract attachments from a mime formatted email file, splitting them into individual flowfiles.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.InvokeHTTP\",\n+                        \"typeDescription\": \"An HTTP client processor which can interact with a configurable HTTP Endpoint. The destination URL and HTTP Method are configurable. When the HTTP Method is PUT, POST or PATCH, the FlowFile contents are included as the body of the request and FlowFile attributes are converted to HTTP headers, optionally, based on configuration properties.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename of the attachment\",\n-                                \"name\": \"filename \"\n+                                \"description\": \"The status code that is returned\",\n+                                \"name\": \"invokehttp.status.code\"\n                             },\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"email.tnef.attachment.parent.filename \"\n+                                \"description\": \"The status message that is returned\",\n+                                \"name\": \"invokehttp.status.message\"\n                             },\n                             {\n-                                \"description\": \"The UUID of the original FlowFile.\",\n-                                \"name\": \"email.tnef.attachment.parent.uuid\"\n+                                \"description\": \"In the instance where the status code received is not a success (2xx) then the response body will be put to the 'invokehttp.response.body' attribute of the request FlowFile.\",\n+                                \"name\": \"invokehttp.response.body\"\n+                            },\n+                            {\n+                                \"description\": \"The original request URL\",\n+                                \"name\": \"invokehttp.request.url\"\n+                            },\n+                            {\n+                                \"description\": \"Duration (in milliseconds) of the HTTP call to the external endpoint\",\n+                                \"name\": \"invokehttp.request.duration\"\n+                            },\n+                            {\n+                                \"description\": \"The URL that was ultimately requested after any redirects were followed\",\n+                                \"name\": \"invokehttp.response.url\"\n+                            },\n+                            {\n+                                \"description\": \"The transaction ID that is returned after reading the response\",\n+                                \"name\": \"invokehttp.tx.id\"\n+                            },\n+                            {\n+                                \"description\": \"The DN of the remote server\",\n+                                \"name\": \"invokehttp.remote.dn\"\n+                            },\n+                            {\n+                                \"description\": \"The Java exception class raised when the processor fails\",\n+                                \"name\": \"invokehttp.java.exception.class\"\n+                            },\n+                            {\n+                                \"description\": \"The Java exception message raised when the processor fails\",\n+                                \"name\": \"invokehttp.java.exception.message\"\n+                            },\n+                            {\n+                                \"description\": \"If the 'Put Response Body In Attribute' property is set then whatever it is set to will become the attribute key and the value would be the body of the HTTP response.\",\n+                                \"name\": \"user-defined\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -89499,181 +89356,265 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"CLIENT_AUTH\": {\n+                            \"Enrichment Record Reader\": {\n+                                \"description\": \"The Record Reader for reading the 'enrichment' FlowFile\",\n+                                \"displayName\": \"Enrichment Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enrichment Record Reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Insertion Record Path\": {\n+                                \"defaultValue\": \"/\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Insert Enrichment Fields\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies where in the 'original' Record the 'enrichment' Record's fields should be inserted. Note that if the RecordPath does not point to any existing field in the original Record, the enrichment will not be inserted.\",\n+                                \"displayName\": \"Insertion Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Insertion Record Path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Join Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"The output is a Record that contains two fields: (1) 'original', containing the Record from the original FlowFile and (2) 'enrichment' containing the corresponding Record from the enrichment FlowFile. Records will be correlated based on their index in the FlowFile. If one FlowFile has more Records than the other, a null value will be used.\",\n+                                        \"displayName\": \"Wrapper\",\n+                                        \"value\": \"Wrapper\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"The output is derived by evaluating a SQL SELECT statement that allows for two tables: 'original' and 'enrichment'. This allows for SQL JOIN statements to be used in order to correlate the Records of the two FlowFiles, so the index in which the Record is encountered in the FlowFile does not matter.\",\n+                                        \"displayName\": \"SQL\",\n+                                        \"value\": \"SQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The enrichment is joined together with the original FlowFile by placing all fields of the enrichment Record into the corresponding Record from the original FlowFile. Records will be correlated based on their index in the FlowFile.\",\n+                                        \"displayName\": \"Insert Enrichment Fields\",\n+                                        \"value\": \"Insert Enrichment Fields\"\n                                     }\n                                 ],\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"Wrapper\",\n+                                \"description\": \"Specifies how to join the two FlowFiles into a single FlowFile\",\n+                                \"displayName\": \"Join Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CLIENT_AUTH\",\n-                                \"required\": false,\n+                                \"name\": \"Join Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SMTP_HOSTNAME\": {\n-                                \"description\": \"The hostname to be embedded into the banner displayed when an SMTP client connects to the processor TCP port .\",\n-                                \"displayName\": \"SMTP hostname\",\n+                            \"Maximum number of Bins\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time\",\n+                                \"displayName\": \"Maximum number of Bins\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_HOSTNAME\",\n-                                \"required\": false,\n+                                \"name\": \"Maximum number of Bins\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SMTP_MAXIMUM_CONNECTIONS\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of simultaneous SMTP connections.\",\n-                                \"displayName\": \"Maximum number of SMTP connection\",\n+                            \"Original Record Reader\": {\n+                                \"description\": \"The Record Reader for reading the 'original' FlowFile\",\n+                                \"displayName\": \"Original Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_MAXIMUM_CONNECTIONS\",\n+                                \"name\": \"Original Record Reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"SMTP_MAXIMUM_MSG_SIZE\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum number of bytes the server will accept.\",\n-                                \"displayName\": \"SMTP Maximum Message Size\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use for writing the results. If the Record Writer is configured to inherit the schema from the Record, the schema that it will inherit will be the result of merging both the 'original' record schema and the 'enrichment' record schema.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_MAXIMUM_MSG_SIZE\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"SMTP_PORT\": {\n-                                \"description\": \"The TCP port the ListenSMTP processor will bind to.NOTE that on Unix derivative operating  systems this port must be higher than 1024 unless NiFi is running as with root user permissions.\",\n-                                \"displayName\": \"Listening Port\",\n+                            \"SQL\": {\n+                                \"defaultValue\": \"SELECT original.*, enrichment.* \\nFROM original \\nLEFT OUTER JOIN enrichment \\nON original.id = enrichment.id\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SQL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The SQL SELECT statement to evaluate. Expression Language may be provided, but doing so may result in poorer performance. Because this Processor is dealing with two FlowFiles at a time, it's also important to understand how attributes will be referenced. If both FlowFiles have an attribute with the same name but different values, the Expression Language will resolve to the value provided by the 'enrichment' FlowFile.\",\n+                                \"displayName\": \"SQL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_PORT\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SQL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SMTP_TIMEOUT\": {\n-                                \"defaultValue\": \"60 seconds\",\n-                                \"description\": \"The maximum time to wait for an action of SMTP client.\",\n-                                \"displayName\": \"SMTP connection timeout\",\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"10 min\",\n+                                \"description\": \"Specifies the maximum amount of time to wait for the second FlowFile once the first arrives at the processor, after which point the first FlowFile will be routed to the 'timeout' relationship.\",\n+                                \"displayName\": \"Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_TIMEOUT\",\n+                                \"name\": \"Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL_CONTEXT_SERVICE\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SQL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL_CONTEXT_SERVICE\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-precision\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SQL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ForkEnrichment\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All new messages will be routed as FlowFiles to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If one of the incoming FlowFiles (i.e., the 'original' FlowFile or the 'enrichment' FlowFile) arrives to this Processor but the other does not arrive within the configured Timeout period, the FlowFile that did arrive is routed to this relationship.\",\n+                                \"name\": \"timeout\"\n+                            },\n+                            {\n+                                \"description\": \"The resultant FlowFile with Records joined together from both the original and enrichment FlowFiles will be routed to this relationship\",\n+                                \"name\": \"joined\"\n+                            },\n+                            {\n+                                \"description\": \"If both the 'original' and 'enrichment' FlowFiles arrive at the processor but there was a failure in joining the records, both of those FlowFiles will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Both of the incoming FlowFiles ('original' and 'enrichment') will be routed to this Relationship. I.e., this is the 'original' version of both of these FlowFiles.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"This Processor will load into heap all FlowFiles that are on its incoming queues. While it loads the FlowFiles themselves, and not their content, the FlowFile attributes can be very memory intensive. Additionally, if the Join Strategy is set to SQL, the SQL engine may require buffering the entire contents of the enrichment FlowFile for each concurrent task. See Processor's Additional Details for more details and for steps on how to mitigate these concerns.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"email\",\n-                            \"listen\",\n-                            \"smtp\"\n+                            \"combine\",\n+                            \"enrichment\",\n+                            \"fork\",\n+                            \"join\",\n+                            \"merge\",\n+                            \"record\",\n+                            \"recordpath\",\n+                            \"sql\",\n+                            \"streams\",\n+                            \"wrap\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ListenSMTP\",\n-                        \"typeDescription\": \"This processor implements a lightweight SMTP server to an arbitrary port, allowing nifi to listen for incoming email. Note this server does not perform any email validation. If direct exposure to the internet is sought, it may be a better idea to use the combination of NiFi and an industrial scale MTA (e.g. Postfix). Threading for this processor is managed by the underlying smtp server used so the processor need not support more than one thread.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.JoinEnrichment\",\n+                        \"typeDescription\": \"Joins together Records from two different FlowFiles where one FlowFile, the 'original' contains arbitrary records and the second FlowFile, the 'enrichment' contains additional data that should be used to enrich the first. See Additional Details for more information on how to configure this processor and the different use cases that it aims to accomplish.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The value used during HELO\",\n-                                \"name\": \"smtp.helo\"\n-                            },\n-                            {\n-                                \"description\": \"The serial numbers for each of the certificates used by an TLS peer\",\n-                                \"name\": \"smtp.certificates.*.serial\"\n-                            },\n-                            {\n-                                \"description\": \"The principal for each of the certificates used by an TLS peer\",\n-                                \"name\": \"smtp.certificates.*.principal\"\n-                            },\n-                            {\n-                                \"description\": \"The source IP and port of the SMTP connection\",\n-                                \"name\": \"smtp.src\"\n-                            },\n-                            {\n-                                \"description\": \"The value used during MAIL FROM (i.e. envelope)\",\n-                                \"name\": \"smtp.from\"\n-                            },\n-                            {\n-                                \"description\": \"The values used during RCPT TO (i.e. envelope)\",\n-                                \"name\": \"smtp.recipient.*\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"Mime type of the message\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cassandra-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cassandra-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"EVENT_DRIVEN\": 0,\n@@ -89682,2408 +89623,1965 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"DataStax 3 driver for Cassandra is no longer the current version and requires new components.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Cassandra Contact Points\": {\n-                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n-                                \"displayName\": \"Cassandra Contact Points\",\n+                            \"Max String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n+                                \"displayName\": \"Max String Length\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Cassandra Contact Points\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max String Length\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the record data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Transform Cache Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Compiling a Jolt Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n+                                \"displayName\": \"Transform Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transform Cache Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client Auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n-                                    },\n+                            \"jolt-custom-class\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"dependentValues\": [\n+                                            \"jolt-transform-custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Jolt Transformation DSL\",\n+                                        \"propertyName\": \"jolt-transform\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"description\": \"Fully Qualified Class Name for Custom Transformation\",\n+                                \"displayName\": \"Custom Transformation Class Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"jolt-custom-class\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Compression Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n+                            \"jolt-custom-modules\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n+                                        \"dependentValues\": [\n+                                            \"jolt-transform-custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Jolt Transformation DSL\",\n+                                        \"propertyName\": \"jolt-transform\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Enable compression at transport-level requests and responses\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules containing custom transformations (that are not included on NiFi's classpath).\",\n+                                \"displayName\": \"Custom Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Type\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"jolt-custom-modules\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Consistency Level\": {\n+                            \"jolt-spec\": {\n+                                \"description\": \"Jolt Specification for transformation of JSON data. The value for this property may be the text of a Jolt specification or the path to a file containing a Jolt specification. 'Jolt Specification' must be set, or the value is ignored if the Jolt Sort Transformation is selected.\",\n+                                \"displayName\": \"Jolt Specification\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"jolt-spec\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"jolt-transform\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ANY\",\n-                                        \"value\": \"ANY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ONE\",\n-                                        \"value\": \"ONE\"\n+                                        \"description\": \"Change the cardinality of input elements to create the output JSON.\",\n+                                        \"displayName\": \"Cardinality\",\n+                                        \"value\": \"jolt-transform-card\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TWO\",\n-                                        \"value\": \"TWO\"\n+                                        \"description\": \"Execute list of Jolt transformations.\",\n+                                        \"displayName\": \"Chain\",\n+                                        \"value\": \"jolt-transform-chain\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"THREE\",\n-                                        \"value\": \"THREE\"\n+                                        \"description\": \" Apply default values to the output JSON.\",\n+                                        \"displayName\": \"Default\",\n+                                        \"value\": \"jolt-transform-default\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"QUORUM\",\n-                                        \"value\": \"QUORUM\"\n+                                        \"description\": \"Writes when key is missing or value is null\",\n+                                        \"displayName\": \"Modify - Default\",\n+                                        \"value\": \"jolt-transform-modify-default\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ALL\",\n-                                        \"value\": \"ALL\"\n+                                        \"description\": \"Writes when key is missing\",\n+                                        \"displayName\": \"Modify - Define\",\n+                                        \"value\": \"jolt-transform-modify-define\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_QUORUM\",\n-                                        \"value\": \"LOCAL_QUORUM\"\n+                                        \"description\": \" Always overwrite value\",\n+                                        \"displayName\": \"Modify - Overwrite\",\n+                                        \"value\": \"jolt-transform-modify-overwrite\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EACH_QUORUM\",\n-                                        \"value\": \"EACH_QUORUM\"\n+                                        \"description\": \" Remove values from input data to create the output JSON.\",\n+                                        \"displayName\": \"Remove\",\n+                                        \"value\": \"jolt-transform-remove\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SERIAL\",\n-                                        \"value\": \"SERIAL\"\n+                                        \"description\": \"Shift input JSON/data to create the output JSON.\",\n+                                        \"displayName\": \"Shift\",\n+                                        \"value\": \"jolt-transform-shift\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_SERIAL\",\n-                                        \"value\": \"LOCAL_SERIAL\"\n+                                        \"description\": \"Sort input json key values alphabetically. Any specification set is ignored.\",\n+                                        \"displayName\": \"Sort\",\n+                                        \"value\": \"jolt-transform-sort\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_ONE\",\n-                                        \"value\": \"LOCAL_ONE\"\n+                                        \"description\": \"Custom Transformation. Requires Custom Transformation Class Name\",\n+                                        \"displayName\": \"Custom\",\n+                                        \"value\": \"jolt-transform-custom\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ONE\",\n-                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n-                                \"displayName\": \"Consistency Level\",\n+                                \"defaultValue\": \"jolt-transform-chain\",\n+                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n+                                \"displayName\": \"Jolt Transformation DSL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Consistency Level\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Keyspace\": {\n-                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor exposes the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n-                                \"displayName\": \"Keyspace\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Keyspace\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running CQL select query. Must be of format <duration> <TimeUnit> where <duration> is a non-negative integer and TimeUnit is a supported Time Unit, such as: nanos, millis, secs, mins, hrs, days. A value of zero means there is no limit. \",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n+                                \"name\": \"jolt-transform\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Cassandra cluster\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Cassandra cluster\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cassandra-connection-provider\": {\n-                                \"description\": \"Specifies the Cassandra connection providing controller service to be used to connect to Cassandra cluster.\",\n-                                \"displayName\": \"Cassandra Connection Provider\",\n+                            \"pretty_print\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Apply pretty print formatting to the output of the Jolt transform\",\n+                                \"displayName\": \"Pretty Print\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cassandra-connection-provider\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"putcql-stmt-cache-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of CQL Prepared Statements to cache. This can improve performance if many incoming flow files have the same CQL statement with different values for the parameters. If this property is set to zero, the cache is effectively disabled.\",\n-                                \"displayName\": \"Statement Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"putcql-stmt-cache-size\",\n+                                \"name\": \"pretty_print\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parameterized CQL statements. The type of each parameter is specified as a lowercase string corresponding to the Cassandra data type (text, int, boolean, e.g.). In the case of collections, the primitive type(s) of the elements in the collection should be comma-delimited, follow the collection type, and be enclosed in angle brackets (< and >), for example set<text> or map<timestamp, int>.\",\n-                                \"name\": \"cql.args.N.type\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parameterized CQL statements. The value of the parameters are specified as cql.args.1.value, cql.args.2.value, cql.args.3.value, and so on. The  type of the cql.args.1.value parameter is specified by the cql.args.1.type attribute.\",\n-                                \"name\": \"cql.args.N.value\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation cannot be completed but attempting it again may succeed.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation completed successfully.\",\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation failed.\",\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON), it will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"cassandra\",\n-                            \"cql\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"set\",\n-                            \"update\"\n+                            \"cardinality\",\n+                            \"chainr\",\n+                            \"defaultr\",\n+                            \"jolt\",\n+                            \"json\",\n+                            \"removr\",\n+                            \"shiftr\",\n+                            \"sort\",\n+                            \"transform\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cassandra.PutCassandraQL\",\n-                        \"typeDescription\": \"Execute provided Cassandra Query Language (CQL) statement on a Cassandra 1.x, 2.x, or 3.0.x cluster. The content of an incoming FlowFile is expected to be the CQL command to execute. The CQL command may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention cql.args.N.type and cql.args.N.value, where N is a positive integer. The cql.args.N.type is expected to be a lowercase string indicating the Cassandra type.\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.JoltTransformJSON\",\n+                        \"typeDescription\": \"Applies a list of Jolt specifications to the flowfile JSON payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the JSON transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Always set to application/json\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cassandra-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"DataStax 3 driver for Cassandra is no longer the current version and requires new components.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Cassandra Contact Points\": {\n-                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n-                                \"displayName\": \"Cassandra Contact Points\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Cassandra Contact Points\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Client Auth\": {\n+                            \"list-db-include-count\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to include the table's row count as a flow file attribute. This affects performance as a database query will be generated for each table in the retrieved list.\",\n+                                \"displayName\": \"Include Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n-                                \"required\": false,\n+                                \"name\": \"list-db-include-count\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Consistency Level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SERIAL\",\n-                                        \"value\": \"SERIAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_SERIAL\",\n-                                        \"value\": \"LOCAL_SERIAL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SERIAL\",\n-                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n-                                \"displayName\": \"Consistency Level\",\n+                            \"list-db-refresh-interval\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The amount of time to elapse before resetting the processor state, thereby causing all current tables to be listed. During this interval, the processor may continue to run, but tables that have already been listed will not be re-listed. However new/added tables will be listed as the processor runs. A value of zero means the state will never be automatically reset, the user must Clear State manually.\",\n+                                \"displayName\": \"Refresh Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Consistency Level\",\n-                                \"required\": false,\n+                                \"name\": \"list-db-refresh-interval\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Keyspace\": {\n-                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor exposes the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n-                                \"displayName\": \"Keyspace\",\n+                            \"list-db-tables-catalog\": {\n+                                \"description\": \"The name of a catalog from which to list database tables. The name must match the catalog name as it is stored in the database. If the property is not set, the catalog name will not be used to narrow the search for tables. If the property is set to an empty string, tables without a catalog will be listed.\",\n+                                \"displayName\": \"Catalog\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Keyspace\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"list-db-tables-catalog\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Cassandra cluster\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"list-db-tables-db-connection\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"list-db-tables-db-connection\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Cassandra cluster\",\n-                                \"displayName\": \"Username\",\n+                            \"list-db-tables-name-pattern\": {\n+                                \"description\": \"A pattern for matching tables in the database. Within a pattern, \\\"%\\\" means match any substring of 0 or more characters, and \\\"_\\\" means match any one character. The pattern must match the table name as it is stored in the database. If the property is not set, all tables will be retrieved.\",\n+                                \"displayName\": \"Table Name Pattern\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"list-db-tables-name-pattern\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cassandra-connection-provider\": {\n-                                \"description\": \"Specifies the Cassandra connection providing controller service to be used to connect to Cassandra cluster.\",\n-                                \"displayName\": \"Cassandra Connection Provider\",\n+                            \"list-db-tables-schema-pattern\": {\n+                                \"description\": \"A pattern for matching schemas in the database. Within a pattern, \\\"%\\\" means match any substring of 0 or more characters, and \\\"_\\\" means match any one character. The pattern must match the schema name as it is stored in the database. If the property is not set, the schema name will not be used to narrow the search for tables. If the property is set to an empty string, tables without a schema will be listed.\",\n+                                \"displayName\": \"Schema Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cassandra-connection-provider\",\n+                                \"name\": \"list-db-tables-schema-pattern\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"put-cassandra-record-batch-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies the number of 'Insert statements' to be grouped together to execute as a batch (BatchStatement)\",\n-                                \"displayName\": \"Batch size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"put-cassandra-record-batch-size\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-cassandra-record-batch-statement-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use a LOGGED batch statement\",\n-                                        \"displayName\": \"LOGGED\",\n-                                        \"value\": \"LOGGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use an UNLOGGED batch statement\",\n-                                        \"displayName\": \"UNLOGGED\",\n-                                        \"value\": \"UNLOGGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use a COUNTER batch statement\",\n-                                        \"displayName\": \"COUNTER\",\n-                                        \"value\": \"COUNTER\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The value of the cql.batch.statement.type Attribute will be used to determine which type of batch statement (LOGGED, UNLOGGED or COUNTER) will be used to generate and execute the Update statement.\",\n-                                        \"displayName\": \"Use cql.batch.statement.type Attribute\",\n-                                        \"value\": \"USE_ATTR\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"LOGGED\",\n-                                \"description\": \"Specifies the type of 'Batch Statement' to be used.\",\n-                                \"displayName\": \"Batch Statement Type\",\n+                            \"list-db-tables-types\": {\n+                                \"defaultValue\": \"TABLE\",\n+                                \"description\": \"A comma-separated list of table types to include. For example, some databases support TABLE and VIEW types. If the property is not set, tables of all types will be returned.\",\n+                                \"displayName\": \"Table Types\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-cassandra-record-batch-statement-type\",\n+                                \"name\": \"list-db-tables-types\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-cassandra-record-reader\": {\n-                                \"description\": \"Specifies the type of Record Reader controller service to use for parsing the incoming data and determining the schema\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-cassandra-record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"put-cassandra-record-statement-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use an UPDATE statement.\",\n-                                        \"displayName\": \"UPDATE\",\n-                                        \"value\": \"UPDATE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use an INSERT statement.\",\n-                                        \"displayName\": \"INSERT\",\n-                                        \"value\": \"INSERT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The value of the cql.statement.type Attribute will be used to determine which type of statement (UPDATE, INSERT) will be generated and executed\",\n-                                        \"displayName\": \"Use cql.statement.type Attribute\",\n-                                        \"value\": \"USE_ATTR\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"INSERT\",\n-                                \"description\": \"Specifies the type of CQL Statement to generate.\",\n-                                \"displayName\": \"Statement Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-cassandra-record-statement-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-cassandra-record-table\": {\n-                                \"description\": \"The name of the Cassandra table to which the records have to be written.\",\n-                                \"displayName\": \"Table name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-cassandra-record-table\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-cassandra-record-update-keys\": {\n-                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the conversion to CQL will fail. This property is ignored if the Statement Type is not UPDATE.\",\n-                                \"displayName\": \"Update Keys\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-cassandra-record-update-keys\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-cassandra-record-update-method\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use an increment operation (+=) for the Update statement.\",\n-                                        \"displayName\": \"Increment\",\n-                                        \"value\": \"INCREMENT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use a decrement operation (-=) for the Update statement.\",\n-                                        \"displayName\": \"Decrement\",\n-                                        \"value\": \"DECREMENT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use a set operation (=) for the Update statement.\",\n-                                        \"displayName\": \"Set\",\n-                                        \"value\": \"SET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The value of the cql.update.method Attribute will be used to determine which operation (Set, Increment, Decrement) will be used to generate and execute the Update statement.\",\n-                                        \"displayName\": \"Use cql.update.method Attribute\",\n-                                        \"value\": \"USE_ATTR\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SET\",\n-                                \"description\": \"Specifies the method to use to SET the values. This property is used if the Statement Type is UPDATE and ignored otherwise.\",\n-                                \"displayName\": \"Update Method\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-cassandra-record-update-method\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If 'Use cql.statement.type Attribute' is selected for the Statement Type property, the value of the cql.statement.type Attribute will be used to determine which type of statement (UPDATE, INSERT) will be generated and executed\",\n-                                \"name\": \"cql.statement.type\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Use cql.update.method Attribute' is selected for the Update Method property, the value of the cql.update.method Attribute will be used to determine which operation (Set, Increment, Decrement) will be used to generate and execute the Update statement. Ignored if the Statement Type property is not set to UPDATE\",\n-                                \"name\": \"cql.update.method\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Use cql.batch.statement.type Attribute' is selected for the Batch Statement Type property, the value of the cql.batch.statement.type Attribute will be used to determine which type of batch statement (LOGGED, UNLOGGED, COUNTER) will be generated and executed\",\n-                                \"name\": \"cql.batch.statement.type\"\n-                            }\n-                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of tables, the timestamp of the query is stored. This allows the Processor to not re-list tables the next time that the Processor is run. Specifying the refresh interval in the processor properties will indicate that when the processor detects the interval has elapsed, the state will be reset and tables will be re-listed as a result. This processor is meant to be run on the primary node only.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation completed successfully.\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation failed.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cassandra\",\n-                            \"cql\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"record\",\n-                            \"set\",\n-                            \"update\"\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"list\",\n+                            \"sql\",\n+                            \"table\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cassandra.PutCassandraRecord\",\n-                        \"typeDescription\": \"This is a record aware processor that reads the content of the incoming FlowFile as individual records using the configured 'Record Reader' and writes them to Apache Cassandra using native protocol version 3 or higher.\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.ListDatabaseTables\",\n+                        \"typeDescription\": \"Generates a set of flow files, each containing attributes corresponding to metadata about a table from a database connection. Once metadata about a table has been fetched, it will not be fetched again until the Refresh Interval (if set) has elapsed, or until state has been manually cleared.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Contains the name of a database table from the connection\",\n+                                \"name\": \"db.table.name\"\n+                            },\n+                            {\n+                                \"description\": \"Contains the name of the catalog to which the table belongs (may be null)\",\n+                                \"name\": \"db.table.catalog\"\n+                            },\n+                            {\n+                                \"description\": \"Contains the name of the schema to which the table belongs (may be null)\",\n+                                \"name\": \"db.table.schema\"\n+                            },\n+                            {\n+                                \"description\": \"Contains the fully-qualifed table name (possibly including catalog, schema, etc.)\",\n+                                \"name\": \"db.table.fullname\"\n+                            },\n+                            {\n+                                \"description\": \"Contains the type of the database table from the connection. Typical types are \\\"TABLE\\\", \\\"VIEW\\\", \\\"SYSTEM TABLE\\\", \\\"GLOBAL TEMPORARY\\\", \\\"LOCAL TEMPORARY\\\", \\\"ALIAS\\\", \\\"SYNONYM\\\"\",\n+                                \"name\": \"db.table.type\"\n+                            },\n+                            {\n+                                \"description\": \"Contains the name of a database table from the connection\",\n+                                \"name\": \"db.table.remarks\"\n+                            },\n+                            {\n+                                \"description\": \"Contains the number of rows in the table\",\n+                                \"name\": \"db.table.count\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cassandra-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"DataStax 3 driver for Cassandra is no longer the current version and requires new components.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"CQL select query\": {\n-                                \"description\": \"CQL select query\",\n-                                \"displayName\": \"CQL select query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"CQL select query\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Cassandra Contact Points\": {\n-                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n-                                \"displayName\": \"Cassandra Contact Points\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Cassandra Contact Points\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the record data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Client Auth\": {\n+                            \"Connection Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n+                                \"name\": \"Connection Mode\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Compression Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Enable compression at transport-level requests and responses\",\n-                                \"displayName\": \"Compression Type\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Type\",\n-                                \"required\": false,\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Consistency Level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ANY\",\n-                                        \"value\": \"ANY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ONE\",\n-                                        \"value\": \"ONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TWO\",\n-                                        \"value\": \"TWO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"THREE\",\n-                                        \"value\": \"THREE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"QUORUM\",\n-                                        \"value\": \"QUORUM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ALL\",\n-                                        \"value\": \"ALL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_QUORUM\",\n-                                        \"value\": \"LOCAL_QUORUM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EACH_QUORUM\",\n-                                        \"value\": \"EACH_QUORUM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SERIAL\",\n-                                        \"value\": \"SERIAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_SERIAL\",\n-                                        \"value\": \"LOCAL_SERIAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_ONE\",\n-                                        \"value\": \"LOCAL_ONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ONE\",\n-                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n-                                \"displayName\": \"Consistency Level\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Consistency Level\",\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"NOTE: This property is used merely for migration from old NiFi version before state management was introduced at version 0.5.0. The stored value in the cache service will be migrated into the state when this processor is started at the first time. The specified Controller Service was used to maintain state about what had been pulled from the remote server so that if a new node begins pulling data, it won't duplicate all of the work that has been done. If not specified, the information was not shared across the cluster. This property did not need to be set for standalone instances of NiFi but was supposed to be configured if NiFi had been running within a cluster.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"File Filter Regex\": {\n+                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Fetch size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of result rows to be fetched from the result set at a time. Zero is the default and means there is no limit.\",\n-                                \"displayName\": \"Fetch size\",\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Fetch size\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Keyspace\": {\n-                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor exposes the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n-                                \"displayName\": \"Keyspace\",\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Keyspace\",\n+                                \"name\": \"Http Proxy Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Max Rows Per Flow File\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n-                                \"displayName\": \"Max Rows Per Flow File\",\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Max Rows Per Flow File\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running CQL select query. Must be of format <duration> <TimeUnit> where <duration> is a non-negative integer and TimeUnit is a supported Time Unit, such as: nanos, millis, secs, mins, hrs, days. A value of zero means there is no limit. \",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n-                                \"required\": true,\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Format\": {\n+                            \"Ignore Dotted Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Avro\",\n-                                        \"value\": \"Avro\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"JSON\",\n-                                        \"value\": \"JSON\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Avro\",\n-                                \"description\": \"The format to which the result rows will be converted. If JSON is selected, the output will contain an object with field 'results' containing an array of result rows. Each row in the array is a map of the named column to its value. For example: { \\\"results\\\": [{\\\"userid\\\":1, \\\"name\\\":\\\"Joe Smith\\\"}]}\",\n-                                \"displayName\": \"Output Format\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Format\",\n+                                \"name\": \"Ignore Dotted Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n+                            \"Internal Buffer Size\": {\n+                                \"defaultValue\": \"16KB\",\n+                                \"description\": \"Set the internal buffer size for buffered data streams\",\n+                                \"displayName\": \"Internal Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Internal Buffer Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n                             \"Password\": {\n-                                \"description\": \"Password to access the Cassandra cluster\",\n+                                \"description\": \"Password for the user account\",\n                                 \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n                                 \"name\": \"Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Path Filter Regex\": {\n+                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n+                                \"displayName\": \"Path Filter Regex\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"Path Filter Regex\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Cassandra cluster\",\n-                                \"displayName\": \"Username\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"21\",\n+                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cassandra-connection-provider\": {\n-                                \"description\": \"Specifies the Cassandra connection providing controller service to be used to connect to Cassandra cluster.\",\n-                                \"displayName\": \"Cassandra Connection Provider\",\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cassandra-connection-provider\",\n+                                \"name\": \"Proxy Type\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"qdbt-output-batch-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n-                                \"displayName\": \"Output Batch Size\",\n+                            \"Remote Path\": {\n+                                \"defaultValue\": \".\",\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"qdbt-output-batch-size\",\n-                                \"required\": true,\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"timestamp-format-pattern\": {\n-                                \"defaultValue\": \"yyyy-MM-dd HH:mm:ssZ\",\n-                                \"description\": \"Pattern to use when converting timestamp fields to JSON. Note: the formatted timestamp will be in UTC timezone.\",\n-                                \"displayName\": \"Timestamp Format Pattern for JSON output\",\n+                            \"Remote Poll Batch Size\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n+                                \"displayName\": \"Remote Poll Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"timestamp-format-pattern\",\n+                                \"name\": \"Remote Poll Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation cannot be completed but attempting it again may succeed.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation completed successfully.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation failed.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cassandra\",\n-                            \"cql\",\n-                            \"select\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cassandra.QueryCassandra\",\n-                        \"typeDescription\": \"Execute provided Cassandra Query Language (CQL) select query on a Cassandra 1.x, 2.x, or 3.0.x cluster. Query result may be converted to Avro or JSON format. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query. FlowFile attribute 'executecql.row.count' indicates how many rows were selected.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of rows returned by the CQL query\",\n-                                \"name\": \"executecql.row.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"fragment.count\"\n                             },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-gcp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"The default configuration can read environment variables and system properties for credentials\",\n-                                \"requiredPermission\": \"access environment credentials\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"application-default-credentials\": {\n+                            \"Search Recursively\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, uses Google Application Default Credentials, which checks the GOOGLE_APPLICATION_CREDENTIALS environment variable for a filepath to a service account JSON key, the config generated by the gcloud sdk, the App Engine service account, and the Compute Engine service account.\",\n-                                \"displayName\": \"Use Application Default Credentials\",\n+                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"application-default-credentials\",\n-                                \"required\": false,\n+                                \"name\": \"Search Recursively\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compute-engine-credentials\": {\n+                            \"Transfer Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, uses Google Compute Engine Credentials of the Compute Engine VM Instance which NiFi is running on.\",\n-                                \"displayName\": \"Use Compute Engine Credentials\",\n+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compute-engine-credentials\",\n+                                \"name\": \"Transfer Mode\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"service-account-json\": {\n-                                \"description\": \"The raw JSON containing a Service Account keyfile.\",\n-                                \"displayName\": \"Service Account JSON\",\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"service-account-json\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"service-account-json-file\": {\n-                                \"description\": \"Path to a file containing a Service Account key file in JSON format.\",\n-                                \"displayName\": \"Service Account JSON File\",\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-account-json-file\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                \"version\": \"1.27.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"credentials\",\n-                            \"gcp\",\n-                            \"provider\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.processors.gcp.credentials.service.GCPCredentialsControllerService\",\n-                        \"typeDescription\": \"Defines credentials for Google Cloud Platform processors. Uses Application Default credentials without configuration. Application Default credentials support environmental variable (GOOGLE_APPLICATION_CREDENTIALS) pointing to a credential file, the config generated by `gcloud auth application-default login`, AppEngine/Compute Engine service accounts, etc.\",\n-                        \"version\": \"1.27.0\"\n-                    }\n-                ],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            },\n+                            \"et-state-cache\": {\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n-                                \"required\": true,\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"bigquery-api-endpoint\": {\n-                                \"defaultValue\": \"bigquerystorage.googleapis.com:443\",\n-                                \"description\": \"Can be used to override the default BigQuery endpoint. Default is bigquerystorage.googleapis.com:443. Format must be hostname:port.\",\n-                                \"displayName\": \"BigQuery API Endpoint\",\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bigquery-api-endpoint\",\n-                                \"required\": true,\n+                                \"name\": \"et-time-window\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.append.record.count\": {\n-                                \"defaultValue\": \"20\",\n-                                \"description\": \"The number of records to be appended to the write stream at once. Applicable for both batch and stream types\",\n-                                \"displayName\": \"Append Record Count\",\n+                            \"follow-symlink\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n+                                \"displayName\": \"Follow symlink\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.append.record.count\",\n+                                \"name\": \"follow-symlink\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.dataset\": {\n-                                \"defaultValue\": \"${bq.dataset}\",\n-                                \"description\": \"BigQuery dataset name (Note - The dataset must exist in GCP)\",\n-                                \"displayName\": \"Dataset\",\n+                            \"ftp-use-utf8\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n+                                \"displayName\": \"Use UTF-8 Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.dataset\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ftp-use-utf8\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.record.reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"listing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n+                                        \"displayName\": \"Time Window\",\n+                                        \"value\": \"time-window\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.record.reader\",\n+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"bq.skip.invalid.rows\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Sets whether to insert all valid rows of a request, even if invalid rows exist. If not set the entire insert request will fail if it contains an invalid row.\",\n-                                \"displayName\": \"Skip Invalid Rows\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.skip.invalid.rows\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bq.table.name\": {\n-                                \"defaultValue\": \"${bq.table.name}\",\n-                                \"description\": \"BigQuery table name\",\n-                                \"displayName\": \"Table Name\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.table.name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"bq.transfer.type\": {\n+                            \"target-system-timestamp-precision\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use streaming record handling strategy\",\n-                                        \"displayName\": \"STREAM\",\n-                                        \"value\": \"STREAM\"\n+                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n+                                        \"displayName\": \"Auto Detect\",\n+                                        \"value\": \"auto-detect\"\n                                     },\n                                     {\n-                                        \"description\": \"Use batching record handling strategy\",\n-                                        \"displayName\": \"BATCH\",\n-                                        \"value\": \"BATCH\"\n+                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n+                                        \"displayName\": \"Milliseconds\",\n+                                        \"value\": \"millis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n+                                        \"displayName\": \"Seconds\",\n+                                        \"value\": \"seconds\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that only supports precision in minutes.\",\n+                                        \"displayName\": \"Minutes\",\n+                                        \"value\": \"minutes\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"STREAM\",\n-                                \"description\": \"Defines the preferred transfer type streaming or batching\",\n-                                \"displayName\": \"Transfer Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.transfer.type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n+                                \"displayName\": \"Target System Timestamp Precision\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n+                                \"name\": \"target-system-timestamp-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryBatch\",\n-                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryStreaming\"\n+                            \"org.apache.nifi.processors.standard.FetchFTP\",\n+                            \"org.apache.nifi.processors.standard.GetFTP\",\n+                            \"org.apache.nifi.processors.standard.PutFTP\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node will not duplicate the data that was listed by the previous Primary Node.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"bigquery\",\n-                            \"bq\",\n-                            \"google\",\n-                            \"google cloud\"\n+                            \"files\",\n+                            \"ftp\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"list\",\n+                            \"remote\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.bigquery.PutBigQuery\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to a Google BigQuery table. The processor is record based so the schema that is used is driven by the RecordReader. Attributes that are not matched to the target schema are skipped. Exactly once delivery semantics are achieved via stream offsets.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListFTP\",\n+                        \"typeDescription\": \"Performs a listing of the files residing on an FTP server. For each file that is found on the remote server, a new FlowFile will be created with the filename attribute set to the name of the file on the remote server. This can then be used in conjunction with FetchFTP in order to fetch those files.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Number of records successfully inserted\",\n-                                \"name\": \"bq.records.count\"\n+                                \"description\": \"The hostname of the FTP Server\",\n+                                \"name\": \"ftp.remote.host\"\n+                            },\n+                            {\n+                                \"description\": \"The port that was connected to on the FTP Server\",\n+                                \"name\": \"ftp.remote.port\"\n+                            },\n+                            {\n+                                \"description\": \"The username of the user that performed the FTP Listing\",\n+                                \"name\": \"ftp.listing.user\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes in the source file\",\n+                                \"name\": \"file.size\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file in the filesystem waslast modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file on the FTP Server\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The fully qualified name of the directory on the FTP Server from which the file was pulled\",\n+                                \"name\": \"path\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQuery\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"File Filter\": {\n+                                \"defaultValue\": \"[^\\\\.].*\",\n+                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n+                                \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"File Filter\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"bq.avro.use.logical.types\": {\n+                            \"Ignore Hidden Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If format is set to Avro and if this option is set to true, you can interpret logical types into their corresponding types (such as TIMESTAMP) instead of only using their raw types (such as INTEGER).\",\n-                                \"displayName\": \"Avro Input - Use Logical Types\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n+                                \"displayName\": \"Ignore Hidden Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.avro.use.logical.types\",\n+                                \"name\": \"Ignore Hidden Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.csv.allow.jagged.rows\": {\n+                            \"Include File Attributes\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Set whether BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. By default, rows with missing trailing columns are considered bad records.\",\n-                                \"displayName\": \"CSV Input - Allow Jagged Rows\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to include information such as the file's Last Modified Time and Owner as FlowFile Attributes. Depending on the File System being used, gathering this information can be expensive and as a result should be disabled. This is especially true of remote file shares.\",\n+                                \"displayName\": \"Include File Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.csv.allow.jagged.rows\",\n+                                \"name\": \"Include File Attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.csv.allow.quoted.new.lines\": {\n+                            \"Input Directory\": {\n+                                \"description\": \"The input directory from which files to pull files\",\n+                                \"displayName\": \"Input Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Input Directory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Input Directory Location\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Input Directory is located on a local disk. State will be stored locally on each node in the cluster.\",\n+                                        \"displayName\": \"Local\",\n+                                        \"value\": \"Local\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Input Directory is located on a remote system. State will be stored across the cluster so that the listing can be performed on Primary Node Only and another node can pick up where the last node left off, if the Primary Node changes\",\n+                                        \"displayName\": \"Remote\",\n+                                        \"value\": \"Remote\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Sets whether BigQuery should allow quoted data sections that contain newline characters in a CSV file. By default quoted newline are not allowed.\",\n-                                \"displayName\": \"CSV Input - Allow Quoted New Lines\",\n+                                \"defaultValue\": \"Local\",\n+                                \"description\": \"Specifies where the Input Directory is located. This is used to determine whether state should be stored locally or across the cluster.\",\n+                                \"displayName\": \"Input Directory Location\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.csv.allow.quoted.new.lines\",\n+                                \"name\": \"Input Directory Location\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.csv.charset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-8\",\n-                                        \"value\": \"UTF-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-1\",\n-                                        \"value\": \"ISO-8859-1\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Sets the character encoding of the data.\",\n-                                \"displayName\": \"CSV Input - Character Set\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.csv.charset\",\n-                                \"required\": true,\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.csv.delimiter\": {\n-                                \"defaultValue\": \",\",\n-                                \"description\": \"Sets the separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence \\\"\\t\\\" to specify a tab separator. The default value is a comma (',').\",\n-                                \"displayName\": \"CSV Input - Field Delimiter\",\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.csv.delimiter\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.csv.quote\": {\n-                                \"defaultValue\": \"\\\"\",\n-                                \"description\": \"Sets the value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('\\\"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the Allow Quoted New Lines property to true.\",\n-                                \"displayName\": \"CSV Input - Quote\",\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.csv.quote\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.csv.skip.leading.rows\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Sets the number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.\",\n-                                \"displayName\": \"CSV Input - Skip Leading Rows\",\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.csv.skip.leading.rows\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.dataset\": {\n-                                \"defaultValue\": \"${bq.dataset}\",\n-                                \"description\": \"BigQuery dataset name (Note - The dataset must exist in GCP)\",\n-                                \"displayName\": \"Dataset\",\n+                            \"Path Filter\": {\n+                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n+                                \"displayName\": \"Path Filter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.dataset\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Path Filter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.load.create_disposition\": {\n+                            \"Recurse Subdirectories\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Configures the job to create the table if it does not exist.\",\n-                                        \"displayName\": \"CREATE_IF_NEEDED\",\n-                                        \"value\": \"CREATE_IF_NEEDED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Configures the job to fail with a not-found error if the table does not exist.\",\n-                                        \"displayName\": \"CREATE_NEVER\",\n-                                        \"value\": \"CREATE_NEVER\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"CREATE_IF_NEEDED\",\n-                                \"description\": \"Sets whether the job is allowed to create new tables\",\n-                                \"displayName\": \"Create Disposition\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.load.create_disposition\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bq.load.ignore_unknown\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Sets whether BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. By default unknown values are not allowed.\",\n-                                \"displayName\": \"Ignore Unknown Values\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.load.ignore_unknown\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bq.load.max_badrecords\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Sets the maximum number of bad records that BigQuery can ignore when running the job. If the number of bad records exceeds this value, an invalid error is returned in the job result. By default no bad record is ignored.\",\n-                                \"displayName\": \"Max Bad Records\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether to list files from subdirectories of the directory\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.load.max_badrecords\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bq.load.type\": {\n-                                \"description\": \"Data type of the file to be loaded. Possible values: AVRO, NEWLINE_DELIMITED_JSON, CSV.\",\n-                                \"displayName\": \"Load file type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.load.type\",\n+                                \"name\": \"Recurse Subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.load.write_disposition\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Configures the job to fail with a duplicate error if the table already exists.\",\n-                                        \"displayName\": \"WRITE_EMPTY\",\n-                                        \"value\": \"WRITE_EMPTY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Configures the job to append data to the table if it already exists.\",\n-                                        \"displayName\": \"WRITE_APPEND\",\n-                                        \"value\": \"WRITE_APPEND\"\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n-                                        \"description\": \"Configures the job to overwrite the table data if table already exists.\",\n-                                        \"displayName\": \"WRITE_TRUNCATE\",\n-                                        \"value\": \"WRITE_TRUNCATE\"\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"WRITE_EMPTY\",\n-                                \"description\": \"Sets the action that should occur if the destination table already exists.\",\n-                                \"displayName\": \"Write Disposition\",\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.load.write_disposition\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bq.readtimeout\": {\n-                                \"defaultValue\": \"5 minutes\",\n-                                \"description\": \"Load Job Time Out\",\n-                                \"displayName\": \"Read Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.readtimeout\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.table.name\": {\n-                                \"defaultValue\": \"${bq.table.name}\",\n-                                \"description\": \"BigQuery table name\",\n-                                \"displayName\": \"Table Name\",\n+                            \"et-node-identifier\": {\n+                                \"defaultValue\": \"${hostname()}\",\n+                                \"description\": \"The configured value will be appended to the cache key so that listing state can be tracked per NiFi node rather than cluster wide when tracking state is scoped to LOCAL. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Node Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.table.name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-node-identifier\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.table.schema\": {\n-                                \"description\": \"BigQuery schema in JSON format\",\n-                                \"displayName\": \"Table Schema\",\n+                            \"et-state-cache\": {\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.table.schema\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-state-cache\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-host\": {\n-                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n-                                \"displayName\": \"Proxy host\",\n+                            \"listing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-host\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-port\": {\n-                                \"description\": \"Proxy port number\",\n-                                \"displayName\": \"Proxy port\",\n+                            \"max-listing-time\": {\n+                                \"defaultValue\": \"3 mins\",\n+                                \"description\": \"The maximum amount of time that listing any single directory is expected to take. If the listing for the directory specified by the 'Input Directory' property, or the listing of any subdirectory (if 'Recurse' is set to true) takes longer than this amount of time, a warning bulletin will be generated for each directory listing that exceeds this amount of time.\",\n+                                \"displayName\": \"Max Directory Listing Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-port\",\n+                                \"name\": \"max-listing-time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-name\": {\n-                                \"description\": \"HTTP Proxy Username\",\n-                                \"displayName\": \"HTTP Proxy Username\",\n+                            \"max-operation-time\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The maximum amount of time that any single disk operation is expected to take. If any disk operation takes longer than this amount of time, a warning bulletin will be generated for each operation that exceeds this amount of time.\",\n+                                \"displayName\": \"Max Disk Operation Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-name\",\n+                                \"name\": \"max-operation-time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-password\": {\n-                                \"description\": \"HTTP Proxy Password\",\n-                                \"displayName\": \"HTTP Proxy Password\",\n+                            \"max-performance-metrics\": {\n+                                \"defaultValue\": \"100000\",\n+                                \"description\": \"If the 'Track Performance' property is set to 'true', this property indicates the maximum number of files whose performance metrics should be held onto. A smaller value for this property will result in less heap utilization, while a larger value may provide more accurate insights into how the disk access operations are performing\",\n+                                \"displayName\": \"Maximum Number of Files to Track\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n+                                \"name\": \"max-performance-metrics\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"target-system-timestamp-precision\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n+                                        \"displayName\": \"Auto Detect\",\n+                                        \"value\": \"auto-detect\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n+                                        \"displayName\": \"Milliseconds\",\n+                                        \"value\": \"millis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n+                                        \"displayName\": \"Seconds\",\n+                                        \"value\": \"seconds\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that only supports precision in minutes.\",\n+                                        \"displayName\": \"Minutes\",\n+                                        \"value\": \"minutes\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n+                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"target-system-timestamp-precision\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"track-performance\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not the Processor should track the performance of disk access operations. If true, all accesses to disk will be recorded, including the file being accessed, the information being obtained, and how long it takes. This is then logged periodically at a DEBUG level. While the amount of data will be capped, this option may still consume a significant amount of heap (controlled by the 'Maximum Number of Files to Track' property), but it can be very useful for troubleshooting purposes if performance is poor is degraded.\",\n+                                \"displayName\": \"Track Performance\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"track-performance\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n+                            \"org.apache.nifi.processors.standard.FetchFile\",\n+                            \"org.apache.nifi.processors.standard.GetFile\",\n+                            \"org.apache.nifi.processors.standard.PutFile\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. Whether the state is stored with a Local or Cluster scope depends on the value of the <Input Directory Location> property.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"bigquery\",\n-                            \"bq\",\n-                            \"google\",\n-                            \"google cloud\"\n+                            \"file\",\n+                            \"filesystem\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"list\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryBatch\",\n-                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use PutBigQuery instead. Batch loads flow files content to a Google BigQuery table.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListFile\",\n+                        \"typeDescription\": \"Retrieves a listing of files from the input directory. For each file listed, creates a FlowFile that represents the file so that it can be fetched in conjunction with FetchFile. This Processor is designed to run on Primary Node only in a cluster when 'Input Directory Location' is set to 'Remote'. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all the data. When 'Input Directory Location' is 'Local', the 'Execution' mode can be anything, and synchronization won't happen. Unlike GetFile, this Processor does not delete any data from the local filesystem.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Time load job creation\",\n-                                \"name\": \"bq.job.stat.creation_time\"\n+                                \"description\": \"The name of the file that was read from filesystem.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Time load job ended\",\n-                                \"name\": \"bq.job.stat.end_time\"\n+                                \"description\": \"The path is set to the relative path of the file's directory on filesystem compared to the Input Directory property. For example, if Input Directory is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"/\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"abc/1/2/3/\\\".\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"Time load job started\",\n-                                \"name\": \"bq.job.stat.start_time\"\n+                                \"description\": \"The absolute.path is set to the absolute path of the file's directory on filesystem. For example, if the Input Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"/tmp/\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"/tmp/abc/1/2/3/\\\".\",\n+                                \"name\": \"absolute.path\"\n                             },\n                             {\n-                                \"description\": \"API Link to load job\",\n-                                \"name\": \"bq.job.link\"\n+                                \"description\": \"The user that owns the file in filesystem\",\n+                                \"name\": \"file.owner\"\n                             },\n                             {\n-                                \"description\": \"ID of the BigQuery job\",\n-                                \"name\": \"bq.job.id\"\n+                                \"description\": \"The group that owns the file in filesystem\",\n+                                \"name\": \"file.group\"\n                             },\n                             {\n-                                \"description\": \"Load job error message\",\n-                                \"name\": \"bq.error.message\"\n+                                \"description\": \"The number of bytes in the file in filesystem\",\n+                                \"name\": \"file.size\"\n                             },\n                             {\n-                                \"description\": \"Load job error reason\",\n-                                \"name\": \"bq.error.reason\"\n+                                \"description\": \"The permissions for the file in filesystem. This is formatted as 3 characters for the owner, 3 for the group, and 3 for other users. For example rw-rw-r--\",\n+                                \"name\": \"file.permissions\"\n                             },\n                             {\n-                                \"description\": \"Load job error location\",\n-                                \"name\": \"bq.error.location\"\n+                                \"description\": \"The timestamp of when the file in filesystem was last modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.lastModifiedTime\"\n                             },\n                             {\n-                                \"description\": \"Number of records successfully inserted\",\n-                                \"name\": \"bq.records.count\"\n+                                \"description\": \"The timestamp of when the file in filesystem was last accessed as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.lastAccessTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file in filesystem was created as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.creationTime\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQuery\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Ciphers Allowed\": {\n+                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n+                                \"displayName\": \"Ciphers Allowed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Ciphers Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"bq.dataset\": {\n-                                \"defaultValue\": \"${bq.dataset}\",\n-                                \"description\": \"BigQuery dataset name (Note - The dataset must exist in GCP)\",\n-                                \"displayName\": \"Dataset\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.dataset\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.load.ignore_unknown\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Sets whether BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. By default unknown values are not allowed.\",\n-                                \"displayName\": \"Ignore Unknown Values\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.load.ignore_unknown\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.record.reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"NOTE: This property is used merely for migration from old NiFi version before state management was introduced at version 0.5.0. The stored value in the cache service will be migrated into the state when this processor is started at the first time. The specified Controller Service was used to maintain state about what had been pulled from the remote server so that if a new node begins pulling data, it won't duplicate all of the work that has been done. If not specified, the information was not shared across the cluster. This property did not need to be set for standalone instances of NiFi but was supposed to be configured if NiFi had been running within a cluster.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.record.reader\",\n-                                \"required\": true,\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"bq.skip.invalid.rows\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Sets whether to insert all valid rows of a request, even if invalid rows exist. If not set the entire insert request will fail if it contains an invalid row.\",\n-                                \"displayName\": \"Skip Invalid Rows\",\n+                            \"File Filter Regex\": {\n+                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.skip.invalid.rows\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.table.name\": {\n-                                \"defaultValue\": \"${bq.table.name}\",\n-                                \"description\": \"BigQuery table name\",\n-                                \"displayName\": \"Table Name\",\n+                            \"Host Key File\": {\n+                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n+                                \"displayName\": \"Host Key File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Host Key File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.table.name\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"name\": \"Http Proxy Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"gcp-proxy-host\": {\n-                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n-                                \"displayName\": \"Proxy host\",\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-host\",\n+                                \"name\": \"Http Proxy Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-port\": {\n-                                \"description\": \"Proxy port number\",\n-                                \"displayName\": \"Proxy port\",\n+                            \"Ignore Dotted Files\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ignore Dotted Files\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Key Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n+                                \"displayName\": \"Key Algorithms Allowed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-port\",\n+                                \"name\": \"Key Algorithms Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-name\": {\n-                                \"description\": \"HTTP Proxy Username\",\n-                                \"displayName\": \"HTTP Proxy Username\",\n+                            \"Key Exchange Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n+                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-name\",\n+                                \"name\": \"Key Exchange Algorithms Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-password\": {\n-                                \"description\": \"HTTP Proxy Password\",\n-                                \"displayName\": \"HTTP Proxy Password\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Authentication Codes Allowed\": {\n+                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n+                                \"displayName\": \"Message Authentication Codes Allowed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-password\",\n+                                \"name\": \"Message Authentication Codes Allowed\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"Minimum File Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryBatch\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\n-                                \"name\": \"success\"\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"bigquery\",\n-                            \"bq\",\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"record\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryStreaming\",\n-                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use PutBigQuery instead. Load data into Google BigQuery table using the streaming API. This processor is not intended to load large flow files as it will load the full content into memory. If you need to insert large flow files, consider using PutBigQueryBatch instead.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Number of records successfully inserted\",\n-                                \"name\": \"bq.records.count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Google Doc Export Type\": {\n+                            \"Path Filter Regex\": {\n+                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n+                                \"displayName\": \"Path Filter Regex\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Path Filter Regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"22\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Private Key Passphrase\": {\n+                                \"description\": \"Password for the private key\",\n+                                \"displayName\": \"Private Key Passphrase\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Private Key Path\": {\n+                                \"description\": \"The fully qualified path to the Private Key file\",\n+                                \"displayName\": \"Private Key Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Path\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PDF\",\n-                                        \"value\": \"application/pdf\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Plain Text\",\n-                                        \"value\": \"text/plain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Microsoft Word\",\n-                                        \"value\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OpenDocument\",\n-                                        \"value\": \"application/vnd.oasis.opendocument.text\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Rich Text\",\n-                                        \"value\": \"application/rtf\"\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Web Page (HTML)\",\n-                                        \"value\": \"application/zip\"\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"EPUB\",\n-                                        \"value\": \"application/epub+zip\"\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"application/pdf\",\n-                                \"description\": \"Google Documents cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Document, this property specifies the MIME Type to export the document to.\",\n-                                \"displayName\": \"Google Doc Export Type\",\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Google Doc Export Type\",\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Path\": {\n+                                \"defaultValue\": \".\",\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Poll Batch Size\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n+                                \"displayName\": \"Remote Poll Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Remote Poll Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Google Drawing Export Type\": {\n+                            \"Search Recursively\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PDF\",\n-                                        \"value\": \"application/pdf\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PNG\",\n-                                        \"value\": \"image/png\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JPEG\",\n-                                        \"value\": \"image/jpeg\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SVG\",\n-                                        \"value\": \"image/svg+xml\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"application/pdf\",\n-                                \"description\": \"Google Drawings cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Drawing, this property specifies the MIME Type to export the drawing to.\",\n-                                \"displayName\": \"Google Drawing Export Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Google Drawing Export Type\",\n+                                \"name\": \"Search Recursively\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Google Presentation Export Type\": {\n+                            \"Send Keep Alive On Timeout\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PDF\",\n-                                        \"value\": \"application/pdf\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Microsoft PowerPoint\",\n-                                        \"value\": \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Plain Text\",\n-                                        \"value\": \"text/plain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OpenDocument Presentation\",\n-                                        \"value\": \"application/vnd.oasis.opendocument.presentation\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PNG (first slide only)\",\n-                                        \"value\": \"image/png\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"JPEG (first slide only)\",\n-                                        \"value\": \"image/jpeg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Scalable Vector Graphics. Only the first slide will be exported.\",\n-                                        \"displayName\": \"SVG (first slide only)\",\n-                                        \"value\": \"image/svg+xml\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"application/pdf\",\n-                                \"description\": \"Google Presentations cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Presentation, this property specifies the MIME Type to export the presentation to.\",\n-                                \"displayName\": \"Google Presentation Export Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n+                                \"displayName\": \"Send Keep Alive On Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Google Presentation Export Type\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Google Spreadsheet Export Type\": {\n+                            \"Strict Host Key Checking\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Comma-separated values. Only the first sheet will be exported.\",\n-                                        \"displayName\": \"CSV (first sheet only)\",\n-                                        \"value\": \"text/csv\"\n-                                    },\n-                                    {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Microsoft Excel\",\n-                                        \"value\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PDF\",\n-                                        \"value\": \"application/pdf\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Tab-separate values. Only the first sheet will be exported.\",\n-                                        \"displayName\": \"TSV (first sheet only)\",\n-                                        \"value\": \"text/tab-separated-values\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n+                                \"displayName\": \"Strict Host Key Checking\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Strict Host Key Checking\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Use Compression\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Web Page (HTML)\",\n-                                        \"value\": \"text/html\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"OpenDocument Spreadsheet\",\n-                                        \"value\": \"application/x-vnd.oasis.opendocument.spreadsheet\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"text/csv\",\n-                                \"description\": \"Google Spreadsheets cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Spreadsheet, this property specifies the MIME Type to export the spreadsheet to.\",\n-                                \"displayName\": \"Google Spreadsheet Export Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Google Spreadsheet Export Type\",\n+                                \"name\": \"Use Compression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"drive-file-id\": {\n-                                \"defaultValue\": \"${drive.id}\",\n-                                \"description\": \"The Drive ID of the File to fetch. Please see Additional Details for information on how to obtain the Drive ID.\",\n-                                \"displayName\": \"File ID\",\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"drive-file-id\",\n+                                \"name\": \"Username\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"drive.id\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\",\n-                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"drive\",\n-                            \"fetch\",\n-                            \"google\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n-                        \"typeDescription\": \"Fetches files from a Google Drive Folder. Designed to be used in tandem with ListGoogleDrive. Please see Additional Details to set up access to Google Drive.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"drive.id\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME type of the file\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"drive.size\"\n-                            },\n-                            {\n-                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n-                                \"name\": \"drive.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The error code returned by Google Drive\",\n-                                \"name\": \"error.code\"\n-                            },\n-                            {\n-                                \"description\": \"The error message returned by Google Drive\",\n-                                \"name\": \"error.message\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n-                        \"propertyDescriptors\": {\n                             \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n                                         \"displayName\": \"Tracking Time Window\",\n                                         \"value\": \"window\"\n                                     },\n                                     {\n                                         \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n                                         \"displayName\": \"All Available\",\n                                         \"value\": \"all\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n                                 \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"et-state-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n                                 \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"et-state-cache\",\n                                 \"required\": false,\n@@ -92093,104 +91591,81 @@\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n                             \"et-time-window\": {\n                                 \"defaultValue\": \"3 hours\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n                                 \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"folder-id\": {\n-                                \"description\": \"The ID of the folder from which to pull list of files. Please see Additional Details to set up access to Google Drive and obtain Folder ID. WARNING: Unauthorized access to the folder is treated as if the folder was empty. This results in the processor not creating outgoing FlowFiles. No additional error message is provided.\",\n-                                \"displayName\": \"Folder ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"folder-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"follow-symlink\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n+                                \"displayName\": \"Follow symlink\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"follow-symlink\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n                             \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n                                         \"displayName\": \"Tracking Timestamps\",\n                                         \"value\": \"timestamps\"\n                                     },\n                                     {\n                                         \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n                                         \"displayName\": \"Tracking Entities\",\n                                         \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n-                                        \"displayName\": \"Time Window\",\n-                                        \"value\": \"time-window\"\n-                                    },\n-                                    {\n                                         \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n                                         \"displayName\": \"No Tracking\",\n                                         \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n+                                        \"displayName\": \"Time Window\",\n+                                        \"value\": \"time-window\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"timestamps\",\n                                 \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n                                 \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age a file must be in order to be considered; any files younger than this will be ignored.\",\n-                                \"displayName\": \"Minimum File Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n                             \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n@@ -92213,45 +91688,56 @@\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"recursive-search\": {\n+                            \"target-system-timestamp-precision\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n+                                        \"displayName\": \"Auto Detect\",\n+                                        \"value\": \"auto-detect\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n+                                        \"displayName\": \"Milliseconds\",\n+                                        \"value\": \"millis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n+                                        \"displayName\": \"Seconds\",\n+                                        \"value\": \"seconds\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that only supports precision in minutes.\",\n+                                        \"displayName\": \"Minutes\",\n+                                        \"value\": \"minutes\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When 'true', will include list of files from concrete sub-folders (ignores shortcuts). Otherwise, will return only files that have the defined 'Folder ID' as their parent directly. WARNING: The listing may fail if there are too many sub-folders (500+).\",\n-                                \"displayName\": \"Search Recursively\",\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n+                                \"displayName\": \"Target System Timestamp Precision\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recursive-search\",\n+                                \"name\": \"target-system-timestamp-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n-                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\n+                            \"org.apache.nifi.processors.standard.FetchSFTP\",\n+                            \"org.apache.nifi.processors.standard.GetSFTP\",\n+                            \"org.apache.nifi.processors.standard.PutSFTP\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"stateful\": {\n-                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node will not duplicate the data that was listed by the previous Primary Node.\",\n                             \"scopes\": [\n                                 \"CLUSTER\"\n                             ]\n                         },\n                         \"supportedRelationships\": [\n                             {\n                                 \"description\": \"All FlowFiles that are received are routed to success\",\n@@ -92264,50 +91750,78 @@\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"drive\",\n-                            \"google\",\n-                            \"storage\"\n+                            \"files\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"list\",\n+                            \"remote\",\n+                            \"sftp\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\",\n-                        \"typeDescription\": \"Performs a listing of concrete files (shortcuts are ignored) in a Google Drive folder. If the 'Record Writer' property is set, a single Output FlowFile is created, and each file in the listing is written as a single record to the output file. Otherwise, for each file in the listing, an individual FlowFile is created, the metadata being written as FlowFile attributes. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. Please see Additional Details to set up access to Google Drive.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListSFTP\",\n+                        \"typeDescription\": \"Performs a listing of the files residing on an SFTP server. For each file that is found on the remote server, a new FlowFile will be created with the filename attribute set to the name of the file on the remote server. This can then be used in conjunction with FetchSFTP in order to fetch those files.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"drive.id\"\n+                                \"description\": \"The hostname of the SFTP Server\",\n+                                \"name\": \"sftp.remote.host\"\n                             },\n                             {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The port that was connected to on the SFTP Server\",\n+                                \"name\": \"sftp.remote.port\"\n                             },\n                             {\n-                                \"description\": \"The MIME type of the file\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The username of the user that performed the SFTP Listing\",\n+                                \"name\": \"sftp.listing.user\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"drive.size\"\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n                             },\n                             {\n-                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n-                                \"name\": \"drive.timestamp\"\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes in the source file\",\n+                                \"name\": \"file.size\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file in the filesystem waslast modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file on the SFTP Server\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The fully qualified name of the directory on the SFTP Server from which the file was pulled\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -92316,197 +91830,117 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"chunked-upload-size\": {\n-                                \"defaultValue\": \"10 MB\",\n-                                \"description\": \"Defines the size of a chunk. Used when a FlowFile's size exceeds 'Chunked Upload Threshold' and content is uploaded in smaller chunks. Minimum allowed chunk size is 256 KB, maximum allowed chunk size is 1 GB.\",\n-                                \"displayName\": \"Chunked Upload Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"chunked-upload-threshold\": {\n-                                \"defaultValue\": \"100 MB\",\n-                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks.\",\n-                                \"displayName\": \"Chunked Upload Threshold\",\n+                            \"bind-address\": {\n+                                \"description\": \"The address the FTP server should be bound to. If not set (or set to 0.0.0.0), the server binds to all available addresses (i.e. all network interfaces of the host machine).\",\n+                                \"displayName\": \"Bind Address\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-threshold\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bind-address\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Handle file conflict as failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Ignore conflict, do not change the original file.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Replace existing file in case of conflict.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Google Drive folder.\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The name of the file to upload to the specified Google Drive folder.\",\n-                                \"displayName\": \"Filename\",\n+                            \"listening-port\": {\n+                                \"defaultValue\": \"2221\",\n+                                \"description\": \"The Port to listen on for incoming connections. On Linux, root privileges are required to use port numbers below 1024.\",\n+                                \"displayName\": \"Listening Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"listening-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"folder-id\": {\n-                                \"description\": \"The ID of the shared folder. Please see Additional Details to set up access to Google Drive and obtain Folder ID.\",\n-                                \"displayName\": \"Folder ID\",\n+                            \"password\": {\n+                                \"description\": \"If the Username is set, then a password must also be specified. The password provided by the client trying to log in to the FTP server will be checked against this password.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"folder-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"Specifies the SSL Context Service that can be used to create secure connections. If an SSL Context Service is selected, then a keystore file must also be specified in the SSL Context Service. Without a keystore file, the processor cannot be started successfully.Specifying a truststore file is optional. If a truststore file is specified, client authentication is required (the client needs to send a certificate to the server).Regardless of the selected TLS protocol, the highest available protocol is used for the connection. For example if NiFi is running on Java 11 and TLSv1.2 is selected in the controller service as the preferred TLS Protocol, TLSv1.3 will be used (regardless of TLSv1.2 being selected) because Java 11 supports TLSv1.3.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"username\": {\n+                                \"description\": \"The name of the user that is allowed to log in to the FTP server. If a username is provided, a password must also be provided. If no username is specified, anonymous connections will be permitted.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"username\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the Google Drive object.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n-                            \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to Google Drive are transferred to this relationship.\",\n+                                \"description\": \"Relationship for successfully received files.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that could not be written to Google Drive for some reason are transferred to this relationship.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"drive\",\n-                            \"google\",\n-                            \"put\",\n-                            \"storage\"\n+                            \"FTP\",\n+                            \"FTPS\",\n+                            \"ingest\",\n+                            \"listen\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile as a file in Google Drive.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenFTP\",\n+                        \"typeDescription\": \"Starts an FTP server that listens on the specified port and transforms incoming files into FlowFiles. The URI of the service will be ftp://{hostname}:{port}. The default port is 2221.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"drive.id\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n+                                \"description\": \"The name of the file received via the FTP/FTPS connection.\",\n                                 \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The MIME type of the file\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"drive.size\"\n-                            },\n-                            {\n-                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n-                                \"name\": \"drive.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The error code returned by Google Drive\",\n-                                \"name\": \"error.code\"\n-                            },\n-                            {\n-                                \"description\": \"The error message returned by Google Drive\",\n-                                \"name\": \"error.message\"\n+                                \"description\": \"The path pointing to the file's target directory. E.g.: file.txt is uploaded to /Folder1/SubFolder, then the value of the path attribute will be \\\"/Folder1/SubFolder/\\\" (note that it ends with a separator character).\",\n+                                \"name\": \"path\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -92518,441 +91952,303 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Authorized DN Pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A Regular Expression to apply against the Subject's Distinguished Name of incoming connections. If the Pattern does not match the Subject DN, the the processor will respond with a status of HTTP 403 Forbidden.\",\n+                                \"displayName\": \"Authorized Subject DN Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"Authorized DN Pattern\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"api-endpoint\": {\n-                                \"defaultValue\": \"pubsub.googleapis.com:443\",\n-                                \"description\": \"Override the gRPC endpoint in the form of [host:port]\",\n-                                \"displayName\": \"API Endpoint\",\n+                            \"Base Path\": {\n+                                \"defaultValue\": \"contentListener\",\n+                                \"description\": \"Base path for incoming connections\",\n+                                \"displayName\": \"Base Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"api-endpoint\",\n+                                \"name\": \"Base Path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"HTTP Headers to receive as Attributes (Regex)\": {\n+                                \"description\": \"Specifies the Regular Expression that determines the names of HTTP Headers that should be passed along as FlowFile attributes\",\n+                                \"displayName\": \"HTTP Headers to receive as Attributes (Regex)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"HTTP Headers to receive as Attributes (Regex)\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-publish-batch-size\": {\n-                                \"defaultValue\": \"15\",\n-                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n-                                \"displayName\": \"Batch Size Threshold\",\n+                            \"HTTP Protocols\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"HTTP/1.1\",\n+                                        \"displayName\": \"http/1.1\",\n+                                        \"value\": \"HTTP_1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n+                                        \"displayName\": \"h2 http/1.1\",\n+                                        \"value\": \"H2_HTTP_1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"HTTP/2\",\n+                                        \"displayName\": \"h2\",\n+                                        \"value\": \"H2\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"HTTP_1_1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n+                                    }\n+                                ],\n+                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n+                                \"displayName\": \"HTTP Protocols\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-pubsub-publish-batch-size\",\n+                                \"name\": \"HTTP Protocols\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-subscription\": {\n-                                \"description\": \"Name of the Google Cloud Pub/Sub Subscription\",\n-                                \"displayName\": \"Subscription\",\n+                            \"Listening Port\": {\n+                                \"description\": \"The Port to listen on for incoming connections\",\n+                                \"displayName\": \"Listening Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-pubsub-subscription\",\n+                                \"name\": \"Listening Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Max Data to Receive per Second\": {\n+                                \"description\": \"The maximum amount of data to receive per second; this allows the bandwidth to be throttled to a specified data rate; if not specified, the data rate is not throttled\",\n+                                \"displayName\": \"Max Data to Receive per Second\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"Max Data to Receive per Second\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"consume\",\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"message\",\n-                            \"pubsub\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.ConsumeGCPubSub\",\n-                        \"typeDescription\": \"Consumes message from the configured Google Cloud PubSub subscription. If the 'Batch Size' is set, the configured number of messages will be pulled in a single request, else only one message will be pulled.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Acknowledgement Id of the consumed Google Cloud PubSub message\",\n-                                \"name\": \"gcp.pubsub.ackId\"\n-                            },\n-                            {\n-                                \"description\": \"Serialized size of the consumed Google Cloud PubSub message\",\n-                                \"name\": \"gcp.pubsub.messageSize\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Number of attributes the consumed PubSub message has, if any\",\n-                                \"name\": \"gcp.pubsub.attributesCount\"\n+                            \"Max Unconfirmed Flowfile Time\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"The maximum amount of time to wait for a FlowFile to be confirmed before it is removed from the cache\",\n+                                \"displayName\": \"Max Unconfirmed Flowfile Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Unconfirmed Flowfile Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Timestamp value when the message was published\",\n-                                \"name\": \"gcp.pubsub.publishTime\"\n+                            \"Return Code\": {\n+                                \"defaultValue\": \"200\",\n+                                \"description\": \"The HTTP return code returned after every HTTP call\",\n+                                \"displayName\": \"Return Code\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Return Code\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Other than the listed attributes, this processor may write zero or more attributes, if the original Google Cloud Publisher client added any attributes to the message while sending\",\n-                                \"name\": \"Dynamic Attributes\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Attributes to be set for the outgoing Google Cloud PubSub message\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Attribute name\",\n-                                \"value\": \"Value to be set to the attribute\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"SSL Context Service enables support for HTTPS\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Input Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Maximum number of FlowFiles processed for each Processor invocation\",\n-                                \"displayName\": \"Input Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Input Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum Message Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"FLOWFILE_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n-                                        \"propertyName\": \"Message Derivation Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum size of a Google PubSub message in bytes. Defaults to 1 MB (1048576 bytes)\",\n-                                \"displayName\": \"Maximum Message Size\",\n+                            \"authorized-issuer-dn-pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A Regular Expression to apply against the Issuer's Distinguished Name of incoming connections. If the Pattern does not match the Issuer DN, the processor will respond with a status of HTTP 403 Forbidden.\",\n+                                \"displayName\": \"Authorized Issuer DN Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Message Size\",\n-                                \"required\": true,\n+                                \"name\": \"authorized-issuer-dn-pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Derivation Strategy\": {\n+                            \"client-authentication\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Each incoming FlowFile is sent as a Google Cloud PubSub message\",\n-                                        \"displayName\": \"FlowFile Oriented\",\n-                                        \"value\": \"FLOWFILE_ORIENTED\"\n+                                        \"description\": \"Inferred based on SSL Context Service properties. The presence of Trust Store properties implies REQUIRED, otherwise NONE is configured.\",\n+                                        \"displayName\": \"AUTO\",\n+                                        \"value\": \"AUTO\"\n                                     },\n                                     {\n-                                        \"description\": \"Each incoming FlowFile is parsed into NiFi records, which are each sent as a Google Cloud PubSub message\",\n-                                        \"displayName\": \"Record Oriented\",\n-                                        \"value\": \"RECORD_ORIENTED\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FLOWFILE_ORIENTED\",\n-                                \"description\": \"The strategy used to publish the incoming FlowFile to the Google Cloud PubSub endpoint.\",\n-                                \"displayName\": \"Message Derivation Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Derivation Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Record Reader\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"Requests the client certificate on handshake and validates if present but does not require it\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"RECORD_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n-                                        \"propertyName\": \"Message Derivation Strategy\"\n+                                        \"description\": \"Requests the client certificate on handshake and rejects the connection if it is not present and valid\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Does not request the client certificate on handshake\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Record Writer\": {\n+                                \"defaultValue\": \"AUTO\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"RECORD_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n-                                        \"propertyName\": \"Message Derivation Strategy\"\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to GCPubSub endpoint\",\n-                                \"displayName\": \"Record Writer\",\n+                                \"description\": \"Client Authentication policy for TLS connections. Required when SSL Context Service configured.\",\n+                                \"displayName\": \"Client Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"api-endpoint\": {\n-                                \"defaultValue\": \"pubsub.googleapis.com:443\",\n-                                \"description\": \"Override the gRPC endpoint in the form of [host:port]\",\n-                                \"displayName\": \"API Endpoint\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"api-endpoint\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-batch-bytes\": {\n-                                \"defaultValue\": \"3 MB\",\n-                                \"description\": \"Publish request gets triggered based on this Batch Bytes Threshold property and the Batch Size Threshold property, whichever condition is met first.\",\n-                                \"displayName\": \"Batch Bytes Threshold\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-batch-bytes\",\n-                                \"required\": true,\n+                                \"name\": \"client-authentication\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"health-check-port\": {\n+                                \"description\": \"The port to listen on for incoming health check requests. If set, it must be different from the Listening Port. Configure this port if the processor is set to use two-way SSL and a load balancer that does not support client authentication for health check requests is used. Only /<base_path>/healthcheck service is available via this port and only GET and HEAD requests are supported. If the processor is set not to use SSL, SSL will not be used on this port, either. If the processor is set to use one-way SSL, one-way SSL will be used on this port. If the processor is set to use two-way SSL, one-way SSL will be used on this port (client authentication not required).\",\n+                                \"displayName\": \"Listening Port for Health Check Requests\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"name\": \"health-check-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-publish-batch-delay\": {\n-                                \"defaultValue\": \"100 millis\",\n-                                \"description\": \"Indicates the delay threshold to use for batching. After this amount of time has elapsed (counting from the first element added), the elements will be wrapped up in a batch and sent. This value should not be set too high, usually on the order of milliseconds. Otherwise, calls might appear to never complete.\",\n-                                \"displayName\": \"Batch Delay Threshold\",\n+                            \"max-thread-pool-size\": {\n+                                \"defaultValue\": \"200\",\n+                                \"description\": \"The maximum number of threads to be used by the embedded Jetty server. The value can be set between 8 and 1000. The value of this property affects the performance of the flows and the operating system, therefore the default value should only be changed in justified cases. A value that is less than the default value may be suitable if only a small number of HTTP clients connect to the server. A greater value may be suitable if a large number of HTTP clients are expected to make requests to the server simultaneously.\",\n+                                \"displayName\": \"Maximum Thread Pool Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-pubsub-publish-batch-delay\",\n+                                \"name\": \"max-thread-pool-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-publish-batch-size\": {\n-                                \"defaultValue\": \"15\",\n-                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n-                                \"displayName\": \"Batch Size Threshold\",\n+                            \"multipart-read-buffer-size\": {\n+                                \"defaultValue\": \"512 KB\",\n+                                \"description\": \"The threshold size, at which the contents of an incoming file would be written to disk. Only applies for requests with Content-Type: multipart/form-data. It is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space.\",\n+                                \"displayName\": \"Multipart Read Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-pubsub-publish-batch-size\",\n+                                \"name\": \"multipart-read-buffer-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-topic\": {\n-                                \"description\": \"Name of the Google Cloud PubSub Topic\",\n-                                \"displayName\": \"Topic Name\",\n+                            \"multipart-request-max-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The max size of the request. Only applies for requests with Content-Type: multipart/form-data, and is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space\",\n+                                \"displayName\": \"Multipart Request Max Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-pubsub-topic\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"multipart-request-max-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.ConsumeGCPubSub\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails but attempting the operation again may succeed.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"description\": \"Relationship for successfully received FlowFiles\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The entirety of the FlowFile's content will be read into memory to be sent as a PubSub message.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"message\",\n-                            \"publish\",\n-                            \"pubsub\"\n+                            \"http\",\n+                            \"https\",\n+                            \"ingest\",\n+                            \"listen\",\n+                            \"rest\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\",\n-                        \"typeDescription\": \"Publishes the content of the incoming flowfile to the configured Google Cloud PubSub topic. The processor supports dynamic properties. If any dynamic properties are present, they will be sent along with the message in the form of 'attributes'.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n-                                \"name\": \"gcp.pubsub.messageId\"\n-                            },\n-                            {\n-                                \"description\": \"Count of pubsub messages published to the configured Google Cloud PubSub topic\",\n-                                \"name\": \"gcp.pubsub.count.records\"\n-                            },\n-                            {\n-                                \"description\": \"Name of the Google Cloud PubSub topic the message was published to\",\n-                                \"name\": \"gcp.pubsub.topic\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenHTTP\",\n+                        \"typeDescription\": \"Starts an HTTP Server and listens on a given base path to transform incoming requests into FlowFiles. The default URI of the Service will be http://{hostname}:{port}/contentListener. Only HEAD and POST requests are supported. GET, PUT, DELETE, OPTIONS and TRACE will result in an error and the HTTP response status code 405; CONNECT will also result in an error and the HTTP response status code 400. GET is supported on <service_URI>/healthcheck. If the service is available, it returns \\\"200 OK\\\" with the content \\\"OK\\\". The health check functionality can be configured to be accessible via a different port. For details see the documentation of the \\\"Listening Port for health check requests\\\" property.A Record Reader and Record Writer property can be enabled on the processor to process incoming requests as records. Record processing is not allowed for multipart requests and request in FlowFileV3 format (minifi).\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -92964,123 +92260,213 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the received data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"gcp-bytes-outstanding\": {\n-                                \"defaultValue\": \"10 MB\",\n-                                \"description\": \"The number of quota bytes that may be outstanding to the client.\",\n-                                \"displayName\": \"Bytes Outstanding\",\n+                            \"Client Auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n+                                \"displayName\": \"Client Auth\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client Auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-bytes-outstanding\",\n+                                \"name\": \"Local Network Interface\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Batch Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n+                                \"displayName\": \"Max Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-messages-outstanding\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The number of messages that may be outstanding to the client.\",\n-                                \"displayName\": \"Messages Outstanding\",\n+                            \"Max Number of TCP Connections\": {\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"The maximum number of worker threads available for servicing TCP connections.\",\n+                                \"displayName\": \"Max Number of Worker Threads\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-messages-outstanding\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Number of TCP Connections\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-subscription\": {\n-                                \"description\": \"Name of the Google Cloud Pub/Sub Subscription. Example: projects/8476107443/locations/europe-west1-d/subscriptions/my-lite-subscription\",\n-                                \"displayName\": \"Subscription\",\n+                            \"Max Size of Message Queue\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor during these surges.\",\n+                                \"displayName\": \"Max Size of Message Queue\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Message Queue\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Delimiter\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n+                                \"displayName\": \"Batching Message Delimiter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-pubsub-subscription\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n+                                \"displayName\": \"Receive Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.lite.PublishGCPubSubLite\"\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"consume\",\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"lite\",\n-                            \"message\",\n-                            \"pubsub\"\n+                            \"listen\",\n+                            \"logs\",\n+                            \"relp\",\n+                            \"tcp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.lite.ConsumeGCPubSubLite\",\n-                        \"typeDescription\": \"Consumes message from the configured Google Cloud PubSub Lite subscription.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenRELP\",\n+                        \"typeDescription\": \"Listens for RELP messages being sent to a given port over TCP. Each message will be acknowledged after successfully writing the message to a FlowFile. Each FlowFile will contain data portion of one or more RELP frames. In the case where the RELP frames contain syslog messages, the output of this processor can be sent to a ParseSyslog processor for further processing.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n-                                \"name\": \"gcp.pubsub.messageId\"\n+                                \"description\": \"The command of the RELP frames.\",\n+                                \"name\": \"relp.command\"\n                             },\n                             {\n-                                \"description\": \"If non-empty, identifies related messages for which publish order should be respected. If a 'Subscription' has 'enable_message_ordering' set to 'true', messages published with the same non-empty 'ordering_key' value will be delivered to subscribers in the order in which they are received by the Pub/Sub system. All 'PubsubMessage's published in a given 'PublishRequest' must specify the same 'ordering_key' value.\",\n-                                \"name\": \"gcp.pubsub.ordering.key\"\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"relp.sender\"\n                             },\n                             {\n-                                \"description\": \"Number of attributes the consumed PubSub message has, if any\",\n-                                \"name\": \"gcp.pubsub.attributesCount\"\n+                                \"description\": \"The sending port the messages were received over.\",\n+                                \"name\": \"relp.port\"\n                             },\n                             {\n-                                \"description\": \"Timestamp value when the message was published\",\n-                                \"name\": \"gcp.pubsub.publishTime\"\n+                                \"description\": \"The transaction number of the message. Only included if <Batch Size> is 1.\",\n+                                \"name\": \"relp.txnr\"\n                             },\n                             {\n-                                \"description\": \"Other than the listed attributes, this processor may write zero or more attributes, if the original Google Cloud Publisher client added any attributes to the message while sending\",\n-                                \"name\": \"Dynamic Attributes\"\n+                                \"description\": \"The mime.type of the content which is text/plain\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -93088,154 +92474,362 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Attributes to be set for the outgoing Google Cloud PubSub Lite message\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Attribute name\",\n-                                \"value\": \"Value to be set to the attribute\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the Syslog messages. Note that Expression language is not evaluated per FlowFile.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client Auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n+                                    }\n+                                ],\n+                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Client Auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"gcp-batch-bytes\": {\n-                                \"defaultValue\": \"3 MB\",\n-                                \"description\": \"Publish request gets triggered based on this Batch Bytes Threshold property and the Batch Size Threshold property, whichever condition is met first.\",\n-                                \"displayName\": \"Batch Bytes Threshold\",\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-batch-bytes\",\n+                                \"name\": \"Local Network Interface\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Batch Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of Syslog events to add to a single FlowFile. If multiple events are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n+                                \"displayName\": \"Max Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-ordering-key\": {\n-                                \"description\": \"Messages with the same ordering key will always get published to the same partition. When this property is not set, messages can get published to different partitions if more than one partition exists for the topic.\",\n-                                \"displayName\": \"Ordering Key\",\n+                            \"Max Number of TCP Connections\": {\n+                                \"defaultValue\": \"2\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"TCP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum number of concurrent connections to accept Syslog messages in TCP mode.\",\n+                                \"displayName\": \"Max Number of TCP Connections\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcp-ordering-key\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Number of TCP Connections\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-publish-batch-delay\": {\n-                                \"defaultValue\": \"100 millis\",\n-                                \"description\": \"Indicates the delay threshold to use for batching. After this amount of time has elapsed (counting from the first element added), the elements will be wrapped up in a batch and sent. This value should not be set too high, usually on the order of milliseconds. Otherwise, calls might appear to never complete.\",\n-                                \"displayName\": \"Batch Delay Threshold\",\n+                            \"Max Size of Message Queue\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n+                                \"displayName\": \"Max Size of Message Queue\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-pubsub-publish-batch-delay\",\n+                                \"name\": \"Max Size of Message Queue\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-publish-batch-size\": {\n-                                \"defaultValue\": \"15\",\n-                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n-                                \"displayName\": \"Batch Size Threshold\",\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"TCP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-pubsub-publish-batch-size\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-topic\": {\n-                                \"description\": \"Name of the Google Cloud PubSub Topic. Example: projects/8476107443/locations/europe-west1-d/topics/my-lite-topic\",\n-                                \"displayName\": \"Topic Name\",\n+                            \"Message Delimiter\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Specifies the delimiter to place between Syslog messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n+                                \"displayName\": \"Message Delimiter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Parse Messages\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates if the processor should parse the Syslog messages. If set to false, each outgoing FlowFile will only contain the sender, protocol, and port, and no additional attributes.\",\n+                                \"displayName\": \"Parse Messages\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Parse Messages\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"description\": \"The port for Syslog communication. Note that Expression language is not evaluated per FlowFile.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-pubsub-topic\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TCP\",\n+                                        \"value\": \"TCP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UDP\",\n+                                        \"value\": \"UDP\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UDP\",\n+                                \"description\": \"The protocol for Syslog communication.\",\n+                                \"displayName\": \"Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive Syslog messages. Adjust this value appropriately based on the expected size of the incoming Syslog messages. When UDP is selected each buffer will hold one Syslog message. When TCP is selected messages are read from an incoming connection until the buffer is full, or the connection is closed. \",\n+                                \"displayName\": \"Receive Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Buffer Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"TCP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, syslog messages will be received over a secure connection.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"socket-keep-alive\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"TCP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether or not to have TCP socket keep alive turned on. Timing details depend on operating system properties.\",\n+                                \"displayName\": \"Socket Keep Alive\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"socket-keep-alive\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.lite.ConsumeGCPubSubLite\"\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n+                            \"org.apache.nifi.processors.standard.PutSyslog\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"description\": \"Syslog messages that match one of the expected formats will be sent out this relationship as a FlowFile per message.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Syslog messages that do not match one of the expected formats will be sent out this relationship as a FlowFile per message.\",\n+                                \"name\": \"invalid\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The entirety of the FlowFile's content will be read into memory to be sent as a PubSub message.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"lite\",\n-                            \"message\",\n-                            \"publish\",\n-                            \"pubsub\"\n+                            \"listen\",\n+                            \"logs\",\n+                            \"syslog\",\n+                            \"tcp\",\n+                            \"udp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.lite.PublishGCPubSubLite\",\n-                        \"typeDescription\": \"Publishes the content of the incoming FlowFile to the configured Google Cloud PubSub Lite topic. The processor supports dynamic properties. If any dynamic properties are present, they will be sent along with the message in the form of 'attributes'.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenSyslog\",\n+                        \"typeDescription\": \"Listens for Syslog messages being sent to a given port over TCP or UDP. Incoming messages are checked against regular expressions for RFC5424 and RFC3164 formatted messages. The format of each message is: (<PRIORITY>)(VERSION )(TIMESTAMP) (HOSTNAME) (BODY) where version is optional. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\". If an incoming messages matches one of these patterns, the message will be parsed and the individual pieces will be placed in FlowFile attributes, with the original message in the content of the FlowFile. If an incoming message does not match one of these patterns it will not be parsed and the syslog.valid attribute will be set to false with the original message in the content of the FlowFile. Valid messages will be transferred on the success relationship, and invalid messages will be transferred on the invalid relationship.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n-                                \"name\": \"gcp.pubsub.messageId\"\n+                                \"description\": \"The priority of the Syslog message.\",\n+                                \"name\": \"syslog.priority\"\n                             },\n                             {\n-                                \"description\": \"Name of the Google Cloud PubSub topic the message was published to\",\n-                                \"name\": \"gcp.pubsub.topic\"\n+                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.severity\"\n+                            },\n+                            {\n+                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.facility\"\n+                            },\n+                            {\n+                                \"description\": \"The optional version from the Syslog message.\",\n+                                \"name\": \"syslog.version\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of the Syslog message.\",\n+                                \"name\": \"syslog.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname or IP address of the Syslog message.\",\n+                                \"name\": \"syslog.hostname\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n+                                \"name\": \"syslog.sender\"\n+                            },\n+                            {\n+                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n+                                \"name\": \"syslog.body\"\n+                            },\n+                            {\n+                                \"description\": \"An indicator of whether this message matched the expected formats. If this value is false, the other attributes will be empty and only the original message will be available in the content.\",\n+                                \"name\": \"syslog.valid\"\n+                            },\n+                            {\n+                                \"description\": \"The protocol over which the Syslog message was received.\",\n+                                \"name\": \"syslog.protocol\"\n+                            },\n+                            {\n+                                \"description\": \"The port over which the Syslog message was received.\",\n+                                \"name\": \"syslog.port\"\n+                            },\n+                            {\n+                                \"description\": \"The mime.type of the FlowFile which will be text/plain for Syslog messages.\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -93244,195 +92838,253 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the received data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"Client Auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client Auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-host\": {\n-                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n-                                \"displayName\": \"Proxy host\",\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-host\",\n+                                \"name\": \"Local Network Interface\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-port\": {\n-                                \"description\": \"Proxy port number\",\n-                                \"displayName\": \"Proxy port\",\n+                            \"Max Batch Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n+                                \"displayName\": \"Max Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-port\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Batch Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-name\": {\n-                                \"description\": \"HTTP Proxy Username\",\n-                                \"displayName\": \"HTTP Proxy Username\",\n+                            \"Max Number of TCP Connections\": {\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"The maximum number of worker threads available for servicing TCP connections.\",\n+                                \"displayName\": \"Max Number of Worker Threads\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Number of TCP Connections\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-password\": {\n-                                \"description\": \"HTTP Proxy Password\",\n-                                \"displayName\": \"HTTP Proxy Password\",\n+                            \"Max Size of Message Queue\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor during these surges.\",\n+                                \"displayName\": \"Max Size of Message Queue\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Message Queue\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-bucket\": {\n-                                \"defaultValue\": \"${gcs.bucket}\",\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\n+                            \"Message Delimiter\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n+                                \"displayName\": \"Batching Message Delimiter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-bucket\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-generation\": {\n-                                \"description\": \"The generation of the object to be deleted. If null, will use latest version of the object.\",\n-                                \"displayName\": \"Generation\",\n+                            \"Port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-generation\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"Name of the object.\",\n-                                \"displayName\": \"Key\",\n+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n+                                \"displayName\": \"Receive Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"storage-api-url\": {\n-                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n-                                \"displayName\": \"Storage API URL\",\n+                            \"idle-timeout\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The amount of time a client's connection will remain open if no data is received. The default of 0 seconds will leave connections open until they are closed by the client.\",\n+                                \"displayName\": \"Idle Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-api-url\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"idle-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-receiving-threads\": {\n+                                \"description\": \"This property is deprecated and no longer used.\",\n+                                \"displayName\": \"Max Number of Receiving Message Handler Threads\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-receiving-threads\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"pool-receive-buffers\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"True\",\n+                                \"description\": \"Enable or disable pooling of buffers that the processor uses for handling bytes received on socket connections. The framework allocates buffers as needed during processing.\",\n+                                \"displayName\": \"Pool Receive Buffers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"pool-receive-buffers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n-                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"delete\",\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"storage\"\n+                            \"listen\",\n+                            \"ssl\",\n+                            \"tcp\",\n+                            \"tls\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n-                        \"typeDescription\": \"Deletes objects from a Google Cloud Bucket. If attempting to delete a file that does not exist, FlowFile is routed to success.\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenTCP\",\n+                        \"typeDescription\": \"Listens for incoming TCP connections and reads data from each connection using a line separator as the message demarcator. The default behavior is for each message to produce a single FlowFile, however this can be controlled by increasing the Batch Size to a larger value for higher throughput. The Receive Buffer Size must be set as large as the largest messages expected to be received, meaning if every 100kb there is a line separator, then the Receive Buffer Size must be greater than 100kb. The processor can be configured to use an SSL Context Service to only allow secure connections. When connected clients present certificates for mutual TLS authentication, the Distinguished Names of the client certificate's issuer and subject are added to the outgoing FlowFiles as attributes. The processor does not perform authorization based on Distinguished Name values, but since these values are attached to the outgoing FlowFiles, authorization can be implemented based on these attributes.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"tcp.sender\"\n+                            },\n+                            {\n+                                \"description\": \"The sending port the messages were received.\",\n+                                \"name\": \"tcp.port\"\n+                            },\n+                            {\n+                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the Certificate Authority that issued the client's certificate is attached to the FlowFile.\",\n+                                \"name\": \"client.certificate.issuer.dn\"\n+                            },\n+                            {\n+                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the client certificate's owner (subject) is attached to the FlowFile.\",\n+                                \"name\": \"client.certificate.subject.dn\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -93441,1517 +93093,1265 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"name\": \"Local Network Interface\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-host\": {\n-                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n-                                \"displayName\": \"Proxy host\",\n+                            \"client-auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-host\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"client-auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-port\": {\n-                                \"description\": \"Proxy port number\",\n-                                \"displayName\": \"Proxy port\",\n+                            \"max-number-tcp-connections\": {\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"The maximum number of concurrent TCP connections to accept. In cases where clients are keeping a connection open, the concurrent tasks for the processor should be adjusted to match the Max Number of TCP Connections allowed, so that there is a task processing each connection.\",\n+                                \"displayName\": \"Max Number of TCP Connections\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-port\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-number-tcp-connections\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-name\": {\n-                                \"description\": \"HTTP Proxy Username\",\n-                                \"displayName\": \"HTTP Proxy Username\",\n+                            \"max-size-socket-buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-size-socket-buffer\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-password\": {\n-                                \"description\": \"HTTP Proxy Password\",\n-                                \"displayName\": \"HTTP Proxy Password\",\n+                            \"port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait before timing out when reading from a connection.\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n+                                \"name\": \"read-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-bucket\": {\n-                                \"defaultValue\": \"${gcs.bucket}\",\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\n+                            \"reader-error-handling-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Transfers any records already received and closes the connection.\",\n+                                        \"displayName\": \"Transfer\",\n+                                        \"value\": \"Transfer\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Discards any records already received and closes the connection.\",\n+                                        \"displayName\": \"Discard\",\n+                                        \"value\": \"Discard\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Transfer\",\n+                                \"description\": \"Indicates how to deal with an error while reading the next record from a connection, when previous records have already been read from the connection.\",\n+                                \"displayName\": \"Read Error Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-bucket\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"reader-error-handling-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-generation\": {\n-                                \"description\": \"The generation of the Object to download. If not set, the latest generation will be downloaded.\",\n-                                \"displayName\": \"Object Generation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-generation\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"Name of the object.\",\n-                                \"displayName\": \"Name\",\n+                            \"record-batch-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum number of records to write to a single FlowFile.\",\n+                                \"displayName\": \"Record Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-object-range-length\": {\n-                                \"description\": \"The number of bytes to download from the object, starting from the Range Start. An empty value or a value that extends beyond the end of the object will read to the end of the object.\",\n-                                \"displayName\": \"Range Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-object-range-length\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-object-range-start\": {\n-                                \"description\": \"The byte position at which to start reading from the object. An empty value or a value of zero will start reading at the beginning of the object.\",\n-                                \"displayName\": \"Range Start\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-object-range-start\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-server-side-encryption-key\": {\n-                                \"description\": \"An AES256 Key (encoded in base64) which the object has been encrypted in.\",\n-                                \"displayName\": \"Server Side Encryption Key\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-server-side-encryption-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before writing to a FlowFile\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"storage-api-url\": {\n-                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n-                                \"displayName\": \"Storage API URL\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-api-url\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n-                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"storage\"\n+                            \"listen\",\n+                            \"record\",\n+                            \"ssl\",\n+                            \"tcp\",\n+                            \"tls\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n-                        \"typeDescription\": \"Fetches a file from a Google Cloud Bucket. Designed to be used in tandem with ListGCSBucket.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenTCPRecord\",\n+                        \"typeDescription\": \"Listens for incoming TCP connections and reads data from each connection using a configured record reader, and writes the records to a flow file using a configured record writer. The type of record reader selected will determine how clients are expected to send data. For example, when using a Grok reader to read logs, a client can keep an open connection and continuously stream data, but when using an JSON reader, the client cannot send an array of JSON documents and then send another array on the same connection, as the reader would be in a bad state at that point. Records will be read from the connection in blocking mode, and will timeout according to the Read Timeout specified in the processor. If the read times out, or if any other error is encountered when reading, the connection will be closed, and any records read up to that point will be handled according to the configured Read Error Strategy (Discard or Transfer). In cases where clients are keeping a connection open, the concurrent tasks for the processor should be adjusted to match the Max Number of TCP Connections allowed, so that there is a task processing each connection. The processor can be configured to use an SSL Context Service to only allow secure connections. When connected clients present certificates for mutual TLS authentication, the Distinguished Names of the client certificate's issuer and subject are added to the outgoing FlowFiles as attributes. The processor does not perform authorization based on Distinguished Name values, but since these values are attached to the outgoing FlowFiles, authorization can be implemented based on these attributes.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file, parsed if possible from the Content-Disposition response header\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"Bucket of the object.\",\n-                                \"name\": \"gcs.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"Name of the object.\",\n-                                \"name\": \"gcs.key\"\n-                            },\n-                            {\n-                                \"description\": \"Size of the object.\",\n-                                \"name\": \"gcs.size\"\n-                            },\n-                            {\n-                                \"description\": \"Data cache control of the object.\",\n-                                \"name\": \"gcs.cache.control\"\n-                            },\n-                            {\n-                                \"description\": \"The number of components which make up the object.\",\n-                                \"name\": \"gcs.component.count\"\n-                            },\n-                            {\n-                                \"description\": \"The data content disposition of the object.\",\n-                                \"name\": \"gcs.content.disposition\"\n+                                \"description\": \"The host that sent the data.\",\n+                                \"name\": \"tcp.sender\"\n                             },\n                             {\n-                                \"description\": \"The content encoding of the object.\",\n-                                \"name\": \"gcs.content.encoding\"\n+                                \"description\": \"The port that the processor accepted the connection on.\",\n+                                \"name\": \"tcp.port\"\n                             },\n                             {\n-                                \"description\": \"The content language of the object.\",\n-                                \"name\": \"gcs.content.language\"\n+                                \"description\": \"The number of records written to the flow file.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The MIME/Content-Type of the object\",\n+                                \"description\": \"The mime-type of the writer used to write the records to the flow file.\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n-                                \"name\": \"gcs.crc32c\"\n-                            },\n-                            {\n-                                \"description\": \"The creation time of the object (milliseconds)\",\n-                                \"name\": \"gcs.create.time\"\n-                            },\n-                            {\n-                                \"description\": \"The last modification time of the object (milliseconds)\",\n-                                \"name\": \"gcs.update.time\"\n-                            },\n-                            {\n-                                \"description\": \"The algorithm used to encrypt the object.\",\n-                                \"name\": \"gcs.encryption.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n-                                \"name\": \"gcs.encryption.sha256\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n-                                \"name\": \"gcs.etag\"\n-                            },\n-                            {\n-                                \"description\": \"The service-generated for the object\",\n-                                \"name\": \"gcs.generated.id\"\n-                            },\n-                            {\n-                                \"description\": \"The data generation of the object.\",\n-                                \"name\": \"gcs.generation\"\n-                            },\n-                            {\n-                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n-                                \"name\": \"gcs.md5\"\n-                            },\n-                            {\n-                                \"description\": \"The media download link to the object.\",\n-                                \"name\": \"gcs.media.link\"\n-                            },\n-                            {\n-                                \"description\": \"The metageneration of the object.\",\n-                                \"name\": \"gcs.metageneration\"\n-                            },\n-                            {\n-                                \"description\": \"The owner (uploader) of the object.\",\n-                                \"name\": \"gcs.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The ACL entity type of the uploader of the object.\",\n-                                \"name\": \"gcs.owner.type\"\n+                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the Certificate Authority that issued the client's certificate is attached to the FlowFile.\",\n+                                \"name\": \"client.certificate.issuer.dn\"\n                             },\n                             {\n-                                \"description\": \"The URI of the object as a string.\",\n-                                \"name\": \"gcs.uri\"\n+                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the client certificate's owner (subject) is attached to the FlowFile.\",\n+                                \"name\": \"client.certificate.subject.dn\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the received data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Local Network Interface\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Batch Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n+                                \"displayName\": \"Max Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"Max Batch Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"Max Size of Message Queue\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n+                                \"displayName\": \"Max Size of Message Queue\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n+                                \"name\": \"Max Size of Message Queue\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"window\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Entity Tracking Initial Listing Target\",\n-                                        \"propertyName\": \"et-initial-listing-target\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"Message Delimiter\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n+                                \"displayName\": \"Batching Message Delimiter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-host\": {\n-                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n-                                \"displayName\": \"Proxy host\",\n+                            \"Port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-host\",\n-                                \"required\": false,\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-port\": {\n-                                \"description\": \"Proxy port number\",\n-                                \"displayName\": \"Proxy port\",\n+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n+                                \"displayName\": \"Receive Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Buffer Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Sending Host\": {\n+                                \"description\": \"IP, or name, of a remote host. Only Datagrams from the specified Sending Host Port and this host will be accepted. Improves Performance. May be a system property or an environment variable.\",\n+                                \"displayName\": \"Sending Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-port\",\n+                                \"name\": \"Sending Host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-name\": {\n-                                \"description\": \"HTTP Proxy Username\",\n-                                \"displayName\": \"HTTP Proxy Username\",\n+                            \"Sending Host Port\": {\n+                                \"description\": \"Port being used by remote host to send Datagrams. Only Datagrams from the specified Sending Host and this port will be accepted. Improves Performance. May be a system property or an environment variable.\",\n+                                \"displayName\": \"Sending Host Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-name\",\n+                                \"name\": \"Sending Host Port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ingest\",\n+                            \"listen\",\n+                            \"source\",\n+                            \"udp\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenUDP\",\n+                        \"typeDescription\": \"Listens for Datagram Packets on a given port. The default behavior produces a FlowFile per datagram, however for higher throughput the Max Batch Size property may be increased to specify the number of datagrams to batch together in a single FlowFile. This processor can be restricted to listening for datagrams from  a specific remote host and port by specifying the Sending Host and Sending Host Port properties, otherwise it will listen for datagrams from all hosts and ports.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"udp.sender\"\n                             },\n-                            \"gcp-proxy-user-password\": {\n-                                \"description\": \"HTTP Proxy Password\",\n-                                \"displayName\": \"HTTP Proxy Password\",\n+                            {\n+                                \"description\": \"The sending port the messages were received.\",\n+                                \"name\": \"udp.port\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the received data.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-password\",\n+                                \"name\": \"Local Network Interface\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n+                            \"Max Size of Message Queue\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n+                                \"displayName\": \"Max Size of Message Queue\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n+                                \"name\": \"Max Size of Message Queue\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-bucket\": {\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcs-bucket\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-prefix\": {\n-                                \"description\": \"The prefix used to filter the object list. In most cases, it should end with a forward slash ('/').\",\n-                                \"displayName\": \"Prefix\",\n+                            \"Port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcs-prefix\",\n-                                \"required\": false,\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-use-generations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to use GCS Generations, if applicable.  If false, only the latest version of each object will be returned.\",\n-                                \"displayName\": \"Use Generations\",\n+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n+                                \"displayName\": \"Receive Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcs-use-generations\",\n+                                \"name\": \"Receive Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. This strategy will not pick up any newly added or modified entity if their timestamps are older than the tracked latest timestamp. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracing Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However an additional DistributedMapCache controller service is required and more JVM heap memory is used. For more information on how the 'Entity Tracking Time Window' property works, see the description.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy lists all entities without any tracking. The same entities will be listed each time this processor is scheduled. It is recommended to change the default run schedule value. Any property that relates to the persisting state will be ignored.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                            \"batch-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum number of datagrams to write as records to a single FlowFile. The Batch Size will only be reached when data is coming in more frequently than the Poll Timeout.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"poll-timeout\": {\n+                                \"defaultValue\": \"50 ms\",\n+                                \"description\": \"The amount of time to wait when polling the internal queue for more datagrams. If no datagrams are found after waiting for the configured timeout, then the processor will emit whatever records have been obtained up to that point.\",\n+                                \"displayName\": \"Poll Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"poll-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for reading the content of incoming datagrams.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n                             \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"description\": \"The Record Writer to use in order to serialize the data before writing to a flow file.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-writer\",\n-                                \"required\": false,\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"storage-api-url\": {\n-                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n-                                \"displayName\": \"Storage API URL\",\n+                            \"sending-host\": {\n+                                \"description\": \"IP, or name, of a remote host. Only Datagrams from the specified Sending Host Port and this host will be accepted. Improves Performance. May be a system property or an environment variable.\",\n+                                \"displayName\": \"Sending Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-api-url\",\n+                                \"name\": \"sending-host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sending-host-port\": {\n+                                \"description\": \"Port being used by remote host to send Datagrams. Only Datagrams from the specified Sending Host and this port will be accepted. Improves Performance. May be a system property or an environment variable.\",\n+                                \"displayName\": \"Sending Host Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sending-host-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n-                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of keys, the timestamp of the newest key is stored, along with the keys that share that same timestamp. This allows the Processor to list only keys that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a datagram cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"list\",\n-                            \"storage\"\n+                            \"ingest\",\n+                            \"listen\",\n+                            \"record\",\n+                            \"source\",\n+                            \"udp\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n-                        \"typeDescription\": \"Retrieves a listing of objects from a GCS bucket. For each object that is listed, creates a FlowFile that represents the object so that it can be fetched in conjunction with FetchGCSObject. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenUDPRecord\",\n+                        \"typeDescription\": \"Listens for Datagram Packets on a given port and reads the content of each datagram using the configured Record Reader. Each record will then be written to a flow file using the configured Record Writer. This processor can be restricted to listening for datagrams from  a specific remote host and port by specifying the Sending Host and Sending Host Port properties, otherwise it will listen for datagrams from all hosts and ports.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"Bucket of the object.\",\n-                                \"name\": \"gcs.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"Name of the object.\",\n-                                \"name\": \"gcs.key\"\n-                            },\n-                            {\n-                                \"description\": \"Size of the object.\",\n-                                \"name\": \"gcs.size\"\n-                            },\n-                            {\n-                                \"description\": \"Data cache control of the object.\",\n-                                \"name\": \"gcs.cache.control\"\n-                            },\n-                            {\n-                                \"description\": \"The number of components which make up the object.\",\n-                                \"name\": \"gcs.component.count\"\n-                            },\n-                            {\n-                                \"description\": \"The data content disposition of the object.\",\n-                                \"name\": \"gcs.content.disposition\"\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"udp.sender\"\n                             },\n                             {\n-                                \"description\": \"The content encoding of the object.\",\n-                                \"name\": \"gcs.content.encoding\"\n+                                \"description\": \"The sending port the messages were received.\",\n+                                \"name\": \"udp.port\"\n                             },\n                             {\n-                                \"description\": \"The content language of the object.\",\n-                                \"name\": \"gcs.content.language\"\n+                                \"description\": \"The number of records written to the flow file.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The MIME/Content-Type of the object\",\n+                                \"description\": \"The mime-type of the writer used to write the records to the flow file.\",\n                                 \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n-                                \"name\": \"gcs.crc32c\"\n-                            },\n-                            {\n-                                \"description\": \"The creation time of the object (milliseconds)\",\n-                                \"name\": \"gcs.create.time\"\n-                            },\n-                            {\n-                                \"description\": \"The last modification time of the object (milliseconds)\",\n-                                \"name\": \"gcs.update.time\"\n-                            },\n-                            {\n-                                \"description\": \"The algorithm used to encrypt the object.\",\n-                                \"name\": \"gcs.encryption.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n-                                \"name\": \"gcs.encryption.sha256\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n-                                \"name\": \"gcs.etag\"\n-                            },\n-                            {\n-                                \"description\": \"The service-generated for the object\",\n-                                \"name\": \"gcs.generated.id\"\n-                            },\n-                            {\n-                                \"description\": \"The data generation of the object.\",\n-                                \"name\": \"gcs.generation\"\n-                            },\n-                            {\n-                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n-                                \"name\": \"gcs.md5\"\n-                            },\n-                            {\n-                                \"description\": \"The media download link to the object.\",\n-                                \"name\": \"gcs.media.link\"\n-                            },\n-                            {\n-                                \"description\": \"The metageneration of the object.\",\n-                                \"name\": \"gcs.metageneration\"\n-                            },\n-                            {\n-                                \"description\": \"The owner (uploader) of the object.\",\n-                                \"name\": \"gcs.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The ACL entity type of the uploader of the object.\",\n-                                \"name\": \"gcs.owner.type\"\n-                            },\n-                            {\n-                                \"description\": \"The URI of the object as a string.\",\n-                                \"name\": \"gcs.uri\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Allows user-defined metadata to be added to the GCS object as key/value pairs\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a User-Defined Metadata field to add to the GCS Object\",\n-                                \"value\": \"The value of a User-Defined Metadata field to add to the GCS Object\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Attributes to Ignore\": {\n+                                \"description\": \"A comma-separated list of Attributes to ignore. If not specified, no attributes will be ignored unless `Attributes to Ignore by Regular Expression` is modified. There's an OR relationship between the two properties.\",\n+                                \"displayName\": \"Attributes to Ignore\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-proxy-host\": {\n-                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n-                                \"displayName\": \"Proxy host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-proxy-port\": {\n-                                \"description\": \"Proxy port number\",\n-                                \"displayName\": \"Proxy port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-proxy-user-name\": {\n-                                \"description\": \"HTTP Proxy Username\",\n-                                \"displayName\": \"HTTP Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-name\",\n+                                \"name\": \"Attributes to Ignore\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-password\": {\n-                                \"description\": \"HTTP Proxy Password\",\n-                                \"displayName\": \"HTTP Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n+                            \"Attributes to Log\": {\n+                                \"description\": \"A comma-separated list of Attributes to Log. If not specified, all attributes will be logged unless `Attributes to Log by Regular Expression` is modified. There's an AND relationship between the two properties.\",\n+                                \"displayName\": \"Attributes to Log\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-bucket\": {\n-                                \"defaultValue\": \"${gcs.bucket}\",\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-bucket\",\n-                                \"required\": true,\n+                                \"name\": \"Attributes to Log\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-content-disposition-type\": {\n+                            \"Log FlowFile Properties\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Indicates that the object should be loaded and rendered within the browser.\",\n-                                        \"displayName\": \"Inline\",\n-                                        \"value\": \"inline\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Indicates that the object should be saved (using a Save As... dialog) rather than opened directly within the browser\",\n-                                        \"displayName\": \"Attachment\",\n-                                        \"value\": \"attachment\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Type of RFC-6266 Content Disposition to be attached to the object\",\n-                                \"displayName\": \"Content Disposition Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not to log FlowFile \\\"properties\\\", such as Entry Date, Lineage Start Date, and content size\",\n+                                \"displayName\": \"Log FlowFile Properties\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcs-content-disposition-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-content-type\": {\n-                                \"defaultValue\": \"${mime.type}\",\n-                                \"description\": \"Content Type for the file, i.e. text/plain\",\n-                                \"displayName\": \"Content Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-content-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"Name of the object.\",\n-                                \"displayName\": \"Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-key\",\n+                                \"name\": \"Log FlowFile Properties\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-object-acl\": {\n+                            \"Log Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all authenticated Google account holders READER and WRITER permissions. All other permissions are removed.\",\n-                                        \"displayName\": \"All Authenticated Users\",\n-                                        \"value\": \"ALL_AUTHENTICATED_USERS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all authenticated Google account holders READER permission. All other permissions are removed.\",\n-                                        \"displayName\": \"Authenticated Read\",\n-                                        \"value\": \"AUTHENTICATED_READ\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Gives the object and bucket owners OWNER permission. All other permissions are removed.\",\n-                                        \"displayName\": \"Bucket Owner Full Control\",\n-                                        \"value\": \"BUCKET_OWNER_FULL_CONTROL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"trace\",\n+                                        \"value\": \"trace\"\n                                     },\n                                     {\n-                                        \"description\": \"Gives the object owner OWNER permission, and gives the bucket owner READER permission. All other permissions are removed.\",\n-                                        \"displayName\": \"Bucket Owner Read Only\",\n-                                        \"value\": \"BUCKET_OWNER_READ\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"debug\",\n+                                        \"value\": \"debug\"\n                                     },\n                                     {\n-                                        \"description\": \"Gives the bucket or object owner OWNER permission for a bucket or object, and removes all other access permissions.\",\n-                                        \"displayName\": \"Private\",\n-                                        \"value\": \"PRIVATE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"info\",\n+                                        \"value\": \"info\"\n                                     },\n                                     {\n-                                        \"description\": \"Gives permission to the project team based on their roles. Anyone who is part of the team has READER permission. Project owners and project editors have OWNER permission. This is the default ACL for newly created buckets. This is also the default ACL for newly created objects unless the default object ACL for that bucket has been changed.\",\n-                                        \"displayName\": \"Project Private\",\n-                                        \"value\": \"PROJECT_PRIVATE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"warn\",\n+                                        \"value\": \"warn\"\n                                     },\n                                     {\n-                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all users, both authenticated and anonymous, READER permission. When you apply this to an object, anyone on the Internet can read the object without authenticating.\",\n-                                        \"displayName\": \"Public Read Only\",\n-                                        \"value\": \"PUBLIC_READ\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"error\",\n+                                        \"value\": \"error\"\n                                     }\n                                 ],\n-                                \"description\": \"Access Control to be attached to the object uploaded. Not providing this will revert to bucket defaults.\",\n-                                \"displayName\": \"Object ACL\",\n+                                \"defaultValue\": \"info\",\n+                                \"description\": \"The Log Level to use when logging the Attributes\",\n+                                \"displayName\": \"Log Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcs-object-acl\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-object-crc32c\": {\n-                                \"description\": \"CRC32C Checksum (encoded in Base64, big-Endian order) of the file for server-side validation.\",\n-                                \"displayName\": \"CRC32C Checksum\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-object-crc32c\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-object-md5\": {\n-                                \"description\": \"MD5 Hash (encoded in Base64) of the file for server-side validation.\",\n-                                \"displayName\": \"MD5 Hash\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-object-md5\",\n-                                \"required\": false,\n+                                \"name\": \"Log Level\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-overwrite-object\": {\n+                            \"Log Payload\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If false, the upload to GCS will succeed only if the object does not exist.\",\n-                                \"displayName\": \"Overwrite Object\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the FlowFile's payload will be logged, in addition to its attributes; otherwise, just the Attributes will be logged.\",\n+                                \"displayName\": \"Log Payload\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcs-overwrite-object\",\n+                                \"name\": \"Log Payload\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-server-side-encryption-key\": {\n-                                \"description\": \"An AES256 Encryption Key (encoded in base64) for server-side encryption of the object.\",\n-                                \"displayName\": \"Server Side Encryption Key\",\n+                            \"Log prefix\": {\n+                                \"description\": \"Log prefix appended to the log lines. It helps to distinguish the output of multiple LogAttribute processors.\",\n+                                \"displayName\": \"Log prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-server-side-encryption-key\",\n+                                \"name\": \"Log prefix\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"gzip.content.enabled\": {\n+                            \"Output Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Each FlowFile attribute will be logged using a single line for the attribute name and another line for the attribute value. This format is often most advantageous when looking at the attributes of a single FlowFile.\",\n+                                        \"displayName\": \"Line per Attribute\",\n+                                        \"value\": \"Line per Attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"All FlowFile attribute names and values will be logged on a single line. This format is often most advantageous when comparing logs from multiple FlowFiles.\",\n+                                        \"displayName\": \"Single Line\",\n+                                        \"value\": \"Single Line\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Signals to the GCS Blob Writer whether GZIP compression during transfer is desired. False means do not gzip and can boost performance in many cases.\",\n-                                \"displayName\": \"GZIP Compression Enabled\",\n+                                \"defaultValue\": \"Line per Attribute\",\n+                                \"description\": \"Specifies the format to use for logging FlowFile attributes\",\n+                                \"displayName\": \"Output Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gzip.content.enabled\",\n-                                \"required\": false,\n+                                \"name\": \"Output Format\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"attributes-to-ignore-regex\": {\n+                                \"description\": \"A regular expression indicating the Attributes to Ignore. If not specified, no attributes will be ignored unless `Attributes to Ignore` is modified. There's an OR relationship between the two properties.\",\n+                                \"displayName\": \"Attributes to Ignore by Regular Expression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"attributes-to-ignore-regex\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"storage-api-url\": {\n-                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n-                                \"displayName\": \"Storage API URL\",\n+                            \"attributes-to-log-regex\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A regular expression indicating the Attributes to Log. If not specified, all attributes will be logged unless `Attributes to Log` is modified. There's an AND relationship between the two properties.\",\n+                                \"displayName\": \"Attributes to Log by Regular Expression\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-api-url\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"attributes-to-log-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the GCS object\",\n-                                \"name\": \"filename\"\n                             },\n-                            {\n-                                \"description\": \"Uses the FlowFile's MIME type as the content-type for the GCS object\",\n-                                \"name\": \"mime.type\"\n+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The name of the CharacterSet to use\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"character-set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n+                                \"description\": \"All FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"put\"\n+                            \"attributes\",\n+                            \"logging\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.storage.PutGCSObject\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile as an object in a Google Cloud Storage.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Bucket of the object.\",\n-                                \"name\": \"gcs.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"Name of the object.\",\n-                                \"name\": \"gcs.key\"\n-                            },\n-                            {\n-                                \"description\": \"Size of the object.\",\n-                                \"name\": \"gcs.size\"\n-                            },\n-                            {\n-                                \"description\": \"Data cache control of the object.\",\n-                                \"name\": \"gcs.cache.control\"\n-                            },\n-                            {\n-                                \"description\": \"The number of components which make up the object.\",\n-                                \"name\": \"gcs.component.count\"\n-                            },\n-                            {\n-                                \"description\": \"The data content disposition of the object.\",\n-                                \"name\": \"gcs.content.disposition\"\n-                            },\n-                            {\n-                                \"description\": \"The content encoding of the object.\",\n-                                \"name\": \"gcs.content.encoding\"\n-                            },\n-                            {\n-                                \"description\": \"The content language of the object.\",\n-                                \"name\": \"gcs.content.language\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME/Content-Type of the object\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n-                                \"name\": \"gcs.crc32c\"\n-                            },\n-                            {\n-                                \"description\": \"The creation time of the object (milliseconds)\",\n-                                \"name\": \"gcs.create.time\"\n-                            },\n-                            {\n-                                \"description\": \"The last modification time of the object (milliseconds)\",\n-                                \"name\": \"gcs.update.time\"\n-                            },\n-                            {\n-                                \"description\": \"The algorithm used to encrypt the object.\",\n-                                \"name\": \"gcs.encryption.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n-                                \"name\": \"gcs.encryption.sha256\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n-                                \"name\": \"gcs.etag\"\n-                            },\n-                            {\n-                                \"description\": \"The service-generated for the object\",\n-                                \"name\": \"gcs.generated.id\"\n-                            },\n-                            {\n-                                \"description\": \"The data generation of the object.\",\n-                                \"name\": \"gcs.generation\"\n-                            },\n-                            {\n-                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n-                                \"name\": \"gcs.md5\"\n-                            },\n-                            {\n-                                \"description\": \"The media download link to the object.\",\n-                                \"name\": \"gcs.media.link\"\n-                            },\n-                            {\n-                                \"description\": \"The metageneration of the object.\",\n-                                \"name\": \"gcs.metageneration\"\n-                            },\n-                            {\n-                                \"description\": \"The owner (uploader) of the object.\",\n-                                \"name\": \"gcs.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The ACL entity type of the uploader of the object.\",\n-                                \"name\": \"gcs.owner.type\"\n-                            },\n-                            {\n-                                \"description\": \"The URI of the object as a string.\",\n-                                \"name\": \"gcs.uri\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.LogAttribute\",\n+                        \"typeDescription\": \"Emits attributes of the FlowFile at the specified log level\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"log-level\": {\n+                                \"defaultValue\": \"info\",\n+                                \"description\": \"The Log Level to use when logging the message: [trace, debug, info, warn, error]\",\n+                                \"displayName\": \"Log Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"log-level\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"operationKey\": {\n-                                \"defaultValue\": \"${operationKey}\",\n-                                \"description\": \"The unique identifier of the Vision operation.\",\n-                                \"displayName\": \"GCP Operation Key\",\n+                            \"log-message\": {\n+                                \"description\": \"The log message to emit\",\n+                                \"displayName\": \"Log message\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"operationKey\",\n-                                \"required\": true,\n+                                \"name\": \"log-message\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"log-prefix\": {\n+                                \"description\": \"Log prefix appended to the log lines. It helps to distinguish the output of multiple LogMessage processors.\",\n+                                \"displayName\": \"Log prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"log-prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"A unique identifier of the operation designated by the Vision server.\",\n-                                \"name\": \"operationKey\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateFilesOperation\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The job is currently still being processed\",\n-                                \"name\": \"running\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"All FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"attributes\",\n+                            \"logging\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an Google Vision operation.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.LogMessage\",\n+                        \"typeDescription\": \"Emits a log message at the specified log level\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds a FlowFile attribute specified by the dynamic property's key with the value found in the lookup service using the the dynamic property's value\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of the attribute to add to the FlowFile\",\n+                                \"value\": \"The name of the key or property to retrieve from the lookup service\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"include-empty-values\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Include null or blank values for keys that are null or blank\",\n+                                \"displayName\": \"Include Empty Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"include-empty-values\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-service\": {\n+                                \"description\": \"The lookup service to use for attribute lookups\",\n+                                \"displayName\": \"Lookup Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"lookup-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"operationKey\": {\n-                                \"defaultValue\": \"${operationKey}\",\n-                                \"description\": \"The unique identifier of the Vision operation.\",\n-                                \"displayName\": \"GCP Operation Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"operationKey\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"A unique identifier of the operation designated by the Vision server.\",\n-                                \"name\": \"operationKey\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateImagesOperation\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The job is currently still being processed\",\n-                                \"name\": \"running\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles with failing lookups are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles with missing lookups are routed to this relationship\",\n+                                \"name\": \"unmatched\"\n                             },\n                             {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles with matching lookups are routed to this relationship\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"Attribute Expression Language\",\n+                            \"attributes\",\n+                            \"cache\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"lookup\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an Google Vision operation.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.LookupAttribute\",\n+                        \"typeDescription\": \"Lookup attributes from a lookup service\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"A RecordPath that points to the field whose value will be looked up in the configured Lookup Service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Value To Lookup\",\n+                                \"value\": \"Valid Record Path\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"lookup-service\": {\n+                                \"description\": \"The Lookup Service to use in order to lookup a value in each Record\",\n+                                \"displayName\": \"Lookup Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"lookup-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.lookup.LookupService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"json-payload\": {\n-                                \"defaultValue\": \"{\\n    \\\"requests\\\": [\\n        {\\n            \\\"inputConfig\\\": {\\n                \\\"gcsSource\\\": {\\n                    \\\"uri\\\": \\\"gs://${gcs.bucket}/${filename}\\\"\\n                },\\n                \\\"mimeType\\\": \\\"application/pdf\\\"\\n            },\\n            \\\"features\\\": [{\\n                    \\\"type\\\": \\\"${vision-feature-type}\\\",\\n                    \\\"maxResults\\\": 4\\n                }],\\n            \\\"outputConfig\\\": {\\n                \\\"gcsDestination\\\": {\\n                    \\\"uri\\\": \\\"gs://${output-bucket}/${filename}/\\\"\\n                },\\n                \\\"batchSize\\\": 2\\n            }\\n        }]\\n}\",\n-                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n-                                \"displayName\": \"JSON Payload\",\n+                            \"record-path-lookup-miss-result-cache-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies how many lookup values/records should be cached.Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"record-path-lookup-miss-result-cache-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"output-bucket\": {\n-                                \"description\": \"Name of the GCS bucket where the output of the Vision job will be persisted. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${output-bucket}\",\n-                                \"displayName\": \"Output Bucket\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"output-bucket\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"record-update-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The \\\"Result RecordPath\\\" property will be ignored and the lookup service must be a single simple key lookup service. Every dynamic property value should be a record path. For each dynamic property, the value contained in the field corresponding to the record path will be used as the key in the Lookup Service and the value returned by the Lookup Service will be used to replace the existing value. It is possible to configure multiple dynamic properties to replace multiple values in one execution. This strategy only supports simple types replacements (strings, integers, etc).\",\n+                                        \"displayName\": \"Replace Existing Values\",\n+                                        \"value\": \"replace-existing-values\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The \\\"Result RecordPath\\\" property will be used to determine which part of the record should be updated with the value returned by the Lookup Service\",\n+                                        \"displayName\": \"Use Property\",\n+                                        \"value\": \"use-property\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"use-property\",\n+                                \"description\": \"This property defines the strategy to use when updating the record with the value returned by the Lookup Service.\",\n+                                \"displayName\": \"Record Update Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-update-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vision-feature-type\": {\n-                                \"defaultValue\": \"TEXT_DETECTION\",\n-                                \"description\": \"Type of GCP Vision Feature. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${vision-feature-type}\",\n-                                \"displayName\": \"Vision Feature Type\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"result-contents\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The entire Record that is retrieved from the Lookup Service will be inserted into the destination path.\",\n+                                        \"displayName\": \"Insert Entire Record\",\n+                                        \"value\": \"insert-entire-record\"\n+                                    },\n+                                    {\n+                                        \"description\": \"All of the fields in the Record that is retrieved from the Lookup Service will be inserted into the destination path.\",\n+                                        \"displayName\": \"Insert Record Fields\",\n+                                        \"value\": \"record-fields\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"insert-entire-record\",\n+                                \"description\": \"When a result is obtained that contains a Record, this property determines whether the Record itself is inserted at the configured path or if the contents of the Record (i.e., the sub-fields) will be inserted at the configured path.\",\n+                                \"displayName\": \"Record Result Contents\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"result-contents\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"result-record-path\": {\n+                                \"description\": \"A RecordPath that points to the field whose value should be updated with whatever value is returned from the Lookup Service. If not specified, the value that is returned from the Lookup Service will be ignored, except for determining whether the FlowFile should be routed to the 'matched' or 'unmatched' Relationship.\",\n+                                \"displayName\": \"Result RecordPath\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"vision-feature-type\",\n+                                \"name\": \"result-record-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"routing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Records will be routed to a 'success' Relationship regardless of whether or not there is a match in the configured Lookup Service\",\n+                                        \"displayName\": \"Route to 'success'\",\n+                                        \"value\": \"route-to-success\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Records will be routed to either a 'matched' or an 'unmatched' Relationship depending on whether or not there was a match in the configured Lookup Service. A single input FlowFile may result in two different output FlowFiles.\",\n+                                        \"displayName\": \"Route to 'matched' or 'unmatched'\",\n+                                        \"value\": \"route-to-matched-unmatched\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"route-to-success\",\n+                                \"description\": \"Specifies how to route records after a Lookup has completed\",\n+                                \"displayName\": \"Routing Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"routing-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\"\n+                            \"org.apache.nifi.lookup.SimpleKeyValueLookupService\",\n+                            \"org.apache.nifi.lookup.db.DatabaseRecordLookupService\",\n+                            \"org.apache.nifi.lookup.maxmind.IPLookupService\",\n+                            \"org.apache.nifi.processors.standard.ConvertRecord\",\n+                            \"org.apache.nifi.processors.standard.SplitRecord\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"All records will be sent to this Relationship if configured to do so, unless a failure occurs\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"If a FlowFile cannot be enriched, the unchanged FlowFile will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"avro\",\n+                            \"convert\",\n+                            \"csv\",\n+                            \"database\",\n+                            \"db\",\n+                            \"enrichment\",\n+                            \"filter\",\n+                            \"json\",\n+                            \"logs\",\n+                            \"lookup\",\n+                            \"record\",\n+                            \"route\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateFilesOperation\",\n-                        \"typeDescription\": \"Trigger a Vision operation on file input. It should be followed by GetGcpVisionAnnotateFilesOperationStatus processor in order to monitor operation status.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.LookupRecord\",\n+                        \"typeDescription\": \"Extracts one or more fields from a Record and looks up a value for those fields in a LookupService. If a result is returned by the LookupService, that result is optionally added to the Record. In this case, the processor functions as an Enrichment processor. Regardless, the Record is then routed to either the 'matched' relationship or 'unmatched' relationship (if the 'Routing Strategy' property is configured to do so), indicating whether or not a result was returned by the LookupService, allowing the processor to also function as a Routing processor. The \\\"coordinates\\\" to use for looking up a value in the Lookup Service are defined by adding a user-defined property. Each property that is added will have an entry added to a Map, where the name of the property becomes the Map Key and the value returned by the RecordPath becomes the value for that key. If multiple values are returned by the RecordPath, then the Record will be routed to the 'unmatched' relationship (or 'success', depending on the 'Routing Strategy' property's configuration). If one or more fields match the Result RecordPath, all fields that match will be updated. If there is no match in the configured LookupService, then no fields will be updated. I.e., it will not overwrite an existing value in the Record with a null value. Please note, however, that if the results returned by the LookupService are not accounted for in your schema (specifically, the schema that is configured for your Record Writer) then the fields will not be written out to the FlowFile.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n-                                \"name\": \"operationKey\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -94960,501 +94360,1243 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Attribute Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any attribute that is not the same on all FlowFiles in a bin will be dropped. Those that are the same across all FlowFiles will be retained.\",\n+                                        \"displayName\": \"Keep Only Common Attributes\",\n+                                        \"value\": \"Keep Only Common Attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Any attribute that has the same value for all FlowFiles in a bin, or has no value for a FlowFile, will be kept. For example, if a bin consists of 3 FlowFiles and 2 of them have a value of 'hello' for the 'greeting' attribute and the third FlowFile has no 'greeting' attribute then the outbound FlowFile will get a 'greeting' attribute with the value 'hello'.\",\n+                                        \"displayName\": \"Keep All Unique Attributes\",\n+                                        \"value\": \"Keep All Unique Attributes\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Keep Only Common Attributes\",\n+                                \"description\": \"Determines which FlowFile attributes should be added to the bundle. If 'Keep All Unique Attributes' is selected, any attribute on any FlowFile that gets bundled will be kept unless its value conflicts with the value from another FlowFile. If 'Keep Only Common Attributes' is selected, only the attributes that exist on all FlowFiles in the bundle, with the same value, will be preserved.\",\n+                                \"displayName\": \"Attribute Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"Attribute Strategy\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"json-payload\": {\n-                                \"defaultValue\": \"{\\n    \\\"requests\\\": [{\\n        \\\"image\\\": {\\n            \\\"source\\\": {\\n                \\\"imageUri\\\": \\\"gs://${gcs.bucket}/${filename}\\\"\\n            }\\n        },\\n        \\\"features\\\": [{\\n            \\\"type\\\": \\\"${vision-feature-type}\\\",\\n            \\\"maxResults\\\": 4\\n        }]\\n    }],\\n    \\\"outputConfig\\\": {\\n        \\\"gcsDestination\\\": {\\n            \\\"uri\\\": \\\"gs://${output-bucket}/${filename}/\\\"\\n        },\\n        \\\"batchSize\\\": 2\\n    }\\n}\",\n-                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n-                                \"displayName\": \"JSON Payload\",\n+                            \"Compression Level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"0\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"3\",\n+                                        \"value\": \"3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"4\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"5\",\n+                                        \"value\": \"5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"6\",\n+                                        \"value\": \"6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"7\",\n+                                        \"value\": \"7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"8\",\n+                                        \"value\": \"8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"9\",\n+                                        \"value\": \"9\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"ZIP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the compression level to use when using the Zip Merge Format; if not using the Zip Merge Format, this value is ignored\",\n+                                \"displayName\": \"Compression Level\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Compression Level\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Correlation Attribute Name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"If specified, like FlowFiles will be binned together, where 'like FlowFiles' means FlowFiles that have the same value for this Attribute. If not specified, FlowFiles are bundled by the order in which they are pulled from the queue.\",\n+                                \"displayName\": \"Correlation Attribute Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n+                                \"name\": \"Correlation Attribute Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"output-bucket\": {\n-                                \"description\": \"Name of the GCS bucket where the output of the Vision job will be persisted. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${output-bucket}\",\n-                                \"displayName\": \"Output Bucket\",\n+                            \"Delimiter Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"No Header, Footer, or Demarcator will be used\",\n+                                        \"displayName\": \"Do Not Use Delimiters\",\n+                                        \"value\": \"Do Not Use Delimiters\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The values of Header, Footer, and Demarcator will be retrieved from the contents of a file\",\n+                                        \"displayName\": \"Filename\",\n+                                        \"value\": \"Filename\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The values of Header, Footer, and Demarcator will be specified as property values\",\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Do Not Use Delimiters\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Binary Concatenation\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Determines if Header, Footer, and Demarcator should point to files containing the respective content, or if the values of the properties should be used as the content.\",\n+                                \"displayName\": \"Delimiter Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Delimiter Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Demarcator File\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Filename\",\n+                                            \"Text\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n+                                        \"propertyName\": \"Delimiter Strategy\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Binary Concatenation\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Filename or text specifying the demarcator to use. If not specified, no demarcator is supplied.\",\n+                                \"displayName\": \"Demarcator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"output-bucket\",\n+                                \"name\": \"Demarcator File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"vision-feature-type\": {\n-                                \"defaultValue\": \"TEXT_DETECTION\",\n-                                \"description\": \"Type of GCP Vision Feature. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${vision-feature-type}\",\n-                                \"displayName\": \"Vision Feature Type\",\n+                            \"Footer File\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Filename\",\n+                                            \"Text\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n+                                        \"propertyName\": \"Delimiter Strategy\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Binary Concatenation\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Filename or text specifying the footer to use. If not specified, no footer is supplied.\",\n+                                \"displayName\": \"Footer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"vision-feature-type\",\n+                                \"name\": \"Footer File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Header File\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Filename\",\n+                                            \"Text\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n+                                        \"propertyName\": \"Delimiter Strategy\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Binary Concatenation\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Filename or text specifying the header to use. If not specified, no header is supplied.\",\n+                                \"displayName\": \"Header\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Header File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Keep Path\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"ZIP\",\n+                                            \"TAR\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"If using the Zip or Tar Merge Format, specifies whether or not the FlowFiles' paths should be included in their entry names.\",\n+                                \"displayName\": \"Keep Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Keep Path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Bin Age\": {\n+                                \"description\": \"The maximum age of a Bin that will trigger a Bin to be complete. Expected format is <duration> <time unit> where <duration> is a positive integer and time unit is one of seconds, minutes, hours\",\n+                                \"displayName\": \"Max Bin Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Bin Age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Group Size\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum size for the bundle. If not specified, there is no maximum.\",\n+                                \"displayName\": \"Maximum Group Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Group Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Number of Entries\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum number of files to include in a bundle\",\n+                                \"displayName\": \"Maximum Number of Entries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Number of Entries\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum number of Bins\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time\",\n+                                \"displayName\": \"Maximum number of Bins\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum number of Bins\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Merge Format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"A bin of FlowFiles will be combined into a single TAR file. The FlowFiles' <path> attribute will be used to create a directory in the TAR file if the <Keep Paths> property is set to true; otherwise, all FlowFiles will be added at the root of the TAR file. If a FlowFile has an attribute named <tar.permissions> that is 3 characters, each between 0-7, that attribute will be used as the TAR entry's 'mode'.\",\n+                                        \"displayName\": \"TAR\",\n+                                        \"value\": \"TAR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A bin of FlowFiles will be combined into a single ZIP file. The FlowFiles' <path> attribute will be used to create a directory in the ZIP file if the <Keep Paths> property is set to true; otherwise, all FlowFiles will be added at the root of the ZIP file. The <Compression Level> property indicates the ZIP compression to use.\",\n+                                        \"displayName\": \"ZIP\",\n+                                        \"value\": \"ZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 3 FlowFile Stream\",\n+                                        \"displayName\": \"FlowFile Stream, v3\",\n+                                        \"value\": \"FlowFile Stream, v3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 2 FlowFile Stream\",\n+                                        \"displayName\": \"FlowFile Stream, v2\",\n+                                        \"value\": \"FlowFile Stream, v2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 1 FlowFile Package\",\n+                                        \"displayName\": \"FlowFile Tar, v1\",\n+                                        \"value\": \"FlowFile Tar, v1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The contents of all FlowFiles will be concatenated together into a single FlowFile\",\n+                                        \"displayName\": \"Binary Concatenation\",\n+                                        \"value\": \"Binary Concatenation\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Avro contents of all FlowFiles will be concatenated together into a single FlowFile\",\n+                                        \"displayName\": \"Avro\",\n+                                        \"value\": \"Avro\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Binary Concatenation\",\n+                                \"description\": \"Determines the format that will be used to merge the content.\",\n+                                \"displayName\": \"Merge Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Merge Format\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Merge Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Generates 'bins' of FlowFiles and fills each bin as full as possible. FlowFiles are placed into a bin based on their size and optionally their attributes (if the <Correlation Attribute> property is set)\",\n+                                        \"displayName\": \"Bin-Packing Algorithm\",\n+                                        \"value\": \"Bin-Packing Algorithm\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Combines fragments that are associated by attributes back into a single cohesive FlowFile. If using this strategy, all FlowFiles must have the attributes <fragment.identifier>, <fragment.count>, and <fragment.index> or alternatively (for backward compatibility purposes) <segment.identifier>, <segment.count>, and <segment.index>. All FlowFiles with the same value for \\\"fragment.identifier\\\" will be grouped together. All FlowFiles in this group must have the same value for the \\\"fragment.count\\\" attribute. All FlowFiles in this group must have a unique value for the \\\"fragment.index\\\" attribute between 0 and the value of the \\\"fragment.count\\\" attribute.\",\n+                                        \"displayName\": \"Defragment\",\n+                                        \"value\": \"Defragment\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Bin-Packing Algorithm\",\n+                                \"description\": \"Specifies the algorithm used to merge content. The 'Defragment' algorithm combines fragments that are associated by attributes back into a single cohesive FlowFile. The 'Bin-Packing Algorithm' generates a FlowFile populated by arbitrarily chosen FlowFiles\",\n+                                \"displayName\": \"Merge Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Merge Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Minimum Group Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The minimum size for the bundle\",\n+                                \"displayName\": \"Minimum Group Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum Group Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Minimum Number of Entries\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The minimum number of files to include in a bundle\",\n+                                \"displayName\": \"Minimum Number of Entries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum Number of Entries\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Tar Modified Time\": {\n+                                \"defaultValue\": \"${file.lastModifiedTime}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"TAR\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"If using the Tar Merge Format, specifies if the Tar entry should store the modified timestamp either by expression (e.g. ${file.lastModifiedTime} or static value, both of which must match the ISO8601 format 'yyyy-MM-dd'T'HH:mm:ssZ'.\",\n+                                \"displayName\": \"Tar Modified Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Tar Modified Time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"mergecontent-metadata-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), the metadata for the first FlowFile in the bin will be set on the output FlowFile.\",\n+                                        \"displayName\": \"Use First Metadata\",\n+                                        \"value\": \"Use First Metadata\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), any FlowFile whose metadata values match those of the first FlowFile, any additional metadata will be dropped but the FlowFile will be merged. Any FlowFile whose metadata values do not match those of the first FlowFile in the bin will not be merged.\",\n+                                        \"displayName\": \"Keep Only Common Metadata\",\n+                                        \"value\": \"Keep Only Common Metadata\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), any FlowFile whose metadata values do not match those of the first FlowFile in the bin will not be merged.\",\n+                                        \"displayName\": \"Do Not Merge Uncommon Metadata\",\n+                                        \"value\": \"Do Not Merge Uncommon Metadata\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Ignores (does not transfer, compare, etc.) any metadata from a FlowFile whose content supports embedded metadata.\",\n+                                        \"displayName\": \"Ignore Metadata\",\n+                                        \"value\": \"Ignore Metadata\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Do Not Merge Uncommon Metadata\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Avro\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"For FlowFiles whose input format supports metadata (Avro, e.g.), this property determines which metadata should be added to the bundle. If 'Use First Metadata' is selected, the metadata keys/values from the first FlowFile to be bundled will be used. If 'Keep Only Common Metadata' is selected, only the metadata that exists on all FlowFiles in the bundle, with the same value, will be preserved. If 'Ignore Metadata' is selected, no metadata is transferred to the outgoing bundled FlowFile. If 'Do Not Merge Uncommon Metadata' is selected, any FlowFile whose metadata values do not match those of the first bundled FlowFile will not be merged.\",\n+                                \"displayName\": \"Metadata Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mergecontent-metadata-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates the order in which the fragments should be assembled. This attribute must be present on all FlowFiles when using the Defragment Merge Strategy and must be a unique (i.e., unique across all FlowFiles that have the same value for the \\\"fragment.identifier\\\" attribute) integer between 0 and the value of the fragment.count attribute. If two or more FlowFiles have the same value for the \\\"fragment.identifier\\\" attribute and the same value for the \\\"fragment.index\\\" attribute, the first FlowFile processed will be accepted and subsequent FlowFiles will not be accepted into the Bin.\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates how many FlowFiles should be expected in the given bundle. At least one FlowFile must have this attribute in the bundle. If multiple FlowFiles contain the \\\"fragment.count\\\" attribute in a given bundle, all must have the same value.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute will be used for the filename of the completed merged FlowFile.\",\n+                                \"name\": \"segment.original.filename\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Format> property is set to TAR. The value of this attribute must be 3 characters; each character must be in the range 0 to 7 (inclusive) and indicates the file permissions that should be used for the FlowFile's TAR entry. If this attribute is missing or has an invalid value, the default value of 644 will be used\",\n+                                \"name\": \"tar.permissions\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\"\n+                            \"org.apache.nifi.processors.standard.MergeRecord\",\n+                            \"org.apache.nifi.processors.standard.SegmentContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If the bundle cannot be created, all FlowFiles that would have been used to created the bundle will be transferred to failure\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The FlowFiles that were used to create the bundle\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The FlowFile containing the merged content\",\n+                                \"name\": \"merged\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"While content is not stored in memory, the FlowFiles' attributes are. The configuration of MergeContent (maximum bin size, maximum group size, maximum bin age, max number of entries) will influence how much memory is used. If merging together many small FlowFiles, a two-stage approach may be necessary in order to avoid excessive use of memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"archive\",\n+                            \"concatenation\",\n+                            \"content\",\n+                            \"correlation\",\n+                            \"flowfile-stream\",\n+                            \"flowfile-stream-v3\",\n+                            \"merge\",\n+                            \"stream\",\n+                            \"tar\",\n+                            \"zip\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateImagesOperation\",\n-                        \"typeDescription\": \"Trigger a Vision operation on image input. It should be followed by GetGcpVisionAnnotateImagesOperationStatus processor in order to monitor operation status.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.MergeContent\",\n+                        \"typeDescription\": \"Merges a Group of FlowFiles together based on a user-defined strategy and packages them into a single FlowFile. It is recommended that the Processor be configured with only a single incoming connection, as Group of FlowFiles will not be created from FlowFiles in different connections. This processor updates the mime.type attribute as appropriate. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n-                                \"name\": \"operationKey\"\n+                                \"description\": \"When more than 1 file is merged, the filename comes from the segment.original.filename attribute. If that attribute does not exist in the source FlowFiles, then the filename is set to the number of nanoseconds matching system time. Then a filename extension may be applied:if Merge Format is TAR, then the filename will be appended with .tar, if Merge Format is ZIP, then the filename will be appended with .zip, if Merge Format is FlowFileStream, then the filename will be appended with .pkg\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The number of FlowFiles that were merged into this bundle\",\n+                                \"name\": \"merge.count\"\n+                            },\n+                            {\n+                                \"description\": \"The age of the bin, in milliseconds, when it was merged and output. Effectively this is the greatest amount of time that any FlowFile in this bundle remained waiting in this processor before it was output\",\n+                                \"name\": \"merge.bin.age\"\n+                            },\n+                            {\n+                                \"description\": \"UUID of the merged flow file that will be added to the original flow files attributes.\",\n+                                \"name\": \"merge.uuid\"\n+                            },\n+                            {\n+                                \"description\": \"This processor allows for several thresholds to be configured for merging FlowFiles. This attribute indicates which of the Thresholds resulted in the FlowFiles being merged. For an explanation of each of the possible values and their meanings, see the Processor's Usage / documentation and see the 'Additional Details' page.\",\n+                                \"name\": \"merge.reason\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.27.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-standard-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"attribute-list\": {\n-                                \"description\": \"Comma separated list of attributes to be included in the resulting CSV. If this value is left empty then all existing Attributes will be included. This list of attributes is case sensitive and supports attribute names that contain commas. If an attribute specified in the list is not found it will be emitted to the resulting CSV with an empty string or null depending on the 'Null Value' property. If a core attribute is specified in this list and the 'Include Core Attributes' property is false, the core attribute will be included. The attribute list ALWAYS wins.\",\n-                                \"displayName\": \"Attribute List\",\n+                            \"Attribute Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any attribute that is not the same on all FlowFiles in a bin will be dropped. Those that are the same across all FlowFiles will be retained.\",\n+                                        \"displayName\": \"Keep Only Common Attributes\",\n+                                        \"value\": \"Keep Only Common Attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Any attribute that has the same value for all FlowFiles in a bin, or has no value for a FlowFile, will be kept. For example, if a bin consists of 3 FlowFiles and 2 of them have a value of 'hello' for the 'greeting' attribute and the third FlowFile has no 'greeting' attribute then the outbound FlowFile will get a 'greeting' attribute with the value 'hello'.\",\n+                                        \"displayName\": \"Keep All Unique Attributes\",\n+                                        \"value\": \"Keep All Unique Attributes\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Keep Only Common Attributes\",\n+                                \"description\": \"Determines which FlowFile attributes should be added to the bundle. If 'Keep All Unique Attributes' is selected, any attribute on any FlowFile that gets bundled will be kept unless its value conflicts with the value from another FlowFile. If 'Keep Only Common Attributes' is selected, only the attributes that exist on all FlowFiles in the bundle, with the same value, will be preserved.\",\n+                                \"displayName\": \"Attribute Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"attribute-list\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Attribute Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"correlation-attribute-name\": {\n+                                \"description\": \"If specified, two FlowFiles will be binned together only if they have the same value for this Attribute. If not specified, FlowFiles are bundled by the order in which they are pulled from the queue.\",\n+                                \"displayName\": \"Correlation Attribute Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"correlation-attribute-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"attributes-regex\": {\n-                                \"description\": \"Regular expression that will be evaluated against the flow file attributes to select the matching attributes. This property can be used in combination with the attributes list property.  The final output will contain a combination of matches found in the ATTRIBUTE_LIST and ATTRIBUTE_REGEX.\",\n-                                \"displayName\": \"Attributes Regular Expression\",\n+                            \"max-bin-age\": {\n+                                \"description\": \"The maximum age of a Bin that will trigger a Bin to be complete. Expected format is <duration> <time unit> where <duration> is a positive integer and time unit is one of seconds, minutes, hours\",\n+                                \"displayName\": \"Max Bin Age\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"attributes-regex\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-bin-age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"destination\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The resulting CSV string will be placed into a new flowfile attribute named 'CSVData'.  The content of the flowfile will not be changed.\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The resulting CSV string will be placed into the content of the flowfile.Existing flowfile context will be overwritten. 'CSVData' will not be written to at all (neither null nor empty string).\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-attribute\",\n-                                \"description\": \"Control if CSV value is written as a new flowfile attribute 'CSVData' or written in the flowfile content.\",\n-                                \"displayName\": \"Destination\",\n+                            \"max-bin-size\": {\n+                                \"description\": \"The maximum size for the bundle. If not specified, there is no maximum. This is a 'soft limit' in that if a FlowFile is added to a bin, all records in that FlowFile will be added, so this limit may be exceeded by up to the number of bytes in last input FlowFile.\",\n+                                \"displayName\": \"Maximum Bin Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"destination\",\n+                                \"name\": \"max-bin-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-records\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum number of Records to include in a bin. This is a 'soft limit' in that if a FlowFIle is added to a bin, all records in that FlowFile will be added, so this limit may be exceeded by up to the number of records in the last input FlowFile.\",\n+                                \"displayName\": \"Maximum Number of Records\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max-records\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.bin.count\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time. This number should not be smaller than the maximum number of concurrent threads for this Processor, or the bins that are created will often consist only of a single incoming FlowFile.\",\n+                                \"displayName\": \"Maximum Number of Bins\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.bin.count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include-core-attributes\": {\n+                            \"merge-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Generates 'bins' of FlowFiles and fills each bin as full as possible. FlowFiles are placed into a bin based on their size and optionally their attributes (if the <Correlation Attribute> property is set)\",\n+                                        \"displayName\": \"Bin-Packing Algorithm\",\n+                                        \"value\": \"Bin-Packing Algorithm\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Combines fragments that are associated by attributes back into a single cohesive FlowFile. If using this strategy, all FlowFiles must have the attributes <fragment.identifier> and <fragment.count>. All FlowFiles with the same value for \\\"fragment.identifier\\\" will be grouped together. All FlowFiles in this group must have the same value for the \\\"fragment.count\\\" attribute. The ordering of the Records that are output is not guaranteed.\",\n+                                        \"displayName\": \"Defragment\",\n+                                        \"value\": \"Defragment\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines if the FlowFile org.apache.nifi.flowfile.attributes.CoreAttributes, which are contained in every FlowFile, should be included in the final CSV value generated.  Core attributes will be added to the end of the CSVData and CSVSchema strings.  The Attribute List property overrides this setting.\",\n-                                \"displayName\": \"Include Core Attributes\",\n+                                \"defaultValue\": \"Bin-Packing Algorithm\",\n+                                \"description\": \"Specifies the algorithm used to merge records. The 'Defragment' algorithm combines fragments that are associated by attributes back into a single cohesive FlowFile. The 'Bin-Packing Algorithm' generates a FlowFile populated by arbitrarily chosen FlowFiles\",\n+                                \"displayName\": \"Merge Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-core-attributes\",\n+                                \"name\": \"merge-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include-schema\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true the schema (attribute names) will also be converted to a CSV string which will either be applied to a new attribute named 'CSVSchema' or applied at the first row in the content depending on the DESTINATION property setting.\",\n-                                \"displayName\": \"Include Schema\",\n+                            \"min-bin-size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size of for the bin\",\n+                                \"displayName\": \"Minimum Bin Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-schema\",\n+                                \"name\": \"min-bin-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"null-value\": {\n+                            \"min-records\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The minimum number of records to include in a bin\",\n+                                \"displayName\": \"Minimum Number of Records\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"min-records\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute indicates how many FlowFiles should be expected in the given bundle.\",\n+                                \"name\": \"fragment.count\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.MergeContent\",\n+                            \"org.apache.nifi.processors.standard.PartitionRecord\",\n+                            \"org.apache.nifi.processors.standard.SplitRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If the bundle cannot be created, all FlowFiles that would have been used to created the bundle will be transferred to failure\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The FlowFiles that were used to create the bundle\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The FlowFile containing the merged records\",\n+                                \"name\": \"merged\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"content\",\n+                            \"correlation\",\n+                            \"event\",\n+                            \"merge\",\n+                            \"record\",\n+                            \"stream\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.MergeRecord\",\n+                        \"typeDescription\": \"This Processor merges together multiple record-oriented FlowFiles into a single FlowFile that contains all of the Records of the input FlowFiles. This Processor works by creating 'bins' and then adding FlowFiles to these bins until they are full. Once a bin is full, all of the FlowFiles will be combined into a single output FlowFile, and that FlowFile will be routed to the 'merged' Relationship. A bin will consist of potentially many 'like FlowFiles'. In order for two FlowFiles to be considered 'like FlowFiles', they must have the same Schema (as identified by the Record Reader) and, if the <Correlation Attribute Name> property is set, the same value for the specified attribute. See Processor Usage and Additional Details for more information. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The merged FlowFile will have a 'record.count' attribute indicating the number of records that were written to the FlowFile.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type indicated by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of FlowFiles that were merged into this bundle\",\n+                                \"name\": \"merge.count\"\n+                            },\n+                            {\n+                                \"description\": \"The age of the bin, in milliseconds, when it was merged and output. Effectively this is the greatest amount of time that any FlowFile in this bundle remained waiting in this processor before it was output\",\n+                                \"name\": \"merge.bin.age\"\n+                            },\n+                            {\n+                                \"description\": \"UUID of the merged FlowFile that will be added to the original FlowFiles attributes\",\n+                                \"name\": \"merge.uuid\"\n+                            },\n+                            {\n+                                \"description\": \"Any Attribute that the configured Record Writer returns will be added to the FlowFile.\",\n+                                \"name\": \"<Attributes from Record Writer>\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"End Offset\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"Number of bytes removed at the end of the file.\",\n+                                \"displayName\": \"End Offset\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"End Offset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remove All Content\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true a non existing or empty attribute will be 'null' in the resulting CSV. If false an empty string will be placed in the CSV\",\n-                                \"displayName\": \"Null Value\",\n+                                \"description\": \"Remove all content from the FlowFile superseding Start Offset and End Offset properties.\",\n+                                \"displayName\": \"Remove All Content\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"null-value\",\n+                                \"name\": \"Remove All Content\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Start Offset\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"Number of bytes removed at the beginning of the file.\",\n+                                \"displayName\": \"Start Offset\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Start Offset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully converted attributes to CSV\",\n+                                \"description\": \"Processed flowfiles.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Failed to convert attributes to CSV\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"csv\",\n-                            \"flowfile\"\n+                            \"binary\",\n+                            \"discard\",\n+                            \"keep\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.AttributesToCSV\",\n-                        \"typeDescription\": \"Generates a CSV representation of the input FlowFile Attributes. The resulting CSV can be written to either a newly generated attribute named 'CSVAttributes' or written to the FlowFile as content.  If the attribute value contains a comma, newline or double quote, then the attribute value will be escaped with double quotes.  Any double quote characters in the attribute value are escaped with another double quote.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"CSV representation of the Schema\",\n-                                \"name\": \"CSVSchema\"\n-                            },\n-                            {\n-                                \"description\": \"CSV representation of Attributes\",\n-                                \"name\": \"CSVData\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.ModifyBytes\",\n+                        \"typeDescription\": \"Discard byte range at the start and end or all content of a binary file.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attributes List\": {\n-                                \"description\": \"Comma separated list of attributes to be included in the resulting JSON. If this value is left empty then all existing Attributes will be included. This list of attributes is case sensitive. If an attribute specified in the list is not found it will be be emitted to the resulting JSON with an empty string or NULL value.\",\n-                                \"displayName\": \"Attributes List\",\n+                            \"Activity Restored Message\": {\n+                                \"defaultValue\": \"Activity restored at time: ${now():format('yyyy/MM/dd HH:mm:ss')} after being inactive for ${inactivityDurationMillis:toNumber():divide(60000)} minutes\",\n+                                \"description\": \"The message that will be the content of FlowFiles that are sent to 'activity.restored' relationship\",\n+                                \"displayName\": \"Activity Restored Message\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes List\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Activity Restored Message\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Destination\": {\n+                            \"Continually Send Messages\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"flowfile-attribute\",\n-                                \"description\": \"Control if JSON value is written as a new flowfile attribute 'JSONAttributes' or written in the flowfile content. Writing to flowfile content will overwrite any existing flowfile content.\",\n-                                \"displayName\": \"Destination\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will send inactivity indicator continually every Threshold Duration amount of time until activity is restored; if false, will send an indicator only when the flow first becomes inactive\",\n+                                \"displayName\": \"Continually Send Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n+                                \"name\": \"Continually Send Messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Include Core Attributes\": {\n+                            \"Copy Attributes\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines if the FlowFile org.apache.nifi.flowfile.attributes.CoreAttributes which are contained in every FlowFile should be included in the final JSON value generated.\",\n-                                \"displayName\": \"Include Core Attributes\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will copy all flow file attributes from the flow file that resumed activity to the newly created indicator flow file\",\n+                                \"displayName\": \"Copy Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Core Attributes\",\n+                                \"name\": \"Copy Attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"JSON Handling Strategy\": {\n+                            \"Inactivity Message\": {\n+                                \"defaultValue\": \"Lacking activity as of time: ${now():format('yyyy/MM/dd HH:mm:ss')}; flow has been inactive for ${inactivityDurationMillis:toNumber():divide(60000)} minutes\",\n+                                \"description\": \"The message that will be the content of FlowFiles that are sent to the 'inactive' relationship\",\n+                                \"displayName\": \"Inactivity Message\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Inactivity Message\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Monitoring Scope\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Escapes JSON attribute values to strings\",\n-                                        \"displayName\": \"Escaped\",\n-                                        \"value\": \"ESCAPED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"node\",\n+                                        \"value\": \"node\"\n                                     },\n                                     {\n-                                        \"description\": \"Handles JSON attribute values as nested structured objects or arrays\",\n-                                        \"displayName\": \"Nested\",\n-                                        \"value\": \"NESTED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"cluster\",\n+                                        \"value\": \"cluster\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ESCAPED\",\n-                                \"description\": \"Strategy to use for handling attributes which contain nested JSON.\",\n-                                \"displayName\": \"JSON Handling Strategy\",\n+                                \"defaultValue\": \"node\",\n+                                \"description\": \"Specify how to determine activeness of the flow. 'node' means that activeness is examined at individual node separately. It can be useful if DFM expects each node should receive flow files in a distributed manner. With 'cluster', it defines the flow is active while at least one node receives flow files actively. If NiFi is running as standalone mode, this should be set as 'node', if it's 'cluster', NiFi logs a warning message and act as 'node' scope.\",\n+                                \"displayName\": \"Monitoring Scope\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON Handling Strategy\",\n+                                \"name\": \"Monitoring Scope\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Null Value\": {\n+                            \"Reporting Node\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"all\",\n+                                        \"value\": \"all\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"primary\",\n+                                        \"value\": \"primary\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true a non existing selected attribute will be NULL in the resulting JSON. If false an empty string will be placed in the JSON\",\n-                                \"displayName\": \"Null Value\",\n+                                \"defaultValue\": \"all\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"cluster\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Monitoring Scope\",\n+                                        \"propertyName\": \"Monitoring Scope\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify which node should send notification flow-files to inactive and activity.restored relationships. With 'all', every node in this cluster send notification flow-files. 'primary' means flow-files will be sent only from a primary node. If NiFi is running as standalone mode, this should be set as 'all', even if it's 'primary', NiFi act as 'all'.\",\n+                                \"displayName\": \"Reporting Node\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null Value\",\n+                                \"name\": \"Reporting Node\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pretty Print\": {\n+                            \"Reset State on Restart\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"flowfile-content\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Destination\",\n-                                        \"propertyName\": \"Destination\"\n-                                    }\n-                                ],\n-                                \"description\": \"Apply pretty print formatting to the output.\",\n-                                \"displayName\": \"Pretty Print\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When the processor gets started or restarted, if set to true, the initial state will always be active. Otherwise, the last reported flow state will be preserved.\",\n+                                \"displayName\": \"Reset State on Restart\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pretty Print\",\n+                                \"name\": \"Reset State on Restart\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attributes-to-json-regex\": {\n-                                \"description\": \"Regular expression that will be evaluated against the flow file attributes to select the matching attributes. This property can be used in combination with the attributes list property.\",\n-                                \"displayName\": \"Attributes Regular Expression\",\n+                            \"Threshold Duration\": {\n+                                \"defaultValue\": \"5 min\",\n+                                \"description\": \"Determines how much time must elapse before considering the flow to be inactive\",\n+                                \"displayName\": \"Threshold Duration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"attributes-to-json-regex\",\n-                                \"required\": false,\n+                                \"name\": \"Threshold Duration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Wait for Activity\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"When the processor gets started or restarted, if set to true, only send an inactive indicator if there had been activity beforehand. Otherwise send an inactive indicator even if there had not been activity beforehand.\",\n+                                \"displayName\": \"Wait for Activity\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Wait for Activity\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n+                        \"stateful\": {\n+                            \"description\": \"MonitorActivity stores the last timestamp at each node as state, so that it can examine activity at cluster wide. If 'Copy Attribute' is set to true, then flow file attributes are also persisted. In local scope, it stores last known activity timestamp if the flow is inactive.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully converted attributes to JSON\",\n+                                \"description\": \"This relationship is used to transfer an Inactivity indicator when no FlowFiles are routed to 'success' for Threshold Duration amount of time\",\n+                                \"name\": \"inactive\"\n+                            },\n+                            {\n+                                \"description\": \"All incoming FlowFiles are routed to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Failed to convert attributes to JSON\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"This relationship is used to transfer an Activity Restored indicator when FlowFiles are routing to 'success' following a period of inactivity\",\n+                                \"name\": \"activity.restored\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"flowfile\",\n-                            \"json\"\n+                            \"active\",\n+                            \"activity\",\n+                            \"detection\",\n+                            \"flow\",\n+                            \"inactive\",\n+                            \"monitor\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.AttributesToJSON\",\n-                        \"typeDescription\": \"Generates a JSON representation of the input FlowFile Attributes. The resulting JSON can be written to either a new Attribute 'JSONAttributes' or written to the FlowFile as content. Attributes  which contain nested JSON objects can either be handled as JSON or as escaped JSON depending on the strategy chosen.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.MonitorActivity\",\n+                        \"typeDescription\": \"Monitors the flow for activity and sends out an indicator when the flow has not had any data for some specified amount of time and again when the flow's activity is restored\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"JSON representation of Attributes\",\n-                                \"name\": \"JSONAttributes\"\n+                                \"description\": \"The time at which Inactivity began, in the form of milliseconds since Epoch\",\n+                                \"name\": \"inactivityStartMillis\"\n+                            },\n+                            {\n+                                \"description\": \"The number of milliseconds that the inactivity has spanned\",\n+                                \"name\": \"inactivityDurationMillis\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -95469,81 +95611,137 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.standard.EncodeContent\"\n-                        ],\n-                        \"deprecationReason\": \"EncodeContent supports Base64 and additional encoding schemes\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Encode\",\n-                                        \"value\": \"Encode\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Decode\",\n-                                        \"value\": \"Decode\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Encode\",\n-                                \"description\": \"Specifies whether the content should be encoded or decoded\",\n-                                \"displayName\": \"Mode\",\n+                            \"attribute-cache-regex\": {\n+                                \"description\": \"Any attributes whose names match this regex will be stored in the distributed cache to be copied to any FlowFiles released from a corresponding Wait processor.  Note that the uuid attribute will not be cached regardless of this value.  If blank, no attributes will be cached.\",\n+                                \"displayName\": \"Attribute Cache Regex\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mode\",\n+                                \"name\": \"attribute-cache-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"distributed-cache-service\": {\n+                                \"description\": \"The Controller Service that is used to cache release signals in order to release files queued at a corresponding Wait processor\",\n+                                \"displayName\": \"Distributed Cache Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"distributed-cache-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"release-signal-id\": {\n+                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the release signal cache key\",\n+                                \"displayName\": \"Release Signal Identifier\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"release-signal-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"signal-buffer-count\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Specify the maximum number of incoming flow files that can be buffered until signals are notified to cache service. The more buffer can provide the better performance, as it reduces the number of interactions with cache service by grouping signals by signal identifier when multiple incoming flow files share the same signal identifier.\",\n+                                \"displayName\": \"Signal Buffer Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"signal-buffer-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"signal-counter-delta\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the signal counter delta. Specify how much the counter should increase. For example, if multiple signal events are processed at upstream flow in batch oriented way, the number of events processed can be notified with this property at once. Zero (0) has a special meaning, it clears target count back to 0, which is especially useful when used with Wait Releasable FlowFile Count = Zero (0) mode, to provide 'open-close-gate' type of flow control. One (1) can open a corresponding Wait processor, and Zero (0) can negate it as if closing a gate.\",\n+                                \"displayName\": \"Signal Counter Delta\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"signal-counter-delta\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"signal-counter-name\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the signal counter name. Signal counter name is useful when a corresponding Wait processor needs to know the number of occurrences of different types of events, such as success or failure, or destination data source names, etc.\",\n+                                \"displayName\": \"Signal Counter Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"signal-counter-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.Wait\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully encoded or decoded will be routed to success\",\n+                                \"description\": \"All FlowFiles where the release signal has been successfully entered in the cache will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that cannot be encoded or decoded will be routed to failure\",\n+                                \"description\": \"When the cache cannot be reached, or if the Release Signal Identifier evaluates to null or empty, FlowFiles will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"base64\",\n-                            \"encode\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"notify\",\n+                            \"release\",\n+                            \"signal\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.Base64EncodeContent\",\n-                        \"typeDescription\": \"Encodes or decodes content to and from base64\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.Notify\",\n+                        \"typeDescription\": \"Caches a release signal identifier in the distributed cache, optionally along with the FlowFile's attributes.  Any flow files held at a corresponding Wait processor will be released once this signal in the cache is discovered.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All FlowFiles will have an attribute 'notified'. The value of this attribute is true, is the FlowFile is notified, otherwise false.\",\n+                                \"name\": \"notified\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -95552,97 +95750,71 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"A Record Path value, pointing to a field to be counted\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Record Path property\",\n-                                \"value\": \"The Record Path value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"record-stats-limit\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Limit the number of individual stats that are returned for each record path to the top N results.\",\n-                                \"displayName\": \"record-stats-limit\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"record-stats-limit\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-stats-reader\": {\n-                                \"description\": \"A record reader to use for reading the records.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"max-batch-size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Maximum number of FlowFiles to package into one output FlowFile using a best effort, non guaranteed approach. Multiple input queues can produce unexpected batching behavior.\",\n+                                \"displayName\": \"Maximum Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-stats-reader\",\n+                                \"name\": \"max-batch-size\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.MergeContent\",\n+                            \"org.apache.nifi.processors.standard.UnpackContent\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a flowfile is successfully processed, it goes here.\",\n+                                \"description\": \"The packaged FlowFile is sent to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a flowfile fails to be processed, it goes here.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The FlowFiles that were used to create the package are sent to this relationship\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"metrics\",\n-                            \"record\",\n-                            \"stats\"\n+                            \"attributes\",\n+                            \"flowfile\",\n+                            \"flowfile-stream\",\n+                            \"flowfile-stream-v3\",\n+                            \"package\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.CalculateRecordStats\",\n-                        \"typeDescription\": \"A processor that can count the number of items in a record set, as well as provide counts based on user-defined criteria on subsets of the record set.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PackageFlowFile\",\n+                        \"typeDescription\": \"This processor will package FlowFile attributes and content into an output FlowFile that can be exported from NiFi and imported back into NiFi, preserving the original attributes and content.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"A count of the records in the record set in the FlowFile.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"A count of the records that contain a value for the user defined property.\",\n-                                \"name\": \"recordStats.<User Defined Property Name>.count\"\n-                            },\n-                            {\n-                                \"description\": \"Each value discovered for the user defined property will have its own count attribute. Total number of top N value counts to be added is defined by the limit configuration.\",\n-                                \"name\": \"recordStats.<User Defined Property Name>.<value>.count\"\n+                                \"description\": \"The mime.type will be changed to application/flowfile-v3\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -95661,471 +95833,224 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Compression Format\": {\n+                            \"ACCEPT_EMPTY_EXTENSIONS\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"use mime.type attribute\",\n-                                        \"value\": \"use mime.type attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"deflate\",\n-                                        \"value\": \"deflate\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lzma\",\n-                                        \"value\": \"lzma\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy-hadoop\",\n-                                        \"value\": \"snappy-hadoop\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy framed\",\n-                                        \"value\": \"snappy framed\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4-framed\",\n-                                        \"value\": \"lz4-framed\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"brotli\",\n-                                        \"value\": \"brotli\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"use mime.type attribute\",\n-                                \"description\": \"The compression format to use. Valid values are: GZIP, Deflate, ZSTD, BZIP2, XZ-LZMA2, LZMA, Brotli, Snappy, Snappy Hadoop, Snappy Framed, and LZ4-Framed\",\n-                                \"displayName\": \"Compression Format\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, empty extensions will be accepted and will be associated to a null value.\",\n+                                \"displayName\": \"Accept empty extensions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Format\",\n+                                \"name\": \"ACCEPT_EMPTY_EXTENSIONS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Compression Level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"0\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"3\",\n-                                        \"value\": \"3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"4\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"5\",\n-                                        \"value\": \"5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"6\",\n-                                        \"value\": \"6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"7\",\n-                                        \"value\": \"7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"8\",\n-                                        \"value\": \"8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"9\",\n-                                        \"value\": \"9\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"zstd\",\n-                                            \"use mime.type attribute\",\n-                                            \"deflate\",\n-                                            \"brotli\",\n-                                            \"gzip\",\n-                                            \"xz-lzma2\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Compression Format\",\n-                                        \"propertyName\": \"Compression Format\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"compress\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Mode\",\n-                                        \"propertyName\": \"Mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"The compression level to use; this is valid only when using gzip, deflate or xz-lzma2 compression. A lower value results in faster processing but less compression; a value of 0 indicates no (that is, simple archiving) for gzip or minimal for xz-lzma2 compression. Higher levels can mean much larger memory usage such as the case with levels 7-9 for xz-lzma/2 so be careful relative to heap size.\",\n-                                \"displayName\": \"Compression Level\",\n+                            \"APPEND_RAW_MESSAGE_TO_JSON\": {\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When using flowfile-content (i.e. JSON output), add the original CEF message to the resulting JSON object. The original message is added as a string to _raw.\",\n+                                \"displayName\": \"Append raw message to JSON\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Level\",\n+                                \"name\": \"APPEND_RAW_MESSAGE_TO_JSON\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mode\": {\n+                            \"DATETIME_REPRESENTATION\": {\n+                                \"defaultValue\": \"en-US\",\n+                                \"description\": \"The IETF BCP 47 representation of the Locale to be used when parsing date fields with long or short month names (e.g. may <en-US> vs. mai. <fr-FR>. The defaultvalue is generally safe. Only change if having issues parsing CEF messages\",\n+                                \"displayName\": \"DateTime Locale\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"DATETIME_REPRESENTATION\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"FIELDS_DESTINATION\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"compress\",\n-                                        \"value\": \"compress\"\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"decompress\",\n-                                        \"value\": \"decompress\"\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"compress\",\n-                                \"description\": \"Indicates whether the processor should compress content or decompress content. Must be either 'compress' or 'decompress'\",\n-                                \"displayName\": \"Mode\",\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the CEF parser are written to the FlowFile content or a FlowFile attribute; if using flowfile-attributeattribute, fields will be populated as attributes. If set to flowfile-content, the CEF extension field will be converted into a flat JSON object.\",\n+                                \"displayName\": \"Parsed fields destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mode\",\n+                                \"name\": \"FIELDS_DESTINATION\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Update Filename\": {\n+                            \"INCLUDE_CUSTOM_EXTENSIONS\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will remove the filename extension when decompressing data (only if the extension indicates the appropriate compression format) and add the appropriate extension when compressing data\",\n-                                \"displayName\": \"Update Filename\",\n+                                \"description\": \"If set to true, custom extensions (not specified in the CEF specifications) will be included in the generated data/attributes.\",\n+                                \"displayName\": \"Include custom extensions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Update Filename\",\n+                                \"name\": \"INCLUDE_CUSTOM_EXTENSIONS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the Compression Format is set to use mime.type attribute, this attribute is used to determine the compression type. Otherwise, this attribute is ignored.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles will be transferred to the success relationship after successfully being compressed or decompressed\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles will be transferred to the failure relationship if they fail to compress/decompress\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"CPU\"\n-                            },\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"brotli\",\n-                            \"bzip2\",\n-                            \"compress\",\n-                            \"content\",\n-                            \"decompress\",\n-                            \"deflate\",\n-                            \"gzip\",\n-                            \"lz4-framed\",\n-                            \"lzma\",\n-                            \"snappy\",\n-                            \"snappy framed\",\n-                            \"snappy-hadoop\",\n-                            \"xz-lzma2\",\n-                            \"zstd\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.CompressContent\",\n-                        \"typeDescription\": \"Compresses or decompresses the contents of FlowFiles using a user-specified compression algorithm and updates the mime.type attribute as appropriate. A common idiom is to precede CompressContent with IdentifyMimeType and configure Mode='decompress' AND Compression Format='use mime.type attribute'. When used in this manner, the MIME type is automatically detected and the data is decompressed, if necessary. If decompression is unnecessary, the data is passed through to the 'success' relationship. This processor operates in a very memory efficient way so very large objects well beyond the heap size are generally fine to process.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the Mode property is set to compress, the appropriate MIME Type is set. If the Mode property is set to decompress and the file is successfully decompressed, this attribute is removed, as the MIME Type is no longer known.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Grouping Attribute\": {\n-                                \"description\": \"By default, a single \\\"throttle\\\" is used for all FlowFiles. If this value is specified, a separate throttle is used for each value specified by the attribute with this name. Changing this value resets the rate counters.\",\n-                                \"displayName\": \"Grouping Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grouping Attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum Data Rate\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"data rate or flowfile count\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum rate at which data should pass through this processor. The format of this property is expected to be a Data Size (such as '1 MB') representing bytes per Time Duration.\",\n-                                \"displayName\": \"Maximum Data Rate\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Data Rate\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum FlowFile Rate\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"data rate or flowfile count\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum rate at which FlowFiles should pass through this processor. The format of this property is expected to be a positive integer representing FlowFiles count per Time Duration\",\n-                                \"displayName\": \"Maximum FlowFile Rate\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum FlowFile Rate\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum Rate\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"data rate\",\n-                                            \"attribute value\",\n-                                            \"flowfile count\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum rate at which data should pass through this processor. The format of this property is expected to be a positive integer, or a Data Size (such as '1 MB') if Rate Control Criteria is set to 'data rate'.\",\n-                                \"displayName\": \"Maximum Rate\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Rate\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             },\n-                            \"Rate Control Criteria\": {\n+                            \"TIME_REPRESENTATION\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Rate is controlled by counting bytes transferred per time duration.\",\n-                                        \"displayName\": \"data rate\",\n-                                        \"value\": \"data rate\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Rate is controlled by counting FlowFiles transferred per time duration\",\n-                                        \"displayName\": \"flowfile count\",\n-                                        \"value\": \"flowfile count\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Rate is controlled by accumulating the value of a specified attribute that is transferred per time duration\",\n-                                        \"displayName\": \"attribute value\",\n-                                        \"value\": \"attribute value\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTC\",\n+                                        \"value\": \"UTC\"\n                                     },\n                                     {\n-                                        \"description\": \"Rate is controlled by counting bytes and FlowFiles transferred per time duration; if either threshold is met, throttling is enforced\",\n-                                        \"displayName\": \"data rate or flowfile count\",\n-                                        \"value\": \"data rate or flowfile count\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"data rate\",\n-                                \"description\": \"Indicates the criteria that is used to control the throughput rate. Changing this value resets the rate counters.\",\n-                                \"displayName\": \"Rate Control Criteria\",\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Local Timezone (system Default)\",\n+                                        \"value\": \"Local Timezone (system Default)\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Local Timezone (system Default)\",\n+                                \"description\": \"Timezone to be used when representing date fields. UTC will convert all dates to UTC, while Local Timezone will convert them to the timezone used by NiFi.\",\n+                                \"displayName\": \"Timezone\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Rate Control Criteria\",\n+                                \"name\": \"TIME_REPRESENTATION\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Rate Controlled Attribute\": {\n-                                \"dependencies\": [\n+                            \"VALIDATE_DATA\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"attribute value\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The name of an attribute whose values build toward the rate limit if Rate Control Criteria is set to 'attribute value'. The value of the attribute referenced by this property must be a positive long, or the FlowFile will be routed to failure. This value is ignored if Rate Control Criteria is not set to 'attribute value'. Changing this value resets the rate counters.\",\n-                                \"displayName\": \"Rate Controlled Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Rate Controlled Attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Duration\": {\n-                                \"defaultValue\": \"1 min\",\n-                                \"description\": \"The amount of time to which the Maximum Rate pertains. Changing this value resets the rate counters.\",\n-                                \"displayName\": \"Time Duration\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If set to true, the event will be validated against the CEF standard (revision 23). If the event is invalid, the FlowFile will be routed to the failure relationship. If this property is set to false, the event will be processed without validating the data.\",\n+                                \"displayName\": \"Validate the CEF event\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Duration\",\n+                                \"name\": \"VALIDATE_DATA\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n+                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are transferred to this relationship under normal conditions\",\n+                                \"description\": \"Any FlowFile that is successfully parsed as a CEF message will be transferred to this Relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles will be routed to this relationship if they are missing a necessary Rate Controlled Attribute or the attribute is not in the expected format\",\n+                                \"description\": \"Any FlowFile that could not be parsed as a CEF message will be transferred to this Relationship without any attributes being added\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"rate\",\n-                            \"rate control\",\n-                            \"throttle\",\n-                            \"throughput\"\n+                            \"attributes\",\n+                            \"cef\",\n+                            \"event\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"system\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ControlRate\",\n-                        \"typeDescription\": \"Controls the rate at which data is transferred to follow-on processors. If you configure a very small Time Duration, then the accuracy of the throttle gets worse. You can improve this accuracy by decreasing the Yield Duration, at the expense of more Tasks given to the processor.\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.ParseCEF\",\n+                        \"typeDescription\": \"Parses the contents of a CEF formatted message and adds attributes to the FlowFile for headers and extensions of the parts of the CEF message.\\nNote: This Processor expects CEF messages WITHOUT the syslog headers (i.e. starting at \\\"CEF:0\\\"\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The version of the CEF message.\",\n+                                \"name\": \"cef.header.version\"\n+                            },\n+                            {\n+                                \"description\": \"The Device Vendor of the CEF message.\",\n+                                \"name\": \"cef.header.deviceVendor\"\n+                            },\n+                            {\n+                                \"description\": \"The Device Product of the CEF message.\",\n+                                \"name\": \"cef.header.deviceProduct\"\n+                            },\n+                            {\n+                                \"description\": \"The Device Version of the CEF message.\",\n+                                \"name\": \"cef.header.deviceVersion\"\n+                            },\n+                            {\n+                                \"description\": \"The Device Event Class ID of the CEF message.\",\n+                                \"name\": \"cef.header.deviceEventClassId\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the CEF message.\",\n+                                \"name\": \"cef.header.name\"\n+                            },\n+                            {\n+                                \"description\": \"The severity of the CEF message.\",\n+                                \"name\": \"cef.header.severity\"\n+                            },\n+                            {\n+                                \"description\": \"The key and value generated by the parsing of the message.\",\n+                                \"name\": \"cef.extension.*\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n@@ -96142,400 +96067,280 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Input Character Set\": {\n-                                \"description\": \"The name of the CharacterSet to expect for Input\",\n-                                \"displayName\": \"Input Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Input Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Output Character Set\": {\n-                                \"description\": \"The name of the CharacterSet to convert to\",\n-                                \"displayName\": \"Output Character Set\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies which character set of the Syslog messages\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Output Character Set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n+                            \"org.apache.nifi.processors.standard.PutSyslog\"\n+                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"\",\n+                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be parsed as a Syslog message will be transferred to this Relationship without any attributes being added\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"character set\",\n-                            \"characterset\",\n-                            \"convert\",\n-                            \"text\"\n+                            \"attributes\",\n+                            \"event\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"syslog\",\n+                            \"system\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ConvertCharacterSet\",\n-                        \"typeDescription\": \"Converts a FlowFile's content from one character set to another\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.ParseSyslog\",\n+                        \"typeDescription\": \"Attempts to parses the contents of a Syslog message in accordance to RFC5424 and RFC3164 formats and adds attributes to the FlowFile for each of the parts of the Syslog message.Note: Be mindfull that RFC3164 is informational and a wide range of different implementations are present in the wild. If messages fail parsing, considering using RFC5424 or using a generic parsing processors such as ExtractGrok.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The priority of the Syslog message.\",\n+                                \"name\": \"syslog.priority\"\n+                            },\n+                            {\n+                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.severity\"\n+                            },\n+                            {\n+                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.facility\"\n+                            },\n+                            {\n+                                \"description\": \"The optional version from the Syslog message.\",\n+                                \"name\": \"syslog.version\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of the Syslog message.\",\n+                                \"name\": \"syslog.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname or IP address of the Syslog message.\",\n+                                \"name\": \"syslog.hostname\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n+                                \"name\": \"syslog.sender\"\n+                            },\n+                            {\n+                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n+                                \"name\": \"syslog.body\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Catalog Name\": {\n-                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty\",\n-                                \"displayName\": \"Catalog Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Catalog Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"JDBC Connection Pool\": {\n-                                \"description\": \"Specifies the JDBC Connection Pool to use in order to convert the JSON message to a SQL statement. The Connection Pool is necessary in order to determine the appropriate database column types.\",\n-                                \"displayName\": \"JDBC Connection Pool\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JDBC Connection Pool\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Schema Name\": {\n-                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Schema Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Statement Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UPDATE\",\n-                                        \"value\": \"UPDATE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INSERT\",\n-                                        \"value\": \"INSERT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DELETE\",\n-                                        \"value\": \"DELETE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Use statement.type Attribute\",\n-                                        \"value\": \"Use statement.type Attribute\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the type of SQL Statement to generate\",\n-                                \"displayName\": \"Statement Type\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies which character set of the Syslog messages\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Statement Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the table that the statement should update\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Translate Field Names\": {\n+                            \"include_policy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"If true, the Processor will attempt to translate JSON field names into the appropriate column names for the table specified. If false, the JSON field names must match the column names exactly, or the column will not be updated\",\n-                                \"displayName\": \"Translate Field Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Translate Field Names\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Unmatched Column Behavior\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any column in the database that does not have a field in the JSON document will be assumed to not be required.  No notification will be logged\",\n-                                        \"displayName\": \"Ignore Unmatched Columns\",\n-                                        \"value\": \"Ignore Unmatched Columns\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Any column in the database that does not have a field in the JSON document will be assumed to not be required.  A warning will be logged\",\n-                                        \"displayName\": \"Warn on Unmatched Columns\",\n-                                        \"value\": \"Warn on Unmatched Columns\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the JSON document.  An error will be logged\",\n-                                        \"displayName\": \"Fail on Unmatched Columns\",\n-                                        \"value\": \"Fail on Unmatched Columns\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Fail on Unmatched Columns\",\n-                                \"description\": \"If an incoming JSON element does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Column Behavior\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Unmatched Column Behavior\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Unmatched Field Behavior\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any field in the JSON document that cannot be mapped to a column in the database is ignored\",\n-                                        \"displayName\": \"Ignore Unmatched Fields\",\n-                                        \"value\": \"Ignore Unmatched Fields\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the JSON document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n-                                        \"displayName\": \"Fail\",\n-                                        \"value\": \"Fail\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Ignore Unmatched Fields\",\n-                                \"description\": \"If an incoming JSON element has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Field Behavior\",\n+                                \"description\": \"If true, then the Syslog Message body will be included in the attributes.\",\n+                                \"displayName\": \"Include Message Body in Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Unmatched Field Behavior\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Update Keys\": {\n-                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the table's Primary Keys are used. In this case, if no Primary Key exists, the conversion to SQL will fail if Unmatched Column Behaviour is set to FAIL. This property is ignored if the Statement Type is INSERT\",\n-                                \"displayName\": \"Update Keys\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Update Keys\",\n+                                \"name\": \"include_policy\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"jts-quoted-identifiers\": {\n+                            \"nil_policy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The missing field will not have an attribute added.\",\n+                                        \"displayName\": \"OMIT\",\n+                                        \"value\": \"OMIT\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n-                                \"displayName\": \"Quote Column Identifiers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jts-quoted-identifiers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"jts-quoted-table-identifiers\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The missing field will have an empty attribute added.\",\n+                                        \"displayName\": \"NULL\",\n+                                        \"value\": \"NULL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The missing field will have an attribute added with the value of '-'.\",\n+                                        \"displayName\": \"DASH\",\n+                                        \"value\": \"DASH\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name\",\n-                                \"displayName\": \"Quote Table Identifiers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jts-quoted-table-identifiers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"jts-sql-param-attr-prefix\": {\n-                                \"defaultValue\": \"sql\",\n-                                \"description\": \"The string to be prepended to the outgoing flow file attributes, such as <sql>.args.1.value, where <sql> is replaced with the specified value\",\n-                                \"displayName\": \"SQL Parameter Attribute Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"jts-sql-param-attr-prefix\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"table-schema-cache-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies how many Table Schemas should be cached\",\n-                                \"displayName\": \"Table Schema Cache Size\",\n+                                \"defaultValue\": \"NULL\",\n+                                \"description\": \"Defines how NIL values are handled for header fields.\",\n+                                \"displayName\": \"NIL Policy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"table-schema-cache-size\",\n+                                \"name\": \"nil_policy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutDatabaseRecord\",\n-                            \"org.apache.nifi.processors.standard.PutSQL\"\n+                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n+                            \"org.apache.nifi.processors.standard.PutSyslog\"\n                         ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship when its contents have successfully been converted into a SQL statement\",\n-                                \"name\": \"sql\"\n+                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be converted into a SQL statement. Common causes include invalid JSON content or the JSON content missing a required field (if using an INSERT statement type).\",\n+                                \"description\": \"Any FlowFile that could not be parsed as a Syslog message will be transferred to this Relationship without any attributes being added\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"When a FlowFile is converted to SQL, the original JSON FlowFile is routed to this relationship\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"delete\",\n-                            \"flat\",\n-                            \"insert\",\n-                            \"json\",\n-                            \"rdbms\",\n-                            \"relational\",\n-                            \"sql\",\n-                            \"update\"\n+                            \"attributes\",\n+                            \"event\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"syslog\",\n+                            \"syslog5424\",\n+                            \"system\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ConvertJSONToSQL\",\n-                        \"typeDescription\": \"Converts a JSON-formatted FlowFile into an UPDATE, INSERT, or DELETE SQL statement. The incoming FlowFile is expected to be \\\"flat\\\" JSON message, meaning that it consists of a single JSON element and each field maps to a simple type. If a field maps to a JSON object, that JSON object will be interpreted as Text. If the input is an array of JSON elements, each element in the array is output as a separate FlowFile to the 'sql' relationship. Upon successful conversion, the original FlowFile is routed to the 'original' relationship and the SQL is routed to the 'sql' relationship.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ParseSyslog5424\",\n+                        \"typeDescription\": \"Attempts to parse the contents of a well formed Syslog message in accordance to RFC5424 format and adds attributes to the FlowFile for each of the parts of the Syslog message, including Structured Data.Structured Data will be written to attributes as one attribute per item id + parameter see https://tools.ietf.org/html/rfc5424.Note: ParseSyslog5424 follows the specification more closely than ParseSyslog.  If your Syslog producer does not follow the spec closely, with regards to using '-' for missing header entries for example, those logs will fail with this parser, where they would not fail with ParseSyslog.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets mime.type of FlowFile that is routed to 'sql' to 'text/plain'.\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The priority of the Syslog message.\",\n+                                \"name\": \"syslog.priority\"\n                             },\n                             {\n-                                \"description\": \"Sets the <sql>.table attribute of FlowFile that is routed to 'sql' to the name of the table that is updated by the SQL statement. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n-                                \"name\": \"<sql>.table\"\n+                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.severity\"\n                             },\n                             {\n-                                \"description\": \"If the Catalog name is set for this database, specifies the name of the catalog that the SQL statement will update. If no catalog is used, this attribute will not be added. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n-                                \"name\": \"<sql>.catalog\"\n+                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.facility\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles routed to the 'sql' relationship for the same incoming FlowFile (multiple will be output for the same incoming FlowFile if the incoming FlowFile is a JSON Array) will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n+                                \"description\": \"The optional version from the Syslog message.\",\n+                                \"name\": \"syslog.version\"\n                             },\n                             {\n-                                \"description\": \"The number of SQL FlowFiles that were produced for same incoming FlowFile. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming FlowFile.\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"The timestamp of the Syslog message.\",\n+                                \"name\": \"syslog.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same incoming FlowFile. This can be used in conjunction with the fragment.identifier and fragment.count attributes to know which FlowFiles originated from the same incoming FlowFile and in what order the SQL FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"The hostname or IP address of the Syslog message.\",\n+                                \"name\": \"syslog.hostname\"\n                             },\n                             {\n-                                \"description\": \"The output SQL statements are parametrized in order to avoid SQL Injection Attacks. The types of the Parameters to use are stored in attributes named <sql>.args.1.type, <sql>.args.2.type, <sql>.args.3.type, and so on. The type is a number representing a JDBC Type constant. Generally, this is useful only for software to read and interpret but is added so that a processor such as PutSQL can understand how to interpret the values. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n-                                \"name\": \"<sql>.args.N.type\"\n+                                \"description\": \"The appname of the Syslog message.\",\n+                                \"name\": \"syslog.appname\"\n                             },\n                             {\n-                                \"description\": \"The output SQL statements are parametrized in order to avoid SQL Injection Attacks. The values of the Parameters to use are stored in the attributes named sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. Each of these attributes has a corresponding <sql>.args.N.type attribute that indicates how the value should be interpreted when inserting it into the database.The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n-                                \"name\": \"<sql>.args.N.value\"\n+                                \"description\": \"The procid of the Syslog message.\",\n+                                \"name\": \"syslog.procid\"\n+                            },\n+                            {\n+                                \"description\": \"The messageid the Syslog message.\",\n+                                \"name\": \"syslog.messageid\"\n+                            },\n+                            {\n+                                \"description\": \"Multiple entries per structuredData of the Syslog message.\",\n+                                \"name\": \"syslog.structuredData\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n+                                \"name\": \"syslog.sender\"\n+                            },\n+                            {\n+                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n+                                \"name\": \"syslog.body\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -96545,41 +96350,26 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Each dynamic property represents a RecordPath that will be evaluated against each record in an incoming FlowFile. When the value of the RecordPath is determined for a Record, an attribute is added to the outgoing FlowFile. The name of the attribute is the same as the name of this property. The value of the attribute is the same as the value of the field in the Record that the RecordPath points to. Note that no attribute will be added if the value returned for the RecordPath is null or is not a scalar value (i.e., the value is an Array, Map, or Record).\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name given to the dynamic property is the name of the attribute that will be used to denote the value of the associated RecordPath.\",\n+                                \"value\": \"A RecordPath that points to a field in the Record.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"include-zero-record-flowfiles\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When converting an incoming FlowFile, if the conversion results in no data, this property specifies whether or not a FlowFile will be sent to the corresponding relationship\",\n-                                \"displayName\": \"Include Zero Record FlowFiles\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-zero-record-flowfiles\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n                             \"record-reader\": {\n                                 \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n                                 \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-reader\",\n@@ -96605,329 +96395,367 @@\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ConvertRecord\",\n+                            \"org.apache.nifi.processors.standard.QueryRecord\",\n+                            \"org.apache.nifi.processors.standard.SplitRecord\",\n+                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"description\": \"FlowFiles that are successfully partitioned will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n+                                \"description\": \"If a FlowFile cannot be partitioned from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Once all records in an incoming FlowFile have been partitioned, the original FlowFile is routed to this relationship.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"convert\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"log\",\n-                            \"logs\",\n+                            \"bin\",\n+                            \"group\",\n+                            \"organize\",\n+                            \"partition\",\n                             \"record\",\n-                            \"schema\",\n-                            \"text\"\n+                            \"recordpath\",\n+                            \"rpath\",\n+                            \"segment\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ConvertRecord\",\n-                        \"typeDescription\": \"Converts records from one data format to another using configured Record Reader and Record Write Controller Services. The Reader and Writer must be configured with \\\"matching\\\" schemas. By this, we mean the schemas must have the same field names. The types of the fields do not have to be the same if a field value can be coerced from one type to another. For instance, if the input schema has a field named \\\"balance\\\" of type double, the output schema can have a field named \\\"balance\\\" with a type of string, double, or float. If any field is present in the input that is not present in the output, the field will be left out of the output. If any field is specified in the output schema but is not present in the input data/schema, then the field will not be present in the output or will have a null value, depending on the writer.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PartitionRecord\",\n+                        \"typeDescription\": \"Splits, or partitions, record-oriented data based on the configured fields in the data. One or more properties must be added. The name of the property is the name of an attribute to add. The value of the property is a RecordPath to evaluate against each Record. Two records will go to the same outbound FlowFile only if they have the same value for each of the given RecordPaths. Because we know that all records in a given output FlowFile have the same value for the fields that are specified by the RecordPath, an attribute is added for each field. See Additional Details on the Usage page for more information and examples.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"description\": \"The number of records in an outgoing FlowFile\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type that the configured Record Writer indicates is appropriate\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"All partitioned FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"A one-up number that indicates the ordering of the partitioned FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            },\n+                            {\n+                                \"description\": \"For each dynamic property that is added, an attribute may be added to the FlowFile. See the description for Dynamic Properties for more information.\",\n+                                \"name\": \"<dynamic property name>\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.standard.InvokeHTTP\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"ajust-immediately\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the counter will be updated immediately, without regard to whether the ProcessSession is commit or rolled back;otherwise, the counter will be incremented only if and when the ProcessSession is committed.\",\n-                                \"displayName\": \"Call Immediate Adjustment\",\n+                            \"Attributes to Send as HTTP Headers (Regex)\": {\n+                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be sent as HTTP Headers\",\n+                                \"displayName\": \"Attributes to Send as HTTP Headers (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ajust-immediately\",\n-                                \"required\": true,\n+                                \"name\": \"Attributes to Send as HTTP Headers (Regex)\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"character-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-1\",\n-                                        \"value\": \"ISO-8859-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-8\",\n-                                        \"value\": \"UTF-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16\",\n-                                        \"value\": \"UTF-16\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16LE\",\n-                                        \"value\": \"UTF-16LE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16BE\",\n-                                        \"value\": \"UTF-16BE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US-ASCII\",\n-                                        \"value\": \"US-ASCII\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies a character encoding to use.\",\n-                                \"displayName\": \"Character Encoding\",\n+                            \"Compression Level\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Determines the GZIP Compression Level to use when sending the file; the value must be in the range of 0-9. A value of 0 indicates that the file will not be GZIP'ed\",\n+                                \"displayName\": \"Compression Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"character-encoding\",\n+                                \"name\": \"Compression Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"split-words-on-symbols\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, the word count will identify strings separated by common logical delimiters [ _ - . ] as independent words (ex. split-words-on-symbols = 4 words).\",\n-                                \"displayName\": \"Split Words on Symbols\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"How long to wait when attempting to connect to the remote server before giving up\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"split-words-on-symbols\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"text-character-count\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, will count the number of characters (including whitespace and symbols, but not including newlines and carriage returns) present in the incoming text.\",\n-                                \"displayName\": \"Count Characters\",\n+                            \"Content-Type\": {\n+                                \"defaultValue\": \"${mime.type}\",\n+                                \"description\": \"The Content-Type to specify for the content of the FlowFile being POSTed if Send as FlowFile is false. In the case of an empty value after evaluating an expression language expression, Content-Type defaults to application/octet-stream\",\n+                                \"displayName\": \"Content-Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Content-Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"How long to wait between receiving segments of data from the remote server before giving up and discarding the partial file\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"text-character-count\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"text-line-count\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If enabled, will count the number of lines present in the incoming text.\",\n-                                \"displayName\": \"Count Lines\",\n+                            \"Max Batch Size\": {\n+                                \"defaultValue\": \"100 MB\",\n+                                \"description\": \"If the Send as FlowFile property is true, specifies the max data size for a batch of FlowFiles to send in a single HTTP POST. If not specified, each FlowFile will be sent separately. If the Send as FlowFile property is false, this property is ignored\",\n+                                \"displayName\": \"Max Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"text-line-count\",\n-                                \"required\": true,\n+                                \"name\": \"Max Batch Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"text-line-nonempty-count\": {\n+                            \"Max Data to Post per Second\": {\n+                                \"description\": \"The maximum amount of data to send per second; this allows the bandwidth to be throttled to a specified data rate; if not specified, the data rate is not throttled\",\n+                                \"displayName\": \"Max Data to Post per Second\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Data to Post per Second\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password required to access the URL\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Send as FlowFile\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, will count the number of lines that contain a non-whitespace character present in the incoming text.\",\n-                                \"displayName\": \"Count Non-Empty Lines\",\n+                                \"description\": \"If true, will package the FlowFile's contents and attributes together and send the FlowFile Package; otherwise, will send only the FlowFile's content\",\n+                                \"displayName\": \"Send as FlowFile\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"text-line-nonempty-count\",\n+                                \"name\": \"Send as FlowFile\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"text-word-count\": {\n+                            \"URL\": {\n+                                \"description\": \"The URL to POST to. The URL may be defined using the Attribute Expression Language. A separate connection pool will be created for each unique host:port combination.\",\n+                                \"displayName\": \"URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Use Chunked Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, will count the number of words (alphanumeric character groups bounded by whitespace) present in the incoming text. Common logical delimiters [_-.] do not bound a word unless 'Split Words on Symbols' is true.\",\n-                                \"displayName\": \"Count Words\",\n+                                \"description\": \"Specifies whether or not to use Chunked Encoding to send the data. This property is ignored in the event the contents are compressed or sent as FlowFiles.\",\n+                                \"displayName\": \"Use Chunked Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"text-word-count\",\n-                                \"required\": true,\n+                                \"name\": \"Use Chunked Encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"User Agent\": {\n+                                \"defaultValue\": \"Apache-HttpClient/4.5.14 (Java/1.8.0_422)\",\n+                                \"description\": \"What to report as the User Agent when we connect to the remote server\",\n+                                \"displayName\": \"User Agent\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"User Agent\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username required to access the URL\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.SplitText\"\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The flowfile contains the original content with one or more attributes added containing the respective counts\",\n+                                \"description\": \"Files that are successfully send will be transferred to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If the flowfile text cannot be counted for some reason, the original file will be routed to this destination and nothing will be routed elsewhere\",\n+                                \"description\": \"Files that fail to send will transferred to failure\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"character\",\n-                            \"count\",\n-                            \"line\",\n-                            \"text\",\n-                            \"word\"\n+                            \"archive\",\n+                            \"copy\",\n+                            \"http\",\n+                            \"https\",\n+                            \"remote\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.CountText\",\n-                        \"typeDescription\": \"Counts various metrics on incoming text. The requested results will be recorded as attributes. The resulting flowfile will not have its content modified.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of lines of text present in the FlowFile content\",\n-                                \"name\": \"text.line.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of lines of text (with at least one non-whitespace character) present in the original FlowFile\",\n-                                \"name\": \"text.line.nonempty.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of words present in the original FlowFile\",\n-                                \"name\": \"text.word.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of characters (given the specified character encoding) present in the original FlowFile\",\n-                                \"name\": \"text.character.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.PostHTTP\",\n+                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use InvokeHTTP instead. Performs an HTTP Post with the content of the FlowFile. Uses a connection pool with max number of connections equal to the number of possible endpoints multiplied by the Concurrent Tasks configuration.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n@@ -96940,259 +96768,564 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.attributes.UpdateAttribute\"\n-                        ],\n-                        \"deprecationReason\": \"UpdateAttribute can be configured using the hash Expression Language function to digest one or more attributes\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"The property name defines the attribute to look for and hash in the incoming flowfile. The property value defines the name to give the generated attribute. Attribute names must be unique.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A flowfile attribute key for attribute inspection\",\n-                                \"value\": \"Attribute Name\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"character_set\": {\n+                            \"Data Record Path\": {\n+                                \"description\": \"If specified, this property denotes a RecordPath that will be evaluated against each incoming Record and the Record that results from evaluating the RecordPath will be sent to the database instead of sending the entire incoming Record. If not specified, the entire incoming Record will be published to the database.\",\n+                                \"displayName\": \"Data Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Record Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Statement Type Record Path\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use Record Path\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Statement Type\",\n+                                        \"propertyName\": \"put-db-record-statement-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies a RecordPath to evaluate against each Record in order to determine the Statement Type. The RecordPath should equate to either INSERT, UPDATE, UPSERT, or DELETE.\",\n+                                \"displayName\": \"Statement Type Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Statement Type Record Path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"database-session-autocommit\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"US-ASCII\",\n-                                        \"displayName\": \"US-ASCII\",\n-                                        \"value\": \"US-ASCII\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"ISO-8859-1\",\n-                                        \"displayName\": \"ISO-8859-1\",\n-                                        \"value\": \"ISO-8859-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"The autocommit mode to set on the database connection being used. If set to false, the operation(s) will be explicitly committed or rolled back (based on success or failure respectively). If set to true, the driver/database automatically handles the commit/rollback. Setting this property to 'No value' will leave the database connection's autocommit mode unmodified.\",\n+                                \"displayName\": \"Database Session AutoCommit\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"database-session-autocommit\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"UTF-8\",\n-                                        \"displayName\": \"UTF-8\",\n-                                        \"value\": \"UTF-8\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"UTF-16BE\",\n-                                        \"displayName\": \"UTF-16BE\",\n-                                        \"value\": \"UTF-16BE\"\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n                                     },\n                                     {\n-                                        \"description\": \"UTF-16LE\",\n-                                        \"displayName\": \"UTF-16LE\",\n-                                        \"value\": \"UTF-16LE\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n                                     },\n                                     {\n-                                        \"description\": \"This character set normally decodes using an optional BOM at the beginning of the data but encodes by inserting a BE BOM. For hashing, it will be replaced with UTF-16BE. \",\n-                                        \"displayName\": \"UTF-16\",\n-                                        \"value\": \"UTF-16\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set used to decode the attribute being hashed -- this applies to the incoming data encoding, not the resulting hash encoding. \",\n-                                \"displayName\": \"Character Set\",\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n+                                \"displayName\": \"Database Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"character_set\",\n-                                \"required\": true,\n+                                \"name\": \"db-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"fail_when_empty\": {\n+                            \"put-db-record-allow-multiple-statements\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Route to failure when none of the attributes that are configured for hashing are found. If set to false, then flow files that do not contain any of the attributes that are configured for hashing will just pass through to success.\",\n-                                \"displayName\": \"Fail when no attributes present\",\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use statement.type Attribute\",\n+                                            \"Use Record Path\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Statement Type\",\n+                                        \"propertyName\": \"put-db-record-statement-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"If the Statement Type is 'SQL' (as set in the statement.type attribute), this field indicates whether to split the field value by a semicolon and execute each statement separately. If any statement causes an error, the entire set of statements will be rolled back. If the Statement Type is not 'SQL', this field is ignored.\",\n+                                \"displayName\": \"Allow Multiple SQL Statements\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fail_when_empty\",\n+                                \"name\": \"put-db-record-allow-multiple-statements\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hash_algorithm\": {\n+                            \"put-db-record-binary-format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"MD2 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"MD2\",\n-                                        \"value\": \"MD2\"\n+                                        \"description\": \"String values for binary columns contain the original value as text via UTF-8 character encoding\",\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n                                     },\n                                     {\n-                                        \"description\": \"MD5 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n+                                        \"description\": \"String values for binary columns contain the original value in hexadecimal format\",\n+                                        \"displayName\": \"Hexadecimal\",\n+                                        \"value\": \"Hexadecimal\"\n                                     },\n                                     {\n-                                        \"description\": \"SHA-1 (20 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"SHA-1\",\n-                                        \"value\": \"SHA-1\"\n-                                    },\n+                                        \"description\": \"String values for binary columns contain the original value in Base64 encoded format\",\n+                                        \"displayName\": \"Base64\",\n+                                        \"value\": \"Base64\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The format to be applied when decoding string values to binary.\",\n+                                \"displayName\": \"Binary String Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-binary-format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-catalog-name\": {\n+                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n+                                \"displayName\": \"Catalog Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-catalog-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-dcbp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database for sending records.\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-db-record-dcbp-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"put-db-record-field-containing-sql\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"SHA-224 (28 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-224\",\n-                                        \"value\": \"SHA-224\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"Use statement.type Attribute\",\n+                                            \"Use Record Path\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Statement Type\",\n+                                        \"propertyName\": \"put-db-record-statement-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"If the Statement Type is 'SQL' (as set in the statement.type attribute), this field indicates which field in the record(s) contains the SQL statement to execute. The value of the field must be a single SQL statement. If the Statement Type is not 'SQL', this field is ignored.\",\n+                                \"displayName\": \"Field Containing SQL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-field-containing-sql\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-max-batch-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies maximum number of sql statements to be included in each batch sent to the database. Zero means the batch size is not limited, and all statements are put into a single batch which can cause high memory usage issues for a very large number of statements.\",\n+                                \"displayName\": \"Maximum Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-max-batch-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-query-timeout\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL statement , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"put-db-record-query-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-quoted-identifiers\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"SHA-256 (32 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"SHA-384 (48 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-384\",\n-                                        \"value\": \"SHA-384\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n+                                \"displayName\": \"Quote Column Identifiers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-db-record-quoted-identifiers\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-quoted-table-identifiers\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"SHA-512 (64 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-512\",\n-                                        \"value\": \"SHA-512\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name.\",\n+                                \"displayName\": \"Quote Table Identifiers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-db-record-quoted-table-identifiers\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-db-record-record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"put-db-record-schema-name\": {\n+                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly.\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-statement-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UPDATE\",\n+                                        \"value\": \"UPDATE\"\n                                     },\n                                     {\n-                                        \"description\": \"SHA-512/224 (28 byte output) SHA-2 using SHA-512 with truncated output\",\n-                                        \"displayName\": \"SHA-512/224\",\n-                                        \"value\": \"SHA-512/224\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INSERT\",\n+                                        \"value\": \"INSERT\"\n                                     },\n                                     {\n-                                        \"description\": \"SHA-512/256 (32 byte output) SHA-2 using SHA-512 with truncated output\",\n-                                        \"displayName\": \"SHA-512/256\",\n-                                        \"value\": \"SHA-512/256\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UPSERT\",\n+                                        \"value\": \"UPSERT\"\n                                     },\n                                     {\n-                                        \"description\": \"SHA3-224 (28 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-224\",\n-                                        \"value\": \"SHA3-224\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INSERT_IGNORE\",\n+                                        \"value\": \"INSERT_IGNORE\"\n                                     },\n                                     {\n-                                        \"description\": \"SHA3-256 (32 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-256\",\n-                                        \"value\": \"SHA3-256\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DELETE\",\n+                                        \"value\": \"DELETE\"\n                                     },\n                                     {\n-                                        \"description\": \"SHA3-384 (48 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-384\",\n-                                        \"value\": \"SHA3-384\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Use statement.type Attribute\",\n+                                        \"value\": \"Use statement.type Attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"SHA3-512 (64 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-512\",\n-                                        \"value\": \"SHA3-512\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Use Record Path\",\n+                                        \"value\": \"Use Record Path\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the type of SQL Statement to generate. Please refer to the database documentation for a description of the behavior of each operation. Please note that some Database Types may not support certain Statement Types. If 'Use statement.type Attribute' is chosen, then the value is taken from the statement.type attribute in the FlowFile. The 'Use statement.type Attribute' option is the only one that allows the 'SQL' statement type. If 'SQL' is specified, the value of the field specified by the 'Field Containing SQL' property is expected to be a valid SQL statement on the target database, and will be executed as-is.\",\n+                                \"displayName\": \"Statement Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-db-record-statement-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-table-name\": {\n+                                \"description\": \"The name of the table that the statement should affect. Note that if the database is case-sensitive, the table name must match the database's table name exactly.\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-table-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-translate-field-names\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"BLAKE2-160 (20 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-160\",\n-                                        \"value\": \"BLAKE2-160\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, the Processor will attempt to translate field names into the appropriate column names for the table specified. If false, the field names must match the column names exactly, or the column will not be updated\",\n+                                \"displayName\": \"Translate Field Names\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-db-record-translate-field-names\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-unmatched-column-behavior\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  No notification will be logged\",\n+                                        \"displayName\": \"Ignore Unmatched Columns\",\n+                                        \"value\": \"Ignore Unmatched Columns\"\n                                     },\n                                     {\n-                                        \"description\": \"BLAKE2-256 (32 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-256\",\n-                                        \"value\": \"BLAKE2-256\"\n+                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  A warning will be logged\",\n+                                        \"displayName\": \"Warn on Unmatched Columns\",\n+                                        \"value\": \"Warn on Unmatched Columns\"\n                                     },\n                                     {\n-                                        \"description\": \"BLAKE2-384 (48 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-384\",\n-                                        \"value\": \"BLAKE2-384\"\n+                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the document.  An error will be logged\",\n+                                        \"displayName\": \"Fail on Unmatched Columns\",\n+                                        \"value\": \"Fail on Unmatched Columns\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Fail on Unmatched Columns\",\n+                                \"description\": \"If an incoming record does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Column Behavior\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-db-record-unmatched-column-behavior\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-unmatched-field-behavior\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any field in the document that cannot be mapped to a column in the database is ignored\",\n+                                        \"displayName\": \"Ignore Unmatched Fields\",\n+                                        \"value\": \"Ignore Unmatched Fields\"\n                                     },\n                                     {\n-                                        \"description\": \"BLAKE2-512 (64 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-512\",\n-                                        \"value\": \"BLAKE2-512\"\n+                                        \"description\": \"If the document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n+                                        \"displayName\": \"Fail on Unmatched Fields\",\n+                                        \"value\": \"Fail on Unmatched Fields\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SHA-256\",\n-                                \"description\": \"The cryptographic hash algorithm to use. Note that not all of the algorithms available are recommended for use (some are provided for legacy use). There are many things to consider when picking an algorithm; it is recommended to use the most secure algorithm possible.\",\n-                                \"displayName\": \"Hash Algorithm\",\n+                                \"defaultValue\": \"Ignore Unmatched Fields\",\n+                                \"description\": \"If an incoming record has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Field Behavior\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hash_algorithm\",\n-                                \"required\": true,\n+                                \"name\": \"put-db-record-unmatched-field-behavior\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"missing_attr_policy\": {\n+                            \"put-db-record-update-keys\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use statement.type Attribute\",\n+                                            \"Use Record Path\",\n+                                            \"UPSERT\",\n+                                            \"UPDATE\",\n+                                            \"SQL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Statement Type\",\n+                                        \"propertyName\": \"put-db-record-statement-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the table's Primary Keys are used. In this case, if no Primary Key exists, the conversion to SQL will fail if Unmatched Column Behaviour is set to FAIL. This property is ignored if the Statement Type is INSERT\",\n+                                \"displayName\": \"Update Keys\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-update-keys\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"rollback-on-failure\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Do not route to failure if there are attributes configured for hashing that are not present in the flowfile\",\n-                                        \"displayName\": \"Allow missing attributes\",\n-                                        \"value\": \"ALLOW\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Route to failure if there are attributes configured for hashing that are not present in the flowfile\",\n-                                        \"displayName\": \"Fail if missing attributes\",\n-                                        \"value\": \"PROHIBIT\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ALLOW\",\n-                                \"description\": \"Policy for how the processor handles attributes that are configured for hashing but are not found in the flowfile.\",\n-                                \"displayName\": \"Missing attribute policy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specify how to handle error. By default (false), if an error occurs while processing a FlowFile, the FlowFile will be routed to 'failure' or 'retry' relationship based on error type, and processor can continue with next FlowFile. Instead, you may want to rollback currently processed FlowFiles and stop further processing immediately. In that case, you can do so by enabling this 'Rollback On Failure' property.  If enabled, failed FlowFiles will stay in the input relationship without penalizing it and being processed repeatedly until it gets processed successfully or removed by other means. It is important to set adequate 'Yield Duration' to avoid retrying too frequently.\",\n+                                \"displayName\": \"Rollback On Failure\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"missing_attr_policy\",\n+                                \"name\": \"rollback-on-failure\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"table-schema-cache-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies how many Table Schemas should be cached\",\n+                                \"displayName\": \"Table Schema Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"table-schema-cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If 'Use statement.type Attribute' is selected for the Statement Type property, the value of this attribute will be used to determine the type of statement (INSERT, UPDATE, DELETE, SQL, etc.) to generate and execute.\",\n+                                \"name\": \"statement.type\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Used for flowfiles that have a hash value added\",\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Used for flowfiles that are missing required attributes\",\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated and retrying the operation will also fail, such as an invalid query or an integrity constraint violation\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"blake2\",\n-                            \"cryptography\",\n-                            \"hash\",\n-                            \"keccak\",\n-                            \"md5\",\n-                            \"sha\"\n+                            \"database\",\n+                            \"delete\",\n+                            \"insert\",\n+                            \"jdbc\",\n+                            \"put\",\n+                            \"record\",\n+                            \"sql\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.CryptographicHashAttribute\",\n-                        \"typeDescription\": \"Calculates a hash value for each of the specified attributes using the given algorithm and writes it to an output attribute. Please refer to https://csrc.nist.gov/Projects/Hash-Functions/NIST-Policy-on-Hash-Functions for help to decide which algorithm to use. \",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutDatabaseRecord\",\n+                        \"typeDescription\": \"The PutDatabaseRecord processor uses a specified RecordReader to input (possibly multiple) records from an incoming flow file. These records are translated to SQL statements and executed as a single transaction. If any errors occur, the flow file is routed to failure or retry, and if the records are transmitted successfully, the incoming flow file is routed to success.  The type of statement executed by the processor is specified via the Statement Type property, which accepts some hard-coded values such as INSERT, UPDATE, and DELETE, as well as 'Use statement.type Attribute', which causes the processor to get the statement type from a flow file attribute.  IMPORTANT: If the Statement Type is UPDATE, then the incoming records must not alter the value(s) of the primary keys (or user-specified Update Keys). If such records are encountered, the UPDATE statement issued to the database may do nothing (if no existing records with the new primary key values are found), or could inadvertently corrupt the existing data (by changing records for which the new values of the primary keys exist).\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This Processor adds an attribute whose value is the result of hashing the specified attribute. The name of this attribute is specified by the value of the dynamic property.\",\n-                                \"name\": \"<Specified Attribute Name per Dynamic Property>\"\n+                                \"description\": \"If an error occurs during processing, the flow file will be routed to failure or retry, and this attribute will be populated with the cause of the error.\",\n+                                \"name\": \"putdatabaserecord.error\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -97211,872 +97344,974 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"fail_when_empty\": {\n+                            \"Cache Entry Identifier\": {\n+                                \"description\": \"A FlowFile attribute, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the cache key\",\n+                                \"displayName\": \"Cache Entry Identifier\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Cache Entry Identifier\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Cache update strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Adds the specified entry to the cache, replacing any value that is currently set.\",\n+                                        \"displayName\": \"Replace if present\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Adds the specified entry to the cache, if the key does not exist.\",\n+                                        \"displayName\": \"Keep original\",\n+                                        \"value\": \"keeporiginal\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Route to failure if the content is empty. While hashing an empty value is valid, some flows may want to detect empty input.\",\n-                                \"displayName\": \"Fail if the content is empty\",\n+                                \"defaultValue\": \"replace\",\n+                                \"description\": \"Determines how the cache is updated if the cache already contains the entry\",\n+                                \"displayName\": \"Cache update strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fail_when_empty\",\n+                                \"name\": \"Cache update strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hash_algorithm\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"MD2 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"MD2\",\n-                                        \"value\": \"MD2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"MD5 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-1 (20 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"SHA-1\",\n-                                        \"value\": \"SHA-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-224 (28 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-224\",\n-                                        \"value\": \"SHA-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-256 (32 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-384 (48 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-384\",\n-                                        \"value\": \"SHA-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512 (64 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-512\",\n-                                        \"value\": \"SHA-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512/224 (28 byte output) SHA-2 using SHA-512 with truncated output\",\n-                                        \"displayName\": \"SHA-512/224\",\n-                                        \"value\": \"SHA-512/224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512/256 (32 byte output) SHA-2 using SHA-512 with truncated output\",\n-                                        \"displayName\": \"SHA-512/256\",\n-                                        \"value\": \"SHA-512/256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-224 (28 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-224\",\n-                                        \"value\": \"SHA3-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-256 (32 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-256\",\n-                                        \"value\": \"SHA3-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-384 (48 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-384\",\n-                                        \"value\": \"SHA3-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-512 (64 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-512\",\n-                                        \"value\": \"SHA3-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-160 (20 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-160\",\n-                                        \"value\": \"BLAKE2-160\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-256 (32 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-256\",\n-                                        \"value\": \"BLAKE2-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-384 (48 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-384\",\n-                                        \"value\": \"BLAKE2-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-512 (64 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-512\",\n-                                        \"value\": \"BLAKE2-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SHA-256\",\n-                                \"description\": \"The hash algorithm to use. Note that not all of the algorithms available are recommended for use (some are provided for legacy compatibility). There are many things to consider when picking an algorithm; it is recommended to use the most secure algorithm possible.\",\n-                                \"displayName\": \"Hash Algorithm\",\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"The Controller Service that is used to cache flow files\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hash_algorithm\",\n+                                \"name\": \"Distributed Cache Service\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Max cache entry size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum amount of data to put into cache\",\n+                                \"displayName\": \"Max cache entry size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max cache entry size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.FetchDistributedMapCache\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Used for flowfiles that have a hash value added\",\n+                                \"description\": \"Any FlowFile that is successfully inserted into cache will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Used for flowfiles that have no content if the 'fail on empty' setting is enabled\",\n+                                \"description\": \"Any FlowFile that cannot be inserted into the cache will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"blake2\",\n-                            \"content\",\n-                            \"cryptography\",\n-                            \"hash\",\n-                            \"md5\",\n-                            \"sha\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.CryptographicHashContent\",\n-                        \"typeDescription\": \"Calculates a cryptographic hash value for the flowfile content using the given algorithm and writes it to an output attribute. Please refer to https://csrc.nist.gov/Projects/Hash-Functions/NIST-Policy-on-Hash-Functions for help to decide which algorithm to use.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutDistributedMapCache\",\n+                        \"typeDescription\": \"Gets the content of a FlowFile and puts it to a distributed map cache, using a cache key computed from FlowFile attributes. If the cache already contains the entry and the cache update strategy is 'keep original' the entry is not replaced.'\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This processor adds an attribute whose value is the result of hashing the flowfile content. The name of this attribute is specified by the value of the algorithm, e.g. 'content_SHA-256'.\",\n-                                \"name\": \"content_<algorithm>\"\n+                                \"description\": \"All FlowFiles will have an attribute 'cached'. The value of this attribute is true, is the FlowFile is cached, otherwise false.\",\n+                                \"name\": \"cached\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Dynamic property names that will be passed to the Mail session. Possible properties can be found in: https://javaee.github.io/javamail/docs/api/com/sun/mail/smtp/package-summary.html.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"mail.propertyName\",\n+                                \"value\": \"Value for a specific property to be set in the JavaMail Session object\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"@OnScheduled Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the @OnScheduled method, so that the processor can be forced to take a long time to start up\",\n-                                \"displayName\": \"@OnScheduled Pause Time\",\n+                            \"Attach File\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the FlowFile content should be attached to the email\",\n+                                \"displayName\": \"Attach File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"@OnScheduled Pause Time\",\n+                                \"name\": \"Attach File\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"@OnStopped Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the @OnStopped method, so that the processor can be forced to take a long time to shutdown\",\n-                                \"displayName\": \"@OnStopped Pause Time\",\n+                            \"BCC\": {\n+                                \"description\": \"The recipients to include in the BCC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"BCC\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"@OnStopped Pause Time\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"BCC\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"@OnUnscheduled Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the @OnUnscheduled method, so that the processor can be forced to take a long time to respond when user clicks stop\",\n-                                \"displayName\": \"@OnUnscheduled Pause Time\",\n+                            \"CC\": {\n+                                \"description\": \"The recipients to include in the CC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"CC\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"@OnUnscheduled Pause Time\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"CC\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Content Size\": {\n-                                \"defaultValue\": \"1 KB\",\n-                                \"description\": \"The number of bytes to write each time that the FlowFile is written to\",\n-                                \"displayName\": \"Content Size\",\n+                            \"Content Type\": {\n+                                \"defaultValue\": \"text/plain\",\n+                                \"description\": \"Mime Type used to interpret the contents of the email, such as text/plain or text/html\",\n+                                \"displayName\": \"Content Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Content Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Content Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"CustomValidate Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the customValidate() method\",\n-                                \"displayName\": \"CustomValidate Pause Time\",\n+                            \"From\": {\n+                                \"description\": \"Specifies the Email address to use as the sender. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"From\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CustomValidate Pause Time\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"From\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Fail When @OnScheduled called\": {\n+                            \"Include All Attributes In Message\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnScheduled are called\",\n-                                \"displayName\": \"Fail When @OnScheduled called\",\n+                                \"description\": \"Specifies whether or not all FlowFile attributes should be recorded in the body of the email message\",\n+                                \"displayName\": \"Include All Attributes In Message\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fail When @OnScheduled called\",\n+                                \"name\": \"Include All Attributes In Message\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Fail When @OnStopped called\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnStopped are called\",\n-                                \"displayName\": \"Fail When @OnStopped called\",\n+                            \"Message\": {\n+                                \"description\": \"The body of the email message\",\n+                                \"displayName\": \"Message\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fail When @OnStopped called\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Message\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Fail When @OnUnscheduled called\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnUnscheduled are called\",\n-                                \"displayName\": \"Fail When @OnUnscheduled called\",\n+                            \"SMTP Auth\": {\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Flag indicating whether authentication should be used\",\n+                                \"displayName\": \"SMTP Auth\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fail When @OnUnscheduled called\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP Auth\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Exception Class\": {\n-                                \"defaultValue\": \"java.lang.RuntimeException\",\n-                                \"description\": \"Exception class to be thrown (must extend java.lang.RuntimeException).\",\n-                                \"displayName\": \"FlowFile Exception Class\",\n+                            \"SMTP Hostname\": {\n+                                \"description\": \"The hostname of the SMTP host\",\n+                                \"displayName\": \"SMTP Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Exception Class\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Exception Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to throw exception.\",\n-                                \"displayName\": \"FlowFile Exception Iterations\",\n+                            \"SMTP Password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"password-based-authorization-mode\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password for the SMTP account\",\n+                                \"displayName\": \"SMTP Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Exception Iterations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"FlowFile Failure Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to forward to failure relationship.\",\n-                                \"displayName\": \"FlowFile Failure Iterations\",\n+                            \"SMTP Port\": {\n+                                \"defaultValue\": \"25\",\n+                                \"description\": \"The Port used for SMTP communications\",\n+                                \"displayName\": \"SMTP Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Failure Iterations\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Rollback Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to roll back (without penalty).\",\n-                                \"displayName\": \"FlowFile Rollback Iterations\",\n+                            \"SMTP Socket Factory\": {\n+                                \"defaultValue\": \"javax.net.ssl.SSLSocketFactory\",\n+                                \"description\": \"Socket Factory to use for SMTP Connection\",\n+                                \"displayName\": \"SMTP Socket Factory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Rollback Iterations\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP Socket Factory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Rollback Penalty Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to roll back with penalty.\",\n-                                \"displayName\": \"FlowFile Rollback Penalty Iterations\",\n+                            \"SMTP TLS\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Flag indicating whether Opportunistic TLS should be enabled using STARTTLS command\",\n+                                \"displayName\": \"SMTP STARTTLS\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Rollback Penalty Iterations\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP TLS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Rollback Yield Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to roll back and yield.\",\n-                                \"displayName\": \"FlowFile Rollback Yield Iterations\",\n+                            \"SMTP Username\": {\n+                                \"description\": \"Username for the SMTP account\",\n+                                \"displayName\": \"SMTP Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Rollback Yield Iterations\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Success Iterations\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Number of FlowFiles to forward to success relationship.\",\n-                                \"displayName\": \"FlowFile Success Iterations\",\n+                            \"SMTP X-Mailer Header\": {\n+                                \"defaultValue\": \"NiFi\",\n+                                \"description\": \"X-Mailer used in the header of the outgoing email\",\n+                                \"displayName\": \"SMTP X-Mailer Header\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Success Iterations\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP X-Mailer Header\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Interrupts When Paused\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If the Processor's thread(s) are sleeping (due to one of the \\\"Pause Time\\\" properties above), and the thread is interrupted, this indicates whether the Processor should ignore the interrupt and continue sleeping or if it should allow itself to be interrupted.\",\n-                                \"displayName\": \"Ignore Interrupts When Paused\",\n+                            \"Subject\": {\n+                                \"defaultValue\": \"Message from NiFi\",\n+                                \"description\": \"The email subject\",\n+                                \"displayName\": \"Subject\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Interrupts When Paused\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Subject\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"No FlowFile Exception Class\": {\n-                                \"defaultValue\": \"java.lang.RuntimeException\",\n-                                \"description\": \"Exception class to be thrown if no FlowFile (must extend java.lang.RuntimeException).\",\n-                                \"displayName\": \"No FlowFile Exception Class\",\n+                            \"To\": {\n+                                \"description\": \"The recipients to include in the To-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"To\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"No FlowFile Exception Class\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"To\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"No FlowFile Exception Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of times to throw NPE exception if no FlowFile.\",\n-                                \"displayName\": \"No FlowFile Exception Iterations\",\n+                            \"attribute-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Email messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"No FlowFile Exception Iterations\",\n-                                \"required\": true,\n+                                \"name\": \"attribute-name-regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"No FlowFile Skip Iterations\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Number of times to skip onTrigger if no FlowFile.\",\n-                                \"displayName\": \"No FlowFile Skip Iterations\",\n+                            \"authorization-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Use password\",\n+                                        \"displayName\": \"Use Password\",\n+                                        \"value\": \"password-based-authorization-mode\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use OAuth2 to acquire access token\",\n+                                        \"displayName\": \"Use OAuth2\",\n+                                        \"value\": \"oauth-based-authorization-mode\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"password-based-authorization-mode\",\n+                                \"description\": \"How to authorize sending email on the user's behalf.\",\n+                                \"displayName\": \"Authorization Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"No FlowFile Skip Iterations\",\n+                                \"name\": \"authorization-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"No FlowFile Yield Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of times to yield if no FlowFile.\",\n-                                \"displayName\": \"No FlowFile Yield Iterations\",\n+                            \"email-ff-content-as-message\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the FlowFile content should be the message of the email. If true, the 'Message' property is ignored.\",\n+                                \"displayName\": \"Flow file content as message\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"No FlowFile Yield Iterations\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"email-ff-content-as-message\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"OnTrigger Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the onTrigger() method, so that the processor can be forced to take a long time to perform its task\",\n-                                \"displayName\": \"OnTrigger Pause Time\",\n+                            \"input-character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the FlowFile contents for reading input FlowFile contents to generate the message body or as an attachment to the message. If not set, UTF-8 will be the default value.\",\n+                                \"displayName\": \"Input Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"OnTrigger Pause Time\",\n+                                \"name\": \"input-character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Write Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of times to write to the FlowFile\",\n-                                \"displayName\": \"Write Iterations\",\n+                            \"oauth2-access-token-provider\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"oauth-based-authorization-mode\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n+                                    }\n+                                ],\n+                                \"description\": \"OAuth2 service that can provide access tokens.\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Write Iterations\",\n+                                \"name\": \"oauth2-access-token-provider\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles processed successfully.\",\n+                                \"description\": \"FlowFiles that are successfully sent will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to process.\",\n+                                \"description\": \"FlowFiles that fail to send will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The entirety of the FlowFile's content (as a String object) will be read into memory in case the property to use the flow file content as the email body is set to true.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"FlowFile\",\n-                            \"debug\",\n-                            \"flow\",\n-                            \"processor\",\n-                            \"test\",\n-                            \"utility\"\n+                            \"email\",\n+                            \"notify\",\n+                            \"put\",\n+                            \"smtp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DebugFlow\",\n-                        \"typeDescription\": \"The DebugFlow processor aids testing and debugging the FlowFile framework by allowing various responses to be explicitly triggered in response to the receipt of a FlowFile or a timer event without a FlowFile if using timer or cron based scheduling.  It can force responses needed to exercise or test various failure modes that can occur when a processor runs.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutEmail\",\n+                        \"typeDescription\": \"Sends an e-mail to configured recipients for each incoming FlowFile\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"A record's cache key is generated by combining the name of each dynamic property with its evaluated record value (as specified by the corresponding RecordPath).\",\n+                                \"description\": \"The command specified in the key will be executed before doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Name of the property.\",\n-                                \"value\": \"A valid RecordPath to the record field to be included in the cache key used for deduplication.\"\n+                                \"name\": \"pre.cmd._____\",\n+                                \"value\": \"Not used\"\n+                            },\n+                            {\n+                                \"description\": \"The command specified in the key will be executed after doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"post.cmd._____\",\n+                                \"value\": \"Not used\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"bloom-filter-certainty\": {\n-                                \"defaultValue\": \"0.10\",\n-                                \"description\": \"The desired false positive probability when using the BloomFilter type. Using a value of .05 for example, guarantees a five-percent probability that the result is a false positive. The closer to 1 this value is set, the more precise the result at the expense of more storage space utilization.\",\n-                                \"displayName\": \"Bloom Filter Certainty\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"500\",\n+                                \"description\": \"The maximum number of FlowFiles to send in a single connection\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bloom-filter-certainty\",\n-                                \"required\": false,\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cache-identifier\": {\n-                                \"dependencies\": [\n+                            \"Conflict Resolution\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"multiple\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n-                                        \"propertyName\": \"deduplication-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REPLACE\",\n+                                        \"value\": \"REPLACE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IGNORE\",\n+                                        \"value\": \"IGNORE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RENAME\",\n+                                        \"value\": \"RENAME\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REJECT\",\n+                                        \"value\": \"REJECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FAIL\",\n+                                        \"value\": \"FAIL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"description\": \"An optional expression language field that overrides the record's computed cache key. This field has an additional attribute available: ${record.hash.value}, which contains the cache key derived from dynamic properties (if set) or record fields.\",\n-                                \"displayName\": \"Cache Identifier\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Determines how to handle the problem of filename collisions\",\n+                                \"displayName\": \"Conflict Resolution\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"cache-identifier\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Conflict Resolution\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"deduplication-strategy\": {\n+                            \"Connection Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Single File\",\n-                                        \"value\": \"single\"\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Multiple Files\",\n-                                        \"value\": \"multiple\"\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"single\",\n-                                \"description\": \"The strategy to use for detecting and routing duplicate records. The option for detecting duplicates across a single FlowFile operates in-memory, whereas detection spanning multiple FlowFiles utilises a distributed map cache.\",\n-                                \"displayName\": \"Deduplication Strategy\",\n+                                \"defaultValue\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"deduplication-strategy\",\n+                                \"name\": \"Connection Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"distributed-map-cache\": {\n-                                \"dependencies\": [\n+                            \"Create Directory\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"multiple\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n-                                        \"propertyName\": \"deduplication-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"This property is required when the deduplication strategy is set to 'multiple files.' The map cache will for each record, atomically check whether the cache key exists and if not, set it.\",\n-                                \"displayName\": \"Distributed Map Cache client\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-map-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Create Directory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"filter-capacity-hint\": {\n-                                \"defaultValue\": \"25000\",\n-                                \"dependencies\": [\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Dot Rename\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"bloom-filter\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Filter Type\",\n-                                        \"propertyName\": \"filter-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"An estimation of the total number of unique records to be processed. The more accurate this number is will lead to fewer false negatives on a BloomFilter.\",\n-                                \"displayName\": \"Filter Capacity Hint\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, then the filename of the sent file is prepended with a \\\".\\\" and then renamed back to the original once the file is completely sent. Otherwise, there is no rename. This property is ignored if the Temporary Filename property is set.\",\n+                                \"displayName\": \"Dot Rename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"filter-capacity-hint\",\n+                                \"name\": \"Dot Rename\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"filter-type\": {\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Internal Buffer Size\": {\n+                                \"defaultValue\": \"16KB\",\n+                                \"description\": \"Set the internal buffer size for buffered data streams\",\n+                                \"displayName\": \"Internal Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Internal Buffer Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Last Modified Time\": {\n+                                \"description\": \"The lastModifiedTime to assign to the file after transferring it. If not set, the lastModifiedTime will not be changed. Format must be yyyy-MM-dd'T'HH:mm:ssZ. You may also use expression language such as ${file.lastModifiedTime}. If the value is invalid, the processor will not be invalid but will fail to change lastModifiedTime of the file.\",\n+                                \"displayName\": \"Last Modified Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Last Modified Time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Permissions\": {\n+                                \"description\": \"The permissions to assign to the file after transferring it. Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644). If not set, the permissions will not be changed. You may also use expression language such as ${file.permissions}. If the value is invalid, the processor will not be invalid but will fail to change permissions of the file.\",\n+                                \"displayName\": \"Permissions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Permissions\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"21\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Exactly matches records seen before with 100% accuracy at the expense of more storage usage. Stores the filter data in a single cache entry in the distributed cache, and is loaded entirely into memory during duplicate detection. This filter is preferred for small to medium data sets and offers high performance, being loaded into memory when this processor is running.\",\n-                                        \"displayName\": \"HashSet\",\n-                                        \"value\": \"hash-set\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n-                                        \"description\": \"Space-efficient data structure ideal for large data sets using probability to determine if a record was seen previously. False positive matches are possible, but false negatives are not \\u2013 in other words, a query returns either \\\"possibly in the set\\\" or \\\"definitely not in the set\\\". You should use this option if the FlowFile content is large and you can tolerate some duplication in the data. Uses constant storage space regardless of the record set size.\",\n-                                        \"displayName\": \"BloomFilter\",\n-                                        \"value\": \"bloom-filter\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"hash-set\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"single\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n-                                        \"propertyName\": \"deduplication-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"description\": \"The filter used to determine whether a record has been seen before based on the matching RecordPath criteria. If hash set is selected, a Java HashSet object will be used to deduplicate all encountered records. If the bloom filter option is selected, a bloom filter will be used. The bloom filter option is less memory intensive, but has a chance of having false positives.\",\n-                                \"displayName\": \"Filter Type\",\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"filter-type\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"include-zero-record-flowfiles\": {\n+                            \"Reject Zero-Byte Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"If a FlowFile sent to either the duplicate or non-duplicate relationships contains no records, a value of `false` in this property causes the FlowFile to be dropped. Otherwise, the empty FlowFile is emitted.\",\n-                                \"displayName\": \"Include Zero Record FlowFiles\",\n+                                \"description\": \"Determines whether or not Zero-byte files should be rejected without attempting to transfer\",\n+                                \"displayName\": \"Reject Zero-Byte Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-zero-record-flowfiles\",\n-                                \"required\": true,\n+                                \"name\": \"Reject Zero-Byte Files\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-cache-identifier\": {\n+                            \"Remote Path\": {\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Temporary Filename\": {\n+                                \"description\": \"If set, the filename of the sent file will be equal to the value specified during the transfer and after successful completion will be renamed to the original filename. If this value is set, the Dot Rename property is ignored.\",\n+                                \"displayName\": \"Temporary Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Temporary Filename\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Transfer Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transfer Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Use Compression\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Distributed Map Cache client\",\n-                                        \"propertyName\": \"distributed-map-cache\"\n-                                    }\n-                                ],\n-                                \"description\": \"For each record, check whether the cache identifier exists in the distributed map cache. If it doesn't exist and this property is true, put the identifier to the cache.\",\n-                                \"displayName\": \"Cache the Entry Identifier\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-cache-identifier\",\n+                                \"name\": \"Use Compression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-hashing-algorithm\": {\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ftp-use-utf8\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Do not use a hashing algorithm. The value of resolved RecordPaths will be combined with a delimiter (~) to form the unique cache key. This may use significantly more storage depending on the size and shape or your data.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-256 cryptographic hashing algorithm.\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"SHA-512 cryptographic hashing algorithm.\",\n-                                        \"displayName\": \"SHA-512\",\n-                                        \"value\": \"SHA-512\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SHA-256\",\n-                                \"description\": \"The algorithm used to hash the cache key.\",\n-                                \"displayName\": \"Record Hashing Algorithm\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n+                                \"displayName\": \"Use UTF-8 Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-hashing-algorithm\",\n+                                \"name\": \"ftp-use-utf8\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.DetectDuplicate\"\n+                            \"org.apache.nifi.processors.standard.GetFTP\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Records detected as duplicates are routed to this relationship.\",\n-                                \"name\": \"duplicate\"\n+                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Records not found in the cache are routed to this relationship.\",\n-                                \"name\": \"non-duplicate\"\n+                                \"description\": \"FlowFiles that were rejected by the destination system\",\n+                                \"name\": \"reject\"\n                             },\n                             {\n-                                \"description\": \"If unable to communicate with the cache, the FlowFile will be penalized and routed to this relationship\",\n+                                \"description\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original input FlowFile is sent to this relationship unless a fatal error occurs.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The HashSet filter type will grow memory space proportionate to the number of unique records processed. The BloomFilter type will use constant memory regardless of the number of records processed.\",\n-                                \"resource\": \"MEMORY\"\n-                            },\n-                            {\n-                                \"description\": \"If a more advanced hash algorithm is chosen, the amount of time required to hash any particular record could increase substantially.\",\n-                                \"resource\": \"CPU\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"change\",\n-                            \"dedupe\",\n-                            \"distinct\",\n-                            \"dupe\",\n-                            \"duplicate\",\n-                            \"filter\",\n-                            \"hash\",\n-                            \"modify\",\n-                            \"record\",\n-                            \"replace\",\n-                            \"text\",\n-                            \"unique\",\n-                            \"update\"\n+                            \"archive\",\n+                            \"copy\",\n+                            \"egress\",\n+                            \"files\",\n+                            \"ftp\",\n+                            \"put\",\n+                            \"remote\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DeduplicateRecord\",\n-                        \"typeDescription\": \"This processor de-duplicates individual records within a record set. It can operate on a per-file basis using an in-memory hashset or bloom filter. When configured with a distributed map cache, it de-duplicates records across multiple files.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Number of records written to the destination FlowFile.\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.PutFTP\",\n+                        \"typeDescription\": \"Sends FlowFiles to an FTP Server\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n@@ -98089,1626 +98324,1910 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to write to any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"write filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Age Off Duration\": {\n-                                \"description\": \"Time interval to age off cached FlowFiles\",\n-                                \"displayName\": \"Age Off Duration\",\n+                            \"Conflict Resolution Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Age Off Duration\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Cache Entry Identifier\": {\n-                                \"defaultValue\": \"${hash.value}\",\n-                                \"description\": \"A FlowFile attribute, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the value used to identify duplicates; it is this value that is cached\",\n-                                \"displayName\": \"Cache Entry Identifier\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Cache Entry Identifier\",\n+                                \"name\": \"Conflict Resolution Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Cache The Entry Identifier\": {\n+                            \"Create Missing Directories\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"When true this cause the processor to check for duplicates and cache the Entry Identifier. When false, the processor would only check for duplicates and not cache the Entry Identifier, requiring another processor to add identifiers to the distributed cache.\",\n-                                \"displayName\": \"Cache The Entry Identifier\",\n+                                \"description\": \"If true, then missing destination directories will be created. If false, flowfiles are penalized and sent to failure.\",\n+                                \"displayName\": \"Create Missing Directories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cache The Entry Identifier\",\n+                                \"name\": \"Create Missing Directories\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Directory\": {\n+                                \"description\": \"The directory to which files should be written. You may use expression language such as /aa/bb/${path}\",\n+                                \"displayName\": \"Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Directory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Group\": {\n+                                \"description\": \"Sets the group on the output file to the value of this attribute.  You may also use expression language such as ${file.group}.\",\n+                                \"displayName\": \"Group\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Group\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"The Controller Service that is used to cache unique identifiers, used to determine duplicates\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"Last Modified Time\": {\n+                                \"description\": \"Sets the lastModifiedTime on the output file to the value of this attribute.  Format must be yyyy-MM-dd'T'HH:mm:ssZ.  You may also use expression language such as ${file.lastModifiedTime}.\",\n+                                \"displayName\": \"Last Modified Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Last Modified Time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum File Count\": {\n+                                \"description\": \"Specifies the maximum number of files that can exist in the output directory\",\n+                                \"displayName\": \"Maximum File Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Maximum File Count\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"FlowFile Description\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"When a FlowFile is added to the cache, this value is stored along with it so that if a duplicate is found, this description of the original FlowFile will be added to the duplicate's \\\"original.flowfile.description\\\" attribute\",\n-                                \"displayName\": \"FlowFile Description\",\n+                            \"Owner\": {\n+                                \"description\": \"Sets the owner on the output file to the value of this attribute.  You may also use expression language such as ${file.owner}. Note on many operating systems Nifi must be running as a super-user to have the permissions to set the file owner.\",\n+                                \"displayName\": \"Owner\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"FlowFile Description\",\n-                                \"required\": true,\n+                                \"name\": \"Owner\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Permissions\": {\n+                                \"description\": \"Sets the permissions on the output file to the value of this attribute.  Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644).  You may also use expression language such as ${file.permissions}.\",\n+                                \"displayName\": \"Permissions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Permissions\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The filename to use when writing the FlowFile to disk.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\"\n+                            \"org.apache.nifi.processors.standard.FetchFile\",\n+                            \"org.apache.nifi.processors.standard.GetFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile has been detected to be a duplicate, it will be routed to this relationship\",\n-                                \"name\": \"duplicate\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile's Cache Entry Identifier was not found in the cache, it will be routed to this relationship\",\n-                                \"name\": \"non-duplicate\"\n+                                \"description\": \"Files that have been successfully written to the output directory are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If unable to communicate with the cache, the FlowFile will be penalized and routed to this relationship\",\n+                                \"description\": \"Files that could not be written to the output directory for some reason are transferred to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"dedupe\",\n-                            \"dupe\",\n-                            \"duplicate\",\n-                            \"hash\"\n+                            \"archive\",\n+                            \"copy\",\n+                            \"files\",\n+                            \"filesystem\",\n+                            \"local\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DetectDuplicate\",\n-                        \"typeDescription\": \"Caches a value, computed from FlowFile attributes, for each incoming FlowFile and determines if the cached value has already been seen. If so, routes the FlowFile to 'duplicate' with an attribute named 'original.identifier' that specifies the original FlowFile's \\\"description\\\", which is specified in the <FlowFile Description> property. If the FlowFile is not determined to be a duplicate, the Processor routes the FlowFile to 'non-duplicate'\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All FlowFiles routed to the duplicate relationship will have an attribute added named original.flowfile.description. The value of this attribute is determined by the attributes of the original copy of the data and by the FlowFile Description property.\",\n-                                \"name\": \"original.flowfile.description\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.PutFile\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to the local file system\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adding a property with the name '5' and value '10' means that the relationship with name '5' will receive 10 FlowFiles in each iteration instead of 1.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The relationship name (positive number)\",\n-                                \"value\": \"The relationship Weight (positive number)\"\n-                            }\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.jms.processors.PublishJMS\"\n                         ],\n-                        \"dynamicRelationship\": {\n-                            \"description\": \"FlowFiles are sent to this relationship per the <Distribution Strategy>\",\n-                            \"name\": \"A number 1..<Number Of Relationships>\"\n-                        },\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Distribution Strategy\": {\n+                            \"Client ID Prefix\": {\n+                                \"description\": \"A human-readable ID that can be used to associate connections with yourself so that the maintainers of the JMS Server know who to contact if problems arise\",\n+                                \"displayName\": \"Client ID Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client ID Prefix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"The amount of time to wait when attempting to receive a message before giving up and assuming failure\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Copy Attributes to JMS Properties\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Relationship selection is evenly distributed in a round robin fashion; all relationships must be available.\",\n-                                        \"displayName\": \"round robin\",\n-                                        \"value\": \"round robin\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Relationship selection is distributed across all available relationships in order of their weight; at least one relationship must be available.\",\n-                                        \"displayName\": \"next available\",\n-                                        \"value\": \"next available\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not FlowFile Attributes should be translated into JMS Message Properties. If true, all attributes starting with 'jms.' will be set as Properties on the JMS Message (without the 'jms.' prefix). If an attribute exists that starts with the same value but ends in '.type', that attribute will be used to determine the JMS Message Property type.\",\n+                                \"displayName\": \"Copy Attributes to JMS Properties\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Copy Attributes to JMS Properties\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Destination Name\": {\n+                                \"description\": \"The name of the JMS Topic or queue to use\",\n+                                \"displayName\": \"Destination Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Destination Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Destination Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Relationship selection is distributed by supplied LoadDistributionService Controller Service; at least one relationship must be available.\",\n-                                        \"displayName\": \"load distribution service\",\n-                                        \"value\": \"load distribution service\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Queue\",\n+                                        \"value\": \"Queue\"\n                                     },\n                                     {\n-                                        \"description\": \"Relationship selection is the first available relationship without further distribution among all relationships; at least one relationship must be available.\",\n-                                        \"displayName\": \"overflow\",\n-                                        \"value\": \"overflow\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Topic\",\n+                                        \"value\": \"Topic\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"round robin\",\n-                                \"description\": \"Determines how the load will be distributed. Relationship weight is in numeric order where '1' has the greatest weight.\",\n-                                \"displayName\": \"Distribution Strategy\",\n+                                \"defaultValue\": \"Queue\",\n+                                \"description\": \"The type of the JMS Destination to use\",\n+                                \"displayName\": \"Destination Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distribution Strategy\",\n+                                \"name\": \"Destination Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Number of Relationships\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Determines the number of Relationships to which the load should be distributed\",\n-                                \"displayName\": \"Number of Relationships\",\n+                            \"JMS Provider\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ActiveMQ\",\n+                                        \"value\": \"ActiveMQ\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ActiveMQ\",\n+                                \"description\": \"The Provider used for the JMS Server\",\n+                                \"displayName\": \"JMS Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Number of Relationships\",\n+                                \"name\": \"JMS Provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Where to route flowfiles for this relationship index\",\n-                                \"name\": \"1\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"distribute\",\n-                            \"load balance\",\n-                            \"round robin\",\n-                            \"route\",\n-                            \"weighted\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": true,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DistributeLoad\",\n-                        \"typeDescription\": \"Distributes FlowFiles to downstream processors based on a Distribution Strategy. If using the Round Robin strategy, the default is to assign each destination a weighting of 1 (evenly distributed). However, optional properties can be added to the change this; adding a property with the name '5' and value '10' means that the relationship with name '5' will be receive 10 FlowFiles in each iteration instead of 1.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the specific relationship the FlowFile has been routed through\",\n-                                \"name\": \"distribute.load.relationship\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Number of Copies\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies how many copies of each incoming FlowFile will be made\",\n-                                \"displayName\": \"Number of Copies\",\n+                            },\n+                            \"Max Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum amount of data that can be buffered for a JMS Message. If a FlowFile's size exceeds this value, the FlowFile will be routed to failure.\",\n+                                \"displayName\": \"Max Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Buffer Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Batch Size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The number of messages to pull/push in a single iteration of the processor\",\n+                                \"displayName\": \"Message Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Priority\": {\n+                                \"description\": \"The Priority of the Message\",\n+                                \"displayName\": \"Message Priority\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Number of Copies\",\n+                                \"name\": \"Message Priority\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Time to Live\": {\n+                                \"description\": \"The amount of time that the message should live on the destination before being removed; if not specified, the message will never expire.\",\n+                                \"displayName\": \"Message Time to Live\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Time to Live\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"byte\",\n+                                        \"value\": \"byte\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"stream\",\n+                                        \"value\": \"stream\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"map\",\n+                                        \"value\": \"map\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"empty\",\n+                                        \"value\": \"empty\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"byte\",\n+                                \"description\": \"The Type of JMS Message to Construct\",\n+                                \"displayName\": \"Message Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Reply-To Queue\": {\n+                                \"description\": \"The name of the queue to which a reply to should be added\",\n+                                \"displayName\": \"Reply-To Queue\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Reply-To Queue\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"URL\": {\n+                                \"description\": \"The URL of the JMS Server\",\n+                                \"displayName\": \"URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username used for authentication and authorization\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.GetJMSQueue\",\n+                            \"org.apache.nifi.processors.standard.GetJMSTopic\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original FlowFile and all copies will be sent to this relationship\",\n+                                \"description\": \"All FlowFiles that are sent to the JMS destination are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be routed to the JMS destination are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"duplicate\",\n-                            \"load\",\n-                            \"test\"\n+                            \"jms\",\n+                            \"put\",\n+                            \"send\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DuplicateFlowFile\",\n-                        \"typeDescription\": \"Intended for load testing, this processor will create the configured number of copies of each incoming FlowFile. The original FlowFile as well as all generated copies are sent to the 'success' relationship. In addition, each FlowFile gets an attribute 'copy.index' set to the copy number, where the original FlowFile gets a value of zero, and all copies receive incremented integer values.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"A zero-based incrementing integer value based on which copy the FlowFile is.\",\n-                                \"name\": \"copy.index\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.PutJMS\",\n+                        \"typeDescription\": \"Creates a JMS Message from the contents of a FlowFile and sends the message to a ActiveMQ JMS Server.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Encoding\": {\n+                            \"put-record-include-zero-record-results\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"base64\",\n-                                        \"value\": \"base64\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"base32\",\n-                                        \"value\": \"base32\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"hex\",\n-                                        \"value\": \"hex\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"base64\",\n-                                \"description\": \"Specifies the type of encoding used\",\n-                                \"displayName\": \"Encoding\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If no records are read from the incoming FlowFile, this property specifies whether or not an empty record set will be transmitted. The original FlowFile will still be routed to success, but if no transmission occurs, no provenance SEND event will be generated.\",\n+                                \"displayName\": \"Include Zero Record Results\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Encoding\",\n+                                \"name\": \"put-record-include-zero-record-results\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Encode\",\n-                                        \"value\": \"Encode\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Decode\",\n-                                        \"value\": \"Decode\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Encode\",\n-                                \"description\": \"Specifies whether the content should be encoded or decoded\",\n-                                \"displayName\": \"Mode\",\n+                            \"put-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mode\",\n+                                \"name\": \"put-record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"put-record-sink\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the query result records to some destination.\",\n+                                \"displayName\": \"Record Destination Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-record-sink\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully encoded or decoded will be routed to success\",\n+                                \"description\": \"The original FlowFile is routed to this relationship if the records could not be transmitted but attempting the operation again may succeed\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile will be routed to this relationship if the records were transmitted successfully\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that cannot be encoded or decoded will be routed to failure\",\n+                                \"description\": \"A FlowFile is routed to this relationship if the records could not be transmitted and retrying the operation will also fail\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"base32\",\n-                            \"base64\",\n-                            \"decode\",\n-                            \"encode\",\n-                            \"hex\"\n+                            \"put\",\n+                            \"record\",\n+                            \"sink\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EncodeContent\",\n-                        \"typeDescription\": \"Encode or decode the contents of a FlowFile using Base64, Base32, or hex encoding schemes\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutRecord\",\n+                        \"typeDescription\": \"The PutRecord processor uses a specified RecordReader to input (possibly multiple) records from an incoming flow file, and sends them to a destination specified by a Record Destination Service (i.e. record sink).\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.cipher.DecryptContent\",\n-                            \"org.apache.nifi.processors.cipher.DecryptContentAge\",\n-                            \"org.apache.nifi.processors.cipher.DecryptContentCompatibility\",\n-                            \"org.apache.nifi.processors.cipher.EncryptContentAge\",\n-                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\"\n-                        ],\n-                        \"deprecationReason\": \"EncryptContentAge or EncryptContentPGP should be used for encrypting new files using standard formatting. DecryptContent supports deciphering historical files.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Encryption Algorithm\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"500\",\n+                                \"description\": \"The maximum number of FlowFiles to send in a single connection\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ciphers Allowed\": {\n+                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n+                                \"displayName\": \"Ciphers Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Ciphers Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Conflict Resolution\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"org.apache.nifi.security.util.EncryptionMethod@634a45d1[Algorithm name=PBEWITHMD5AND128BITAES-CBC-OPENSSL,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"MD5_128AES\",\n-                                        \"value\": \"MD5_128AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5AND192BITAES-CBC-OPENSSL,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"MD5_192AES\",\n-                                        \"value\": \"MD5_192AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5AND256BITAES-CBC-OPENSSL,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"MD5_256AES\",\n-                                        \"value\": \"MD5_256AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5ANDDES,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"MD5_DES\",\n-                                        \"value\": \"MD5_DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5ANDRC2,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"MD5_RC2\",\n-                                        \"value\": \"MD5_RC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA1ANDRC2,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA1_RC2\",\n-                                        \"value\": \"SHA1_RC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA1ANDDES,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA1_DES\",\n-                                        \"value\": \"SHA1_DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND128BITAES-CBC-BC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_128AES\",\n-                                        \"value\": \"SHA_128AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND192BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_192AES\",\n-                                        \"value\": \"SHA_192AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND256BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_256AES\",\n-                                        \"value\": \"SHA_256AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND40BITRC2-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_40RC2\",\n-                                        \"value\": \"SHA_40RC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND128BITRC2-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_128RC2\",\n-                                        \"value\": \"SHA_128RC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND40BITRC4,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_40RC4\",\n-                                        \"value\": \"SHA_40RC4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND128BITRC4,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_128RC4\",\n-                                        \"value\": \"SHA_128RC4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA256AND128BITAES-CBC-BC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA256_128AES\",\n-                                        \"value\": \"SHA256_128AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA256AND192BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA256_192AES\",\n-                                        \"value\": \"SHA256_192AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA256AND256BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA256_256AES\",\n-                                        \"value\": \"SHA256_256AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND2-KEYTRIPLEDES-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_2KEYTRIPLEDES\",\n-                                        \"value\": \"SHA_2KEYTRIPLEDES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND3-KEYTRIPLEDES-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_3KEYTRIPLEDES\",\n-                                        \"value\": \"SHA_3KEYTRIPLEDES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAANDTWOFISH-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_TWOFISH\",\n-                                        \"value\": \"SHA_TWOFISH\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PGP,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"PGP\",\n-                                        \"value\": \"PGP\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REPLACE\",\n+                                        \"value\": \"REPLACE\"\n                                     },\n                                     {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PGP-ASCII-ARMOR,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"PGP_ASCII_ARMOR\",\n-                                        \"value\": \"PGP_ASCII_ARMOR\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IGNORE\",\n+                                        \"value\": \"IGNORE\"\n                                     },\n                                     {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=AES/CBC/NoPadding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n-                                        \"displayName\": \"AES_CBC_NO_PADDING\",\n-                                        \"value\": \"AES_CBC_NO_PADDING\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RENAME\",\n+                                        \"value\": \"RENAME\"\n                                     },\n                                     {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=AES/CBC/PKCS7Padding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n-                                        \"displayName\": \"AES_CBC\",\n-                                        \"value\": \"AES_CBC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REJECT\",\n+                                        \"value\": \"REJECT\"\n                                     },\n                                     {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=AES/CTR/NoPadding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n-                                        \"displayName\": \"AES_CTR\",\n-                                        \"value\": \"AES_CTR\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FAIL\",\n+                                        \"value\": \"FAIL\"\n                                     },\n                                     {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=AES/GCM/NoPadding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n-                                        \"displayName\": \"AES_GCM\",\n-                                        \"value\": \"AES_GCM\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AES_GCM\",\n-                                \"description\": \"The Encryption Algorithm to use\",\n-                                \"displayName\": \"Encryption Algorithm\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Determines how to handle the problem of filename collisions\",\n+                                \"displayName\": \"Conflict Resolution\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Encryption Algorithm\",\n+                                \"name\": \"Conflict Resolution\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mode\": {\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Create Directory\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Encrypt\",\n-                                        \"value\": \"Encrypt\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Decrypt\",\n-                                        \"value\": \"Decrypt\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Encrypt\",\n-                                \"description\": \"Specifies whether the content should be encrypted or decrypted\",\n-                                \"displayName\": \"Mode\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mode\",\n+                                \"name\": \"Create Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The Password to use for encrypting or decrypting the data\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"allow-weak-crypto\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Operation will not be blocked and no alerts will be presented when unsafe combinations of encryption algorithms and passwords are provided\",\n-                                        \"displayName\": \"Allowed\",\n-                                        \"value\": \"allowed\"\n-                                    },\n-                                    {\n-                                        \"description\": \"When set, operation will be blocked and alerts will be presented to the user if unsafe combinations of encryption algorithms and passwords are provided on a JVM with limited strength crypto. To fix this, see the Admin Guide.\",\n-                                        \"displayName\": \"Not Allowed\",\n-                                        \"value\": \"not-allowed\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"not-allowed\",\n-                                \"description\": \"Overrides the default behavior to prevent unsafe combinations of encryption algorithms and short passwords on JVMs with limited strength cryptographic jurisdiction policies\",\n-                                \"displayName\": \"Allow insecure cryptographic modes\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"allow-weak-crypto\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-derivation-function\": {\n+                            \"Disable Directory Listing\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The cipher is given a raw key conforming to the algorithm specifications\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"MD5 @ 1000 iterations\",\n-                                        \"displayName\": \"NiFi Legacy KDF\",\n-                                        \"value\": \"NIFI_LEGACY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Single iteration MD5 compatible with PKCS#5 v1.5\",\n-                                        \"displayName\": \"OpenSSL EVP_BytesToKey\",\n-                                        \"value\": \"OPENSSL_EVP_BYTES_TO_KEY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Bcrypt with configurable work factor. See Admin Guide\",\n-                                        \"displayName\": \"Bcrypt\",\n-                                        \"value\": \"BCRYPT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Scrypt with configurable cost parameters. See Admin Guide\",\n-                                        \"displayName\": \"Scrypt\",\n-                                        \"value\": \"SCRYPT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PBKDF2 with configurable hash function and iteration count. See Admin Guide\",\n-                                        \"displayName\": \"PBKDF2\",\n-                                        \"value\": \"PBKDF2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Argon2 with configurable cost parameters. See Admin Guide.\",\n-                                        \"displayName\": \"Argon2\",\n-                                        \"value\": \"ARGON2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the key derivation function to generate the key from the password (and salt)\",\n-                                \"displayName\": \"Key Derivation Function\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to 'true', directory listing is not performed prior to create missing directories. By default, this processor executes a directory listing command to see target directory existence before creating missing directories. However, there are situations that you might need to disable the directory listing such as the following. Directory listing might fail with some permission setups (e.g. chmod 100) on a directory. Also, if any other SFTP client created the directory after this processor performed a listing and before a directory creation request by this processor is finished, then an error is returned because the directory already exists.\",\n+                                \"displayName\": \"Disable Directory Listing\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-derivation-function\",\n-                                \"required\": true,\n+                                \"name\": \"Disable Directory Listing\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"pgp-symmetric-cipher\": {\n+                            \"Dot Rename\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"IDEA\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRIPLE_DES\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CAST5\",\n-                                        \"value\": \"3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLOWFISH\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DES\",\n-                                        \"value\": \"6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_128\",\n-                                        \"value\": \"7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_192\",\n-                                        \"value\": \"8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_256\",\n-                                        \"value\": \"9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TWOFISH\",\n-                                        \"value\": \"10\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CAMELLIA_128\",\n-                                        \"value\": \"11\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CAMELLIA_192\",\n-                                        \"value\": \"12\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CAMELLIA_256\",\n-                                        \"value\": \"13\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"7\",\n-                                \"description\": \"When using PGP encryption, this is the symmetric cipher to be used. This property is ignored if Encryption Algorithm is not PGP or PGP-ASCII-ARMOR\\nNote that the provided cipher is only used duringthe encryption phase, while it is inferred from the ciphertext in the decryption phase\",\n-                                \"displayName\": \"PGP Symmetric Cipher\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, then the filename of the sent file is prepended with a \\\".\\\" and then renamed back to the original once the file is completely sent. Otherwise, there is no rename. This property is ignored if the Temporary Filename property is set.\",\n+                                \"displayName\": \"Dot Rename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"pgp-symmetric-cipher\",\n+                                \"name\": \"Dot Rename\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"private-keyring-file\": {\n-                                \"description\": \"In a PGP decrypt mode, this keyring contains the private key of the recipient\",\n-                                \"displayName\": \"Private Keyring File\",\n+                            \"Host Key File\": {\n+                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n+                                \"displayName\": \"Host Key File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"private-keyring-file\",\n+                                \"name\": \"Host Key File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"private-keyring-passphrase\": {\n-                                \"description\": \"In a PGP decrypt mode, this is the private keyring passphrase\",\n-                                \"displayName\": \"Private Keyring Passphrase\",\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"private-keyring-passphrase\",\n+                                \"name\": \"Http Proxy Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"public-key-user-id\": {\n-                                \"description\": \"In a PGP encrypt mode, this user id of the recipient\",\n-                                \"displayName\": \"Public Key User Id\",\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"public-key-user-id\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"public-keyring-file\": {\n-                                \"description\": \"In a PGP encrypt mode, this keyring contains the public key of the recipient\",\n-                                \"displayName\": \"Public Keyring File\",\n+                            \"Key Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n+                                \"displayName\": \"Key Algorithms Allowed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"public-keyring-file\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Key Algorithms Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"raw-key-hex\": {\n-                                \"description\": \"In keyed encryption, this is the raw key, encoded in hexadecimal\",\n-                                \"displayName\": \"Raw Key (hexadecimal)\",\n+                            \"Key Exchange Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n+                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"raw-key-hex\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Key Exchange Algorithms Allowed\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully encrypted or decrypted will be routed to success\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be encrypted or decrypted will be routed to failure\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"CPU\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"Argon2\",\n-                            \"Bcrypt\",\n-                            \"JCE\",\n-                            \"KDF\",\n-                            \"PBKDF2\",\n-                            \"Scrypt\",\n-                            \"decryption\",\n-                            \"encryption\",\n-                            \"iv\",\n-                            \"password\",\n-                            \"salt\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EncryptContent\",\n-                        \"typeDescription\": \"Encrypts or Decrypts a FlowFile using either symmetric encryption with a raw key or password and randomly generated salt, or asymmetric encryption using a public and secret key.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"\\\"encrypted\\\" or \\\"decrypted\\\" depending on the processor action\",\n-                                \"name\": \"encryptcontent.action\"\n-                            },\n-                            {\n-                                \"description\": \"The algorithm used for the cryptographic operation\",\n-                                \"name\": \"encryptcontent.algorithm\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The cipher text length in bytes (including IV, salt, and delimiters if present). Determined from incoming content in decrypt mode; outgoing content in encrypt mode\",\n-                                \"name\": \"encryptcontent.cipher_text_length\"\n+                            \"Last Modified Time\": {\n+                                \"description\": \"The lastModifiedTime to assign to the file after transferring it. If not set, the lastModifiedTime will not be changed. Format must be yyyy-MM-dd'T'HH:mm:ssZ. You may also use expression language such as ${file.lastModifiedTime}. If the value is invalid, the processor will not be invalid but will fail to change lastModifiedTime of the file.\",\n+                                \"displayName\": \"Last Modified Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Last Modified Time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The Initialization Vector in hex encoding (if present)\",\n-                                \"name\": \"encryptcontent.iv\"\n+                            \"Message Authentication Codes Allowed\": {\n+                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n+                                \"displayName\": \"Message Authentication Codes Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The IV length in bytes\",\n-                                \"name\": \"encryptcontent.iv_length\"\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"The Key Derivation Function used if Password-Based Encryption was enabled. See Admin Guide - Key Derivation Functions\",\n-                                \"name\": \"encryptcontent.kdf\"\n+                            \"Permissions\": {\n+                                \"description\": \"The permissions to assign to the file after transferring it. Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644). If not set, the permissions will not be changed. You may also use expression language such as ${file.permissions}. If the value is invalid, the processor will not be invalid but will fail to change permissions of the file.\",\n+                                \"displayName\": \"Permissions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Permissions\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The KDF-specific salt including algorithm and cost parameters (if present). See Admin Guide - Key Derivation Functions\",\n-                                \"name\": \"encryptcontent.kdf_salt\"\n+                            \"Port\": {\n+                                \"defaultValue\": \"22\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The KDF salt length in bytes\",\n-                                \"name\": \"encryptcontent.kdf_salt_length\"\n+                            \"Private Key Passphrase\": {\n+                                \"description\": \"Password for the private key\",\n+                                \"displayName\": \"Private Key Passphrase\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"The number of iterations used in PBKDF2 KDF (if present). PBKDF2 does not encode the cost parameter in a custom salt\",\n-                                \"name\": \"encryptcontent.pbkdf2_iterations\"\n+                            \"Private Key Path\": {\n+                                \"description\": \"The fully qualified path to the Private Key file\",\n+                                \"displayName\": \"Private Key Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Path\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The plaintext length in bytes. Determined from incoming content in encrypt mode; outgoing content in decrypt mode\",\n-                                \"name\": \"encryptcontent.plaintext_length\"\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The raw salt in hex encoding (if present)\",\n-                                \"name\": \"encryptcontent.salt\"\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The raw salt length in bytes\",\n-                                \"name\": \"encryptcontent.salt_length\"\n+                            \"Proxy Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The timestamp at which the cryptographic operation occurred in 'yyyy-MM-dd HH:mm:ss.SSS Z' format\",\n-                                \"name\": \"encryptcontent.timestamp\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"batch-count\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum number of FlowFiles that EnforceOrder can process at an execution.\",\n-                                \"displayName\": \"Batch Count\",\n+                            \"Reject Zero-Byte Files\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines whether or not Zero-byte files should be rejected without attempting to transfer\",\n+                                \"displayName\": \"Reject Zero-Byte Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch-count\",\n-                                \"required\": true,\n+                                \"name\": \"Reject Zero-Byte Files\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"group-id\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"EnforceOrder is capable of multiple ordering groups. 'Group Identifier' is used to determine which group a FlowFile belongs to. This property will be evaluated with each incoming FlowFile. If evaluated result is empty, the FlowFile will be routed to failure.\",\n-                                \"displayName\": \"Group Identifier\",\n+                            \"Remote Group\": {\n+                                \"description\": \"Integer value representing the Group ID to set on the file after transferring it. If not set, the group will not be set. You may also use expression language such as ${file.group}. If the value is invalid, the processor will not be invalid but will fail to change the group of the file.\",\n+                                \"displayName\": \"Remote Group\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"group-id\",\n-                                \"required\": true,\n+                                \"name\": \"Remote Group\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"inactive-timeout\": {\n-                                \"defaultValue\": \"30 min\",\n-                                \"description\": \"Indicates the duration after which state for an inactive group will be cleared from managed state. Group is determined as inactive if any new incoming FlowFile has not seen for a group for specified duration. Inactive Timeout must be longer than Wait Timeout. If a FlowFile arrives late after its group is already cleared, it will be treated as a brand new group, but will never match the order since expected preceding FlowFiles are already gone. The FlowFile will eventually timeout for waiting and routed to 'overtook'. To avoid this, group states should be kept long enough, however, shorter duration would be helpful for reusing the same group identifier again.\",\n-                                \"displayName\": \"Inactive Timeout\",\n+                            \"Remote Owner\": {\n+                                \"description\": \"Integer value representing the User ID to set on the file after transferring it. If not set, the owner will not be set. You may also use expression language such as ${file.owner}. If the value is invalid, the processor will not be invalid but will fail to change the owner of the file.\",\n+                                \"displayName\": \"Remote Owner\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote Owner\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Path\": {\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Send Keep Alive On Timeout\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n+                                \"displayName\": \"Send Keep Alive On Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"inactive-timeout\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"initial-order\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When the first FlowFile of a group arrives, initial target order will be computed and stored in the managed state. After that, target order will start being tracked by EnforceOrder and stored in the state management store. If Expression Language is used but evaluated result was not an integer, then the FlowFile will be routed to failure, and initial order will be left unknown until consecutive FlowFiles provide a valid initial order.\",\n-                                \"displayName\": \"Initial Order\",\n+                            \"Strict Host Key Checking\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n+                                \"displayName\": \"Strict Host Key Checking\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"initial-order\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Strict Host Key Checking\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"maximum-order\": {\n-                                \"description\": \"If specified, any FlowFiles that have larger order will be routed to failure. This property is computed only once for a given group. After a maximum order is computed, it will be persisted in the state management store and used for other FlowFiles belonging to the same group. If Expression Language is used but evaluated result was not an integer, then the FlowFile will be routed to failure, and maximum order will be left unknown until consecutive FlowFiles provide a valid maximum order.\",\n-                                \"displayName\": \"Maximum Order\",\n+                            \"Temporary Filename\": {\n+                                \"description\": \"If set, the filename of the sent file will be equal to the value specified during the transfer and after successful completion will be renamed to the original filename. If this value is set, the Dot Rename property is ignored.\",\n+                                \"displayName\": \"Temporary Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"maximum-order\",\n+                                \"name\": \"Temporary Filename\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"order-attribute\": {\n-                                \"description\": \"A name of FlowFile attribute whose value will be used to enforce order of FlowFiles within a group. If a FlowFile does not have this attribute, or its value is not an integer, the FlowFile will be routed to failure.\",\n-                                \"displayName\": \"Order Attribute\",\n+                            \"Use Compression\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"order-attribute\",\n+                                \"name\": \"Use Compression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"wait-timeout\": {\n-                                \"defaultValue\": \"10 min\",\n-                                \"description\": \"Indicates the duration after which waiting FlowFiles will be routed to the 'overtook' relationship.\",\n-                                \"displayName\": \"Wait Timeout\",\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"wait-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.GetSFTP\"\n+                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"EnforceOrder uses following states per ordering group: '<groupId>.target' is a order number which is being waited to arrive next. When a FlowFile with a matching order arrives, or a FlowFile overtakes the FlowFile being waited for because of wait timeout, target order will be updated to (FlowFile.order + 1). '<groupId>.max is the maximum order number for a group. '<groupId>.updatedAt' is a timestamp when the order of a group was updated last time. These managed states will be removed automatically once a group is determined as inactive, see 'Inactive Timeout' for detail.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile that waited for preceding FlowFiles longer than Wait Timeout and overtook those FlowFiles, will be routed to this relationship.\",\n-                                \"name\": \"overtook\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile that has an order younger than current, which means arrived too late and skipped, will be routed to this relationship.\",\n-                                \"name\": \"skipped\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile with a matching order number will be routed to this relationship.\",\n+                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile with non matching order will be routed to this relationship\",\n-                                \"name\": \"wait\"\n+                                \"description\": \"FlowFiles that were rejected by the destination system\",\n+                                \"name\": \"reject\"\n                             },\n                             {\n-                                \"description\": \"A FlowFiles which does not have required attributes, or fails to compute those will be routed to this relationship\",\n+                                \"description\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"order\",\n-                            \"sort\"\n+                            \"archive\",\n+                            \"copy\",\n+                            \"egress\",\n+                            \"files\",\n+                            \"put\",\n+                            \"remote\",\n+                            \"sftp\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EnforceOrder\",\n-                        \"typeDescription\": \"Enforces expected ordering of FlowFiles that belong to the same data group within a single node.  Although PriorityAttributePrioritizer can be used on a connection to ensure that flow files going through that connection are in priority order, depending on error-handling, branching, and other flow designs, it is possible for FlowFiles to get out-of-order. EnforceOrder can be used to enforce original ordering for those FlowFiles. [IMPORTANT] In order to take effect of EnforceOrder, FirstInFirstOutPrioritizer should be used at EVERY downstream relationship UNTIL the order of FlowFiles physically get FIXED by operation such as MergeContent or being stored to the final destination.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All FlowFiles going through this processor will have this attribute. This value is used to determine wait timeout.\",\n-                                \"name\": \"EnforceOrder.startedAt\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles going through this processor will have this attribute denoting which relationship it was routed to.\",\n-                                \"name\": \"EnforceOrder.result\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles routed to 'failure' or 'skipped' relationship will have this attribute describing details.\",\n-                                \"name\": \"EnforceOrder.detail\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles routed to 'wait' or 'skipped' relationship will have this attribute denoting expected order when the FlowFile was processed.\",\n-                                \"name\": \"EnforceOrder.expectedOrder\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.PutSFTP\",\n+                        \"typeDescription\": \"Sends FlowFiles to an SFTP Server\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If <Destination>='flowfile-attribute' then that FlowFile attribute will be set to any JSON objects that match the JsonPath.  If <Destination>='flowfile-content' then the FlowFile content will be updated to any JSON objects that match the JsonPath.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute')\",\n-                                \"value\": \"A JsonPath expression\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Destination\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the results of the JsonPath evaluation are written to the FlowFile content or a FlowFile attribute; if using attribute, must specify the Attribute Name property. If set to flowfile-content, only one JsonPath may be specified, and the property name is ignored.\",\n-                                \"displayName\": \"Destination\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The preferred number of FlowFiles to put to the database in a single transaction\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n-                                \"displayName\": \"Max String Length\",\n+                            \"JDBC Connection Pool\": {\n+                                \"description\": \"Specifies the JDBC Connection Pool to use in order to convert the JSON message to a SQL statement. The Connection Pool is necessary in order to determine the appropriate database column types.\",\n+                                \"displayName\": \"JDBC Connection Pool\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max String Length\",\n+                                \"name\": \"JDBC Connection Pool\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Null Value Representation\": {\n+                            \"Obtain Generated Keys\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"empty string\",\n-                                        \"value\": \"empty string\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"the string 'null'\",\n-                                        \"value\": \"the string 'null'\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"empty string\",\n-                                \"description\": \"Indicates the desired representation of JSON Path expressions resulting in a null value.\",\n-                                \"displayName\": \"Null Value Representation\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, any key that is automatically generated by the database will be added to the FlowFile that generated it using the sql.generate.key attribute. This may result in slightly slower performance and is not supported by all databases.\",\n+                                \"displayName\": \"Obtain Generated Keys\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null Value Representation\",\n-                                \"required\": true,\n+                                \"name\": \"Obtain Generated Keys\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Path Not Found Behavior\": {\n+                            \"Support Fragmented Transactions\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"warn\",\n-                                        \"value\": \"warn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"skip\",\n-                                        \"value\": \"skip\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ignore\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"flowfile-attribute\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Destination\",\n-                                        \"propertyName\": \"Destination\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Indicates how to handle missing JSON path expressions when destination is set to 'flowfile-attribute'. Selecting 'warn' will generate a warning when a JSON path expression is not found. Selecting 'skip' will omit attributes for any unmatched JSON path expressions.\",\n-                                \"displayName\": \"Path Not Found Behavior\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, when a FlowFile is consumed by this Processor, the Processor will first check the fragment.identifier and fragment.count attributes of that FlowFile. If the fragment.count value is greater than 1, the Processor will not process any FlowFile with that fragment.identifier until all are available; at that point, it will process all FlowFiles with that fragment.identifier as a single transaction, in the order specified by the FlowFiles' fragment.index attributes. This Provides atomicity of those SQL statements. Once any statement of this transaction throws exception when executing, this transaction will be rolled back. When transaction rollback happened, none of these FlowFiles would be routed to 'success'. If the <Rollback On Failure> is set true, these FlowFiles will stay in the input relationship. When the <Rollback On Failure> is set false,, if any of these FlowFiles will be routed to 'retry', all of these FlowFiles will be routed to 'retry'.Otherwise, they will be routed to 'failure'. If this value is false, these attributes will be ignored and the updates will occur independent of one another.\",\n+                                \"displayName\": \"Support Fragmented Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Not Found Behavior\",\n-                                \"required\": true,\n+                                \"name\": \"Support Fragmented Transactions\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Return Type\": {\n+                            \"Transaction Timeout\": {\n+                                \"description\": \"If the <Support Fragmented Transactions> property is set to true, specifies how long to wait for all FlowFiles for a particular fragment.identifier attribute to arrive before just transferring all of the FlowFiles with that identifier to the 'failure' relationship\",\n+                                \"displayName\": \"Transaction Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transaction Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"database-session-autocommit\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"auto-detect\",\n-                                        \"value\": \"auto-detect\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"json\",\n-                                        \"value\": \"json\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"The autocommit mode to set on the database connection being used. If set to false, the operation(s) will be explicitly committed or rolled back (based on success or failure respectively), if set to true the driver/database handles the commit/rollback.\",\n+                                \"displayName\": \"Database Session AutoCommit\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"database-session-autocommit\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"putsql-sql-statement\": {\n+                                \"description\": \"The SQL statement to execute. The statement can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming FlowFiles. If this property is empty, the content of the incoming FlowFile is expected to contain a valid SQL statement, to be issued by the processor to the database.\",\n+                                \"displayName\": \"SQL Statement\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"putsql-sql-statement\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"rollback-on-failure\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"scalar\",\n-                                        \"value\": \"scalar\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Indicates the desired return type of the JSON Path expressions.  Selecting 'auto-detect' will set the return type to 'json' for a Destination of 'flowfile-content', and 'scalar' for a Destination of 'flowfile-attribute'.\",\n-                                \"displayName\": \"Return Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specify how to handle error. By default (false), if an error occurs while processing a FlowFile, the FlowFile will be routed to 'failure' or 'retry' relationship based on error type, and processor can continue with next FlowFile. Instead, you may want to rollback currently processed FlowFiles and stop further processing immediately. In that case, you can do so by enabling this 'Rollback On Failure' property.  If enabled, failed FlowFiles will stay in the input relationship without penalizing it and being processed repeatedly until it gets processed successfully or removed by other means. It is important to set adequate 'Yield Duration' to avoid retrying too frequently.\",\n+                                \"displayName\": \"Rollback On Failure\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Return Type\",\n+                                \"name\": \"rollback-on-failure\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine whether or not two FlowFiles belong to the same transaction.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine how many FlowFiles are needed to complete the transaction.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine the order that the FlowFiles in a transaction should be evaluated.\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter.\",\n+                                \"name\": \"sql.args.N.type\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"name\": \"sql.args.N.value\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"name\": \"sql.args.N.format\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ConvertJSONToSQL\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath cannot be evaluated against the content of the FlowFile; for instance, if the FlowFile is not valid JSON\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"A FlowFile is routed to this relationship after the database is successfully updated\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated and retrying the operation will also fail, such as an invalid query or an integrity constraint violation\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"JSON\",\n-                            \"JsonPath\",\n-                            \"evaluate\"\n+                            \"database\",\n+                            \"insert\",\n+                            \"put\",\n+                            \"rdbms\",\n+                            \"relational\",\n+                            \"sql\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EvaluateJsonPath\",\n-                        \"typeDescription\": \"Evaluates one or more JsonPath expressions against the content of a FlowFile. The results of those expressions are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor. JsonPaths are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is flowfile-attribute; otherwise, the property name is ignored). The value of the property must be a valid JsonPath expression. A Return Type of 'auto-detect' will make a determination based off the configured destination. When 'Destination' is set to 'flowfile-attribute,' a return type of 'scalar' will be used. When 'Destination' is set to 'flowfile-content,' a return type of 'JSON' will be used.If the JsonPath evaluates to a JSON array or JSON object and the Return Type is set to 'scalar' the FlowFile will be unmodified and will be routed to failure. A Return Type of JSON can return scalar values if the provided JsonPath evaluates to the specified value and will be routed as a match.If Destination is 'flowfile-content' and the JsonPath does not evaluate to a defined path, the FlowFile will be routed to 'unmatched' without having its contents modified. If Destination is 'flowfile-attribute' and the expression matches nothing, attributes will be created with empty strings as the value unless 'Path Not Found Behaviour' is set to 'skip', and the FlowFile will always be routed to 'matched.'\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.PutSQL\",\n+                        \"typeDescription\": \"Executes a SQL UPDATE or INSERT command. The content of an incoming FlowFile is expected to be the SQL command to execute. The SQL command may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the database generated a key for an INSERT statement and the Obtain Generated Keys property is set to true, this attribute will be added to indicate the generated key, if possible. This feature is not supported by all database vendors.\",\n+                                \"name\": \"sql.generated.key\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If <Destination>='flowfile-attribute' then the FlowFile attribute is set to the result of the XPath Expression.  If <Destination>='flowfile-content' then the FlowFile content is set to the result of the XPath Expression.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute'\",\n-                                \"value\": \"An XPath expression\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Destination\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the results of the XPath evaluation are written to the FlowFile content or a FlowFile attribute; if using attribute, must specify the Attribute Name property. If set to flowfile-content, only one XPath may be specified, and the property name is ignored.\",\n-                                \"displayName\": \"Destination\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"25\",\n+                                \"description\": \"The number of incoming FlowFiles to process in a single execution of this processor.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Return Type\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the Syslog messages. Note that Expression language is not evaluated per FlowFile.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The IP address or hostname of the Syslog server.\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Idle Connection Expiration\": {\n+                                \"defaultValue\": \"5 seconds\",\n+                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection.\",\n+                                \"displayName\": \"Idle Connection Expiration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Idle Connection Expiration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Size of Socket Send Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Max Size of Socket Send Buffer\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Body\": {\n+                                \"description\": \"The body for the Syslog messages.\",\n+                                \"displayName\": \"Message Body\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Message Body\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Hostname\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"The hostname for the Syslog messages.\",\n+                                \"displayName\": \"Message Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Message Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Priority\": {\n+                                \"description\": \"The priority for the Syslog messages, excluding < >.\",\n+                                \"displayName\": \"Message Priority\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Message Priority\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Timestamp\": {\n+                                \"defaultValue\": \"${now():format('MMM d HH:mm:ss')}\",\n+                                \"description\": \"The timestamp for the Syslog messages. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", \\\" or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\".\",\n+                                \"displayName\": \"Message Timestamp\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Message Timestamp\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Version\": {\n+                                \"description\": \"The version for the Syslog messages.\",\n+                                \"displayName\": \"Message Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Message Version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"description\": \"The port for Syslog communication. Note that Expression language is not evaluated per FlowFile.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"auto-detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"nodeset\",\n-                                        \"value\": \"nodeset\"\n+                                        \"displayName\": \"TCP\",\n+                                        \"value\": \"TCP\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n+                                        \"displayName\": \"UDP\",\n+                                        \"value\": \"UDP\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Indicates the desired return type of the Xpath expressions.  Selecting 'auto-detect' will set the return type to 'nodeset' for a Destination of 'flowfile-content', and 'string' for a Destination of 'flowfile-attribute'.\",\n-                                \"displayName\": \"Return Type\",\n+                                \"defaultValue\": \"UDP\",\n+                                \"description\": \"The protocol for Syslog communication.\",\n+                                \"displayName\": \"Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Return Type\",\n+                                \"name\": \"Protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Validate DTD\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"SSL Context Service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"TCP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Allow embedded Document Type Declaration in XML. This feature should be disabled to avoid XML entity expansion vulnerabilities.\",\n-                                \"displayName\": \"Allow DTD\",\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, syslog messages will be sent over a secure connection.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Validate DTD\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The timeout for connecting to and communicating with the syslog server. Does not apply to UDP. Note that Expression language is not evaluated per FlowFile.\",\n+                                \"displayName\": \"Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Timeout\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XPath cannot be evaluated against the content of the FlowFile; for instance, if the FlowFile is not valid XML, or if the Return Type is 'nodeset' and the XPath evaluates to multiple nodes\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles that are sent successfully to Syslog are sent out this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XPath does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"FlowFiles that failed to send to Syslog are sent out this relationship.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XPath is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"FlowFiles that do not form a valid Syslog message are sent out this relationship.\",\n+                                \"name\": \"invalid\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Processing requires reading the entire FlowFile into memory\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"XML\",\n-                            \"XPath\",\n-                            \"evaluate\"\n+                            \"logs\",\n+                            \"put\",\n+                            \"syslog\",\n+                            \"tcp\",\n+                            \"udp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EvaluateXPath\",\n-                        \"typeDescription\": \"Evaluates one or more XPaths against the content of a FlowFile. The results of those XPaths are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor. XPaths are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is flowfile-attribute; otherwise, the property name is ignored). The value of the property must be a valid XPath expression. If the XPath evaluates to more than one node and the Return Type is set to 'nodeset' (either directly, or via 'auto-detect' with a Destination of 'flowfile-content'), the FlowFile will be unmodified and will be routed to failure. If the XPath does not evaluate to a Node, the FlowFile will be routed to 'unmatched' without having its contents modified. If Destination is flowfile-attribute and the expression matches nothing, attributes will be created with empty strings as the value, and the FlowFile will always be routed to 'matched'\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"This processor adds user-defined attributes if the <Destination> property is set to flowfile-attribute.\",\n-                                \"name\": \"user-defined\"\n-                            }\n-                        ]\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.PutSyslog\",\n+                        \"typeDescription\": \"Sends Syslog messages to a given host and port over TCP or UDP. Messages are constructed from the \\\"Message ___\\\" properties of the processor which can use expression language to generate messages from incoming FlowFiles. The properties are used to construct messages of the form: (<PRIORITY>)(VERSION )(TIMESTAMP) (HOSTNAME) (BODY) where version is optional.  The constructed messages are checked against regular expressions for RFC5424 and RFC3164 formatted messages. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\". If a message is constructed that does not form a valid Syslog message according to the above description, then it is routed to the invalid relationship. Valid messages are sent to the Syslog server and successes are routed to the success relationship, failures routed to the failure relationship.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If <Destination>='flowfile-attribute' then the FlowFile attribute is set to the result of the XQuery.  If <Destination>='flowfile-content' then the FlowFile content is set to the result of the XQuery.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute'\",\n-                                \"value\": \"An XQuery\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Destination\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"FLOWFILE_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transmission Strategy\",\n+                                        \"propertyName\": \"Transmission Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the character set of the data being sent.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Per FlowFile\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the results of the XQuery evaluation are written to the FlowFile content or a FlowFile attribute. If set to <flowfile-content>, only one XQuery may be specified and the property name is ignored.  If set to <flowfile-attribute> and the XQuery returns more than one result, multiple attributes will be added to theFlowFile, each named with a '.n' one-up number appended to the specified attribute name\",\n-                                \"displayName\": \"Destination\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether to send each FlowFile's content on an individual connection.\",\n+                                \"displayName\": \"Connection Per FlowFile\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n+                                \"name\": \"Connection Per FlowFile\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output: Indent\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether the processor may add additional whitespace when outputting a result tree.\",\n-                                \"displayName\": \"Output: Indent\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Destination hostname or IP address\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Idle Connection Expiration\": {\n+                                \"defaultValue\": \"15 seconds\",\n+                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n+                                \"displayName\": \"Idle Connection Expiration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Idle Connection Expiration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Size of Socket Send Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Send Buffer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output: Indent\",\n+                                \"name\": \"Max Size of Socket Send Buffer\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output: Method\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"xml\",\n-                                        \"value\": \"xml\"\n-                                    },\n+                            \"Outgoing Message Delimiter\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"html\",\n-                                        \"value\": \"html\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"FLOWFILE_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transmission Strategy\",\n+                                        \"propertyName\": \"Transmission Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the delimiter to use when sending messages out over the same TCP stream. The delimiter is appended to each FlowFile message that is transmitted over the stream so that the receiver can determine when one message ends and the next message begins. Users should ensure that the FlowFile content does not contain the delimiter character to avoid errors. In order to use a new line character you can enter '\\\\n'. For a tab character use '\\\\t'. Finally for a carriage return use '\\\\r'.\",\n+                                \"displayName\": \"Outgoing Message Delimiter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Outgoing Message Delimiter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"description\": \"Destination port number\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Record Reader\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\n+                                        \"dependentValues\": [\n+                                            \"RECORD_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transmission Strategy\",\n+                                        \"propertyName\": \"Transmission Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"xml\",\n-                                \"description\": \"Identifies the overall method that should be used for outputting a result tree.\",\n-                                \"displayName\": \"Output: Method\",\n+                                \"description\": \"Specifies the Controller Service to use for reading Records from input FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output: Method\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Output: Omit XML Declaration\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether the processor should output an XML declaration when transforming a result tree.\",\n-                                \"displayName\": \"Output: Omit XML Declaration\",\n+                            \"Record Writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"RECORD_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transmission Strategy\",\n+                                        \"propertyName\": \"Transmission Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for writing Records to the configured socket address\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output: Omit XML Declaration\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies the SSL Context Service to enable TLS socket communication\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n+                                \"displayName\": \"Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Timeout\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Validate DTD\": {\n+                            \"Transmission Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Send FlowFile content as a single stream\",\n+                                        \"displayName\": \"FlowFile-oriented\",\n+                                        \"value\": \"FLOWFILE_ORIENTED\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Read Records from input FlowFiles and send serialized Records as individual messages\",\n+                                        \"displayName\": \"Record-oriented\",\n+                                        \"value\": \"RECORD_ORIENTED\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Allow embedded Document Type Declaration in XML. This feature should be disabled to avoid XML entity expansion vulnerabilities.\",\n-                                \"displayName\": \"Allow DTD\",\n+                                \"defaultValue\": \"FLOWFILE_ORIENTED\",\n+                                \"description\": \"Specifies the strategy used for reading input FlowFiles and transmitting messages to the destination socket address\",\n+                                \"displayName\": \"Transmission Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Validate DTD\",\n+                                \"name\": \"Transmission Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ListenTCP\",\n+                            \"org.apache.nifi.processors.standard.PutUDP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XQuery cannot be evaluated against the content of the FlowFile.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XQuery does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XQuery is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Processing requires reading the entire FlowFile into memory\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"XML\",\n-                            \"XPath\",\n-                            \"XQuery\",\n-                            \"evaluate\"\n+                            \"egress\",\n+                            \"put\",\n+                            \"remote\",\n+                            \"tcp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EvaluateXQuery\",\n-                        \"typeDescription\": \"Evaluates one or more XQueries against the content of a FlowFile.  The results of those XQueries are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor.  XQueries are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is 'flowfile-attribute'; otherwise, the property name is ignored).  The value of the property must be a valid XQuery.  If the XQuery returns more than one result, new attributes or FlowFiles (for Destinations of 'flowfile-attribute' or 'flowfile-content' respectively) will be created for each result (attributes will have a '.n' one-up number appended to the specified attribute name).  If any provided XQuery returns a result, the FlowFile(s) will be routed to 'matched'. If no provided XQuery returns a result, the FlowFile will be routed to 'unmatched'.  If the Destination is 'flowfile-attribute' and the XQueries matche nothing, no attributes will be applied to the FlowFile.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutTCP\",\n+                        \"typeDescription\": \"Sends serialized FlowFiles or Records over TCP to a configurable destination with optional support for TLS\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This processor adds user-defined attributes if the <Destination> property is set to flowfile-attribute .\",\n-                                \"name\": \"user-defined\"\n+                                \"description\": \"Count of records transmitted to configured destination address\",\n+                                \"name\": \"record.count.transmitted\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -99722,299 +100241,321 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These environment variables are passed to the process spawned by this Processor\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"An environment variable name\",\n-                                \"value\": \"An environment variable value\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Argument Delimiter\": {\n-                                \"defaultValue\": \" \",\n-                                \"description\": \"Delimiter to use to separate arguments for a command [default: space]. Must be a single character.\",\n-                                \"displayName\": \"Argument Delimiter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Argument Delimiter\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Batch Duration\": {\n-                                \"description\": \"If the process is expected to be long-running and produce textual output, a batch duration can be specified so that the output will be captured for this amount of time and a FlowFile will then be sent out with the results and a new FlowFile will be started, rather than waiting for the process to finish before sending out the results\",\n-                                \"displayName\": \"Batch Duration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Duration\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Command\": {\n-                                \"description\": \"Specifies the command to be executed; if just the name of an executable is provided, it must be in the user's environment PATH.\",\n-                                \"displayName\": \"Command\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Destination hostname or IP address\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Command\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Command Arguments\": {\n-                                \"description\": \"The arguments to supply to the executable delimited by white space. White space can be escaped by enclosing it in double-quotes.\",\n-                                \"displayName\": \"Command Arguments\",\n+                            \"Idle Connection Expiration\": {\n+                                \"defaultValue\": \"15 seconds\",\n+                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n+                                \"displayName\": \"Idle Connection Expiration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Command Arguments\",\n-                                \"required\": false,\n+                                \"name\": \"Idle Connection Expiration\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output MIME type\": {\n-                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute. This property is ignored if 'Batch Duration' is set.\",\n-                                \"displayName\": \"Output MIME Type\",\n+                            \"Max Size of Socket Send Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Send Buffer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output MIME type\",\n-                                \"required\": false,\n+                                \"name\": \"Max Size of Socket Send Buffer\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Redirect Error Stream\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true will redirect any error stream output of the process to the output stream. This is particularly helpful for processes which write extensively to the error stream or for troubleshooting.\",\n-                                \"displayName\": \"Redirect Error Stream\",\n+                            \"Port\": {\n+                                \"description\": \"Destination port number\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Redirect Error Stream\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Working Directory\": {\n-                                \"description\": \"The directory to use as the current working directory when executing the command\",\n-                                \"displayName\": \"Working Directory\",\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n+                                \"displayName\": \"Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Working Directory\",\n+                                \"name\": \"Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ListenUDP\",\n+                            \"org.apache.nifi.processors.standard.PutTCP\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All created FlowFiles are routed to this relationship\",\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"command\",\n-                            \"external\",\n-                            \"invoke\",\n-                            \"process\",\n-                            \"script\",\n-                            \"source\"\n+                            \"egress\",\n+                            \"put\",\n+                            \"remote\",\n+                            \"udp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExecuteProcess\",\n-                        \"typeDescription\": \"Runs an operating system command specified by the user and writes the output of that command to a FlowFile. If the command is expected to be long-running, the Processor can output the partial data on a specified interval. When this option is used, the output is expected to be in textual format, as it typically does not make sense to split binary data on arbitrary time-based intervals.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Executed command\",\n-                                \"name\": \"command\"\n-                            },\n-                            {\n-                                \"description\": \"Arguments of the command\",\n-                                \"name\": \"command.arguments\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the MIME type of the output if the 'Output MIME Type' property is set and 'Batch Duration' is not set\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.PutUDP\",\n+                        \"typeDescription\": \"The PutUDP processor receives a FlowFile and packages the FlowFile content into a single UDP datagram packet which is then transmitted to the configured UDP server. The user must ensure that the FlowFile content being fed to this processor is not larger than the maximum size for the underlying UDP transport. The maximum transport size will vary based on the platform setup but is generally just under 64KB. FlowFiles will be marked as failed if their content is larger than the maximum transport size.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.type\",\n-                                \"value\": \"SQL type argument to be supplied\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.value\",\n-                                \"value\": \"Argument to be supplied\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.format\",\n-                                \"value\": \"SQL format argument to be supplied\"\n+                                \"description\": \"Specifies an initial max value for max value column(s). Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified).\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"initial.maxvalue.<max_value_column>\",\n+                                \"value\": \"Initial maximum value for the specified column\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n+                            \"Columns to Return\": {\n+                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Columns to Return\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Columns to Return\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n                             \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n                                 \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Database Connection Pooling Service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n+                            \"Fetch Size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored. If using PostgreSQL, then 'Set Auto Commit' must be equal to 'false' to cause 'Fetch Size' to take effect.\",\n+                                \"displayName\": \"Fetch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Fetch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n                             \"Max Wait Time\": {\n                                 \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL select query  , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n                                 \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n                                 \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SQL select query\": {\n-                                \"description\": \"The SQL select query to execute. The query can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming flowfiles. If this property is empty, the content of the incoming flow file is expected to contain a valid SQL select query, to be issued by the processor to the database. Note that Expression Language is not evaluated for flow file contents.\",\n-                                \"displayName\": \"SQL select query\",\n+                            \"Maximum-value Columns\": {\n+                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Maximum-value Columns\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SQL select query\",\n+                                \"name\": \"Maximum-value Columns\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"compression-format\": {\n+                            \"Set Auto Commit\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BZIP2\",\n-                                        \"value\": \"BZIP2\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DEFLATE\",\n-                                        \"value\": \"DEFLATE\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"description\": \"Allows enabling or disabling the auto commit functionality of the DB connection. Default value is 'No value set'. 'No value set' will leave the db connection's auto commit mode unchanged. For some JDBC drivers such as PostgreSQL driver, it is required to disable the auto commit functionality to get the 'Fetch Size' setting to take effect. When auto commit is enabled, PostgreSQL driver ignores 'Fetch Size' setting and loads all rows of the result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html.\",\n+                                \"displayName\": \"Set Auto Commit\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Set Auto Commit\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Table Name\": {\n+                                \"description\": \"The name of the database table to be queried. When a custom query is used, this property is used to alias the query and appears as an attribute on the FlowFile.\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-fetch-db-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Compression type to use when writing Avro files. Default is None.\",\n-                                \"displayName\": \"Compression Format\",\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n+                                \"displayName\": \"Database Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-format\",\n+                                \"name\": \"db-fetch-db-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n+                            \"db-fetch-sql-query\": {\n+                                \"description\": \"A custom SQL query used to retrieve data. Instead of building a SQL query from other properties, this query will be wrapped as a sub-query. Query must have no ORDER BY statement.\",\n+                                \"displayName\": \"Custom Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"db-fetch-sql-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-fetch-where-clause\": {\n+                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n+                                \"displayName\": \"Additional WHERE clause\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"db-fetch-where-clause\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n                             \"dbf-default-precision\": {\n                                 \"defaultValue\": \"10\",\n                                 \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n                                 \"displayName\": \"Default Decimal Precision\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"dbf-default-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"dbf-default-scale\": {\n                                 \"defaultValue\": \"0\",\n                                 \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n                                 \"displayName\": \"Default Decimal Scale\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"dbf-default-scale\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"dbf-normalize\": {\n                                 \"allowableValues\": [\n                                     {\n@@ -100057,280 +100598,385 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"dbf-user-logical-types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-auto-commit\": {\n+                            \"initial-load-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Loads all existing rows from the database table.\",\n+                                        \"displayName\": \"Start at Beginning\",\n+                                        \"value\": \"Start at Beginning\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Loads only the newly inserted or updated rows based on the maximum value(s) of the column(s) configured in the 'Maximum-value Columns' property.\",\n+                                        \"displayName\": \"Start at Current Maximum Values\",\n+                                        \"value\": \"Start at Current Maximum Values\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Enables or disables the auto commit functionality of the DB connection. Default value is 'true'. The default value can be used with most of the JDBC drivers and this functionality doesn't have any impact in most of the cases since this processor is used to read data. However, for some JDBC drivers such as PostgreSQL driver, it is required to disable the auto committing functionality to limit the number of result rows fetching at a time. When auto commit is enabled, postgreSQL driver loads whole result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html. \",\n-                                \"displayName\": \"Set Auto Commit\",\n+                                \"defaultValue\": \"Start at Beginning\",\n+                                \"description\": \"How to handle existing rows in the database table when the processor is started for the first time (or its state has been cleared). The property will be ignored, if any 'initial.maxvalue.*' dynamic property has also been configured.\",\n+                                \"displayName\": \"Initial Load Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"esql-auto-commit\",\n+                                \"name\": \"initial-load-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-fetch-size\": {\n+                            \"qdbt-max-frags\": {\n                                 \"defaultValue\": \"0\",\n-                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n-                                \"displayName\": \"Fetch Size\",\n+                                \"description\": \"The maximum number of fragments. If the value specified is zero, then all fragments are returned. This prevents OutOfMemoryError when this processor ingests huge table. NOTE: Setting this property can result in data loss, as the incoming results are not ordered, and fragments may end at arbitrary boundaries where rows are not included in the result set.\",\n+                                \"displayName\": \"Maximum Number of Fragments\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"esql-fetch-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"qdbt-max-frags\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-max-rows\": {\n+                            \"qdbt-max-rows\": {\n                                 \"defaultValue\": \"0\",\n                                 \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n                                 \"displayName\": \"Max Rows Per Flow File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"esql-max-rows\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"qdbt-max-rows\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-output-batch-size\": {\n+                            \"qdbt-output-batch-size\": {\n                                 \"defaultValue\": \"0\",\n-                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The fragment.count attribute will not be set on FlowFiles when this property is set.\",\n+                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n                                 \"displayName\": \"Output Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"esql-output-batch-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"qdbt-output-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sql-post-query\": {\n-                                \"description\": \"A semicolon-delimited list of queries executed after the main SQL query is executed. Example like setting session properties after main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n-                                \"displayName\": \"SQL Post-Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sql-post-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sql-pre-query\": {\n-                                \"description\": \"A semicolon-delimited list of queries executed before the main SQL query is executed. For example, set session properties before main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n-                                \"displayName\": \"SQL Pre-Query\",\n+                            \"transaction-isolation-level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRANSACTION_NONE\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRANSACTION_READ_COMMITTED\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRANSACTION_READ_UNCOMMITTED\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRANSACTION_REPEATABLE_READ\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRANSACTION_SERIALIZABLE\",\n+                                        \"value\": \"8\"\n+                                    }\n+                                ],\n+                                \"description\": \"This setting will set the transaction isolation level for the database connection for drivers that support this setting\",\n+                                \"displayName\": \"Transaction Isolation Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sql-pre-query\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"transaction-isolation-level\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n-                                \"name\": \"sql.args.N.type\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"name\": \"sql.args.N.value\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"name\": \"sql.args.N.format\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n+                            \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n                                 \"description\": \"Successfully created FlowFile from SQL query result set.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n                             \"database\",\n                             \"jdbc\",\n                             \"query\",\n                             \"select\",\n                             \"sql\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExecuteSQL\",\n-                        \"typeDescription\": \"Executes provided SQL select query. Query result will be converted to Avro format. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query, and the query may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format. FlowFile attribute 'executesql.row.count' indicates how many rows were selected.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.QueryDatabaseTable\",\n+                        \"typeDescription\": \"Generates a SQL select query, or uses a provided statement, and executes it to fetch all rows whose values in the specified Maximum Value column(s) are larger than the previously-seen maxima. Query result will be converted to Avro format. Expression Language is supported for several properties, but no incoming connections are permitted. The Variable Registry may be used to provide values for any property containing Expression Language. If it is desired to leverage flow file attributes to perform these queries, the GenerateTableFetch and/or ExecuteSQL processors can be used for this purpose. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer or cron expression, using the standard scheduling methods. This processor is intended to be run on the Primary Node only. FlowFile attribute 'querydbtable.row.count' indicates how many rows were selected.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Contains the number of rows returned by the query. If 'Max Rows Per Flow File' is set, then this number will reflect the number of rows in the Flow File instead of the entire result set.\",\n-                                \"name\": \"executesql.row.count\"\n-                            },\n-                            {\n-                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds. If 'Max Rows Per Flow File' is set, then this number will reflect only the fetch time for the rows in the Flow File instead of the entire result set.\",\n-                                \"name\": \"executesql.query.duration\"\n-                            },\n-                            {\n-                                \"description\": \"Duration of the query execution time in milliseconds. This number will reflect the query execution time regardless of the 'Max Rows Per Flow File' setting.\",\n-                                \"name\": \"executesql.query.executiontime\"\n-                            },\n-                            {\n-                                \"description\": \"Duration of the result set fetch time in milliseconds. If 'Max Rows Per Flow File' is set, then this number will reflect only the fetch time for the rows in the Flow File instead of the entire result set.\",\n-                                \"name\": \"executesql.query.fetchtime\"\n-                            },\n-                            {\n-                                \"description\": \"Assuming multiple result sets are returned, the zero based index of this result set.\",\n-                                \"name\": \"executesql.resultset.index\"\n+                                \"description\": \"Name of the table being queried\",\n+                                \"name\": \"tablename\"\n                             },\n                             {\n-                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n-                                \"name\": \"executesql.error.message\"\n+                                \"description\": \"The number of rows selected by the query\",\n+                                \"name\": \"querydbtable.row.count\"\n                             },\n                             {\n                                 \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n                                 \"name\": \"fragment.identifier\"\n                             },\n                             {\n                                 \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n                                 \"name\": \"fragment.count\"\n                             },\n                             {\n                                 \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n                                 \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"If the processor has an incoming connection, outgoing FlowFiles will have this attribute set to the value of the input FlowFile's UUID. If there is no incoming connection, the attribute will not be added.\",\n-                                \"name\": \"input.flowfile.uuid\"\n+                                \"description\": \"Each attribute contains the observed maximum value of a specified 'Maximum-value Column'. The suffix of the attribute is the name of the column. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"maxvalue.*\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.type\",\n-                                \"value\": \"SQL type argument to be supplied\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.value\",\n-                                \"value\": \"Argument to be supplied\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.format\",\n-                                \"value\": \"SQL format argument to be supplied\"\n+                                \"description\": \"Specifies an initial max value for max value column(s). Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified).\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"initial.maxvalue.<max_value_column>\",\n+                                \"value\": \"Initial maximum value for the specified column\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n+                            \"Columns to Return\": {\n+                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Columns to Return\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Columns to Return\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n                             \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n                                 \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Database Connection Pooling Service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n+                            \"Fetch Size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored. If using PostgreSQL, then 'Set Auto Commit' must be equal to 'false' to cause 'Fetch Size' to take effect.\",\n+                                \"displayName\": \"Fetch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Fetch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n                             \"Max Wait Time\": {\n                                 \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL select query  , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n                                 \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n                                 \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SQL select query\": {\n-                                \"description\": \"The SQL select query to execute. The query can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming flowfiles. If this property is empty, the content of the incoming flow file is expected to contain a valid SQL select query, to be issued by the processor to the database. Note that Expression Language is not evaluated for flow file contents.\",\n-                                \"displayName\": \"SQL select query\",\n+                            \"Maximum-value Columns\": {\n+                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Maximum-value Columns\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SQL select query\",\n+                                \"name\": \"Maximum-value Columns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Set Auto Commit\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"description\": \"Allows enabling or disabling the auto commit functionality of the DB connection. Default value is 'No value set'. 'No value set' will leave the db connection's auto commit mode unchanged. For some JDBC drivers such as PostgreSQL driver, it is required to disable the auto commit functionality to get the 'Fetch Size' setting to take effect. When auto commit is enabled, PostgreSQL driver ignores 'Fetch Size' setting and loads all rows of the result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html.\",\n+                                \"displayName\": \"Set Auto Commit\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Set Auto Commit\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Table Name\": {\n+                                \"description\": \"The name of the database table to be queried. When a custom query is used, this property is used to alias the query and appears as an attribute on the FlowFile.\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-fetch-db-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n+                                \"displayName\": \"Database Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"db-fetch-db-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-fetch-sql-query\": {\n+                                \"description\": \"A custom SQL query used to retrieve data. Instead of building a SQL query from other properties, this query will be wrapped as a sub-query. Query must have no ORDER BY statement.\",\n+                                \"displayName\": \"Custom Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"db-fetch-sql-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-fetch-where-clause\": {\n+                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n+                                \"displayName\": \"Additional WHERE clause\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"db-fetch-where-clause\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"dbf-default-precision\": {\n                                 \"defaultValue\": \"10\",\n                                 \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n                                 \"displayName\": \"Default Decimal Precision\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"dbf-default-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"dbf-default-scale\": {\n                                 \"defaultValue\": \"0\",\n                                 \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n                                 \"displayName\": \"Default Decimal Scale\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"dbf-default-scale\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"dbf-user-logical-types\": {\n                                 \"allowableValues\": [\n                                     {\n@@ -100350,219 +100996,174 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"dbf-user-logical-types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-auto-commit\": {\n+                            \"initial-load-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Loads all existing rows from the database table.\",\n+                                        \"displayName\": \"Start at Beginning\",\n+                                        \"value\": \"Start at Beginning\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Loads only the newly inserted or updated rows based on the maximum value(s) of the column(s) configured in the 'Maximum-value Columns' property.\",\n+                                        \"displayName\": \"Start at Current Maximum Values\",\n+                                        \"value\": \"Start at Current Maximum Values\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Enables or disables the auto commit functionality of the DB connection. Default value is 'true'. The default value can be used with most of the JDBC drivers and this functionality doesn't have any impact in most of the cases since this processor is used to read data. However, for some JDBC drivers such as PostgreSQL driver, it is required to disable the auto committing functionality to limit the number of result rows fetching at a time. When auto commit is enabled, postgreSQL driver loads whole result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html. \",\n-                                \"displayName\": \"Set Auto Commit\",\n+                                \"defaultValue\": \"Start at Beginning\",\n+                                \"description\": \"How to handle existing rows in the database table when the processor is started for the first time (or its state has been cleared). The property will be ignored, if any 'initial.maxvalue.*' dynamic property has also been configured.\",\n+                                \"displayName\": \"Initial Load Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"esql-auto-commit\",\n+                                \"name\": \"initial-load-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-fetch-size\": {\n+                            \"qdbt-max-frags\": {\n                                 \"defaultValue\": \"0\",\n-                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n-                                \"displayName\": \"Fetch Size\",\n+                                \"description\": \"The maximum number of fragments. If the value specified is zero, then all fragments are returned. This prevents OutOfMemoryError when this processor ingests huge table. NOTE: Setting this property can result in data loss, as the incoming results are not ordered, and fragments may end at arbitrary boundaries where rows are not included in the result set.\",\n+                                \"displayName\": \"Maximum Number of Fragments\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"esql-fetch-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"qdbt-max-frags\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-max-rows\": {\n+                            \"qdbt-max-rows\": {\n                                 \"defaultValue\": \"0\",\n                                 \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n                                 \"displayName\": \"Max Rows Per Flow File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"esql-max-rows\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"qdbt-max-rows\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-output-batch-size\": {\n+                            \"qdbt-output-batch-size\": {\n                                 \"defaultValue\": \"0\",\n-                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The fragment.count attribute will not be set on FlowFiles when this property is set.\",\n+                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n                                 \"displayName\": \"Output Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"esql-output-batch-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"qdbt-output-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esqlrecord-normalize\": {\n+                            \"qdbtr-normalize\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to change characters in column names. For example, colons and periods will be changed to underscores.\",\n+                                \"description\": \"Whether to change characters in column names when creating the output schema. For example, colons and periods will be changed to underscores.\",\n                                 \"displayName\": \"Normalize Table/Column Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"esqlrecord-normalize\",\n+                                \"name\": \"qdbtr-normalize\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esqlrecord-record-writer\": {\n+                            \"qdbtr-record-writer\": {\n                                 \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer may use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"esqlrecord-record-writer\",\n+                                \"name\": \"qdbtr-record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"sql-post-query\": {\n-                                \"description\": \"A semicolon-delimited list of queries executed after the main SQL query is executed. Example like setting session properties after main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n-                                \"displayName\": \"SQL Post-Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sql-post-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sql-pre-query\": {\n-                                \"description\": \"A semicolon-delimited list of queries executed before the main SQL query is executed. For example, set session properties before main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n-                                \"displayName\": \"SQL Pre-Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sql-pre-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n-                                \"name\": \"sql.args.N.type\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"name\": \"sql.args.N.value\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"name\": \"sql.args.N.format\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n+                            \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n                                 \"description\": \"Successfully created FlowFile from SQL query result set.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n                             \"database\",\n                             \"jdbc\",\n                             \"query\",\n                             \"record\",\n                             \"select\",\n                             \"sql\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExecuteSQLRecord\",\n-                        \"typeDescription\": \"Executes provided SQL select query. Query result will be converted to the format specified by a Record Writer. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query, and the query may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format. FlowFile attribute 'executesql.row.count' indicates how many rows were selected.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.QueryDatabaseTableRecord\",\n+                        \"typeDescription\": \"Generates a SQL select query, or uses a provided statement, and executes it to fetch all rows whose values in the specified Maximum Value column(s) are larger than the previously-seen maxima. Query result will be converted to the format specified by the record writer. Expression Language is supported for several properties, but no incoming connections are permitted. The Variable Registry may be used to provide values for any property containing Expression Language. If it is desired to leverage flow file attributes to perform these queries, the GenerateTableFetch and/or ExecuteSQL processors can be used for this purpose. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer or cron expression, using the standard scheduling methods. This processor is intended to be run on the Primary Node only. FlowFile attribute 'querydbtable.row.count' indicates how many rows were selected.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Contains the number of rows returned in the select query\",\n-                                \"name\": \"executesql.row.count\"\n-                            },\n-                            {\n-                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds\",\n-                                \"name\": \"executesql.query.duration\"\n-                            },\n-                            {\n-                                \"description\": \"Duration of the query execution time in milliseconds\",\n-                                \"name\": \"executesql.query.executiontime\"\n-                            },\n-                            {\n-                                \"description\": \"Duration of the result set fetch time in milliseconds\",\n-                                \"name\": \"executesql.query.fetchtime\"\n-                            },\n-                            {\n-                                \"description\": \"Assuming multiple result sets are returned, the zero based index of this result set.\",\n-                                \"name\": \"executesql.resultset.index\"\n+                                \"description\": \"Name of the table being queried\",\n+                                \"name\": \"tablename\"\n                             },\n                             {\n-                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n-                                \"name\": \"executesql.error.message\"\n+                                \"description\": \"The number of rows selected by the query\",\n+                                \"name\": \"querydbtable.row.count\"\n                             },\n                             {\n                                 \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n                                 \"name\": \"fragment.identifier\"\n                             },\n                             {\n                                 \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n                                 \"name\": \"fragment.count\"\n                             },\n                             {\n                                 \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n                                 \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"If the processor has an incoming connection, outgoing FlowFiles will have this attribute set to the value of the input FlowFile's UUID. If there is no incoming connection, the attribute will not be added.\",\n-                                \"name\": \"input.flowfile.uuid\"\n+                                \"description\": \"Each attribute contains the observed maximum value of a specified 'Maximum-value Column'. The suffix of the attribute is the name of the column. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"maxvalue.*\"\n                             },\n                             {\n                                 \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n                                 \"description\": \"The number of records output by the Record Writer.\",\n@@ -100587,428 +101188,192 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"These environment variables are passed to the process spawned by this Processor\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"An environment variable name\",\n-                                \"value\": \"An environment variable value\"\n-                            },\n-                            {\n-                                \"description\": \"These arguments are supplied to the process spawned by this Processor when using the Command Arguments Strategy : Dynamic Property Arguments. <commandIndex> is a number and it will determine the order.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"command.argument.<commandIndex>\",\n-                                \"value\": \"Argument to be supplied to the command\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"description\": \"Each user-defined property specifies a SQL SELECT statement to run over the data, with the data that is selected being routed to the relationship whose name is the property name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of the relationship to route data to\",\n+                                \"value\": \"A SQL SELECT statement that is used to determine what data should be routed to this relationship.\"\n                             }\n                         ],\n+                        \"dynamicRelationship\": {\n+                            \"description\": \"Each user-defined property defines a new Relationship for this Processor.\",\n+                            \"name\": \"<Property Name>\"\n+                        },\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Argument Delimiter\": {\n-                                \"defaultValue\": \";\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Command Arguments Property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Command Arguments Strategy\",\n-                                        \"propertyName\": \"argumentsStrategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Delimiter to use to separate arguments for a command [default: ;]. Must be a single character\",\n-                                \"displayName\": \"Argument Delimiter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Argument Delimiter\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Command Arguments\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Command Arguments Property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Command Arguments Strategy\",\n-                                        \"propertyName\": \"argumentsStrategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The arguments to supply to the executable delimited by the ';' character.\",\n-                                \"displayName\": \"Command Arguments\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Command Arguments\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Command Path\": {\n-                                \"description\": \"Specifies the command to be executed; if just the name of an executable is provided, it must be in the user's environment PATH.\",\n-                                \"displayName\": \"Command Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Command Path\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore STDIN\": {\n+                            \"cache-schema\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the contents of the incoming flowfile will not be passed to the executing command\",\n-                                \"displayName\": \"Ignore STDIN\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore STDIN\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Attribute Length\": {\n-                                \"defaultValue\": \"256\",\n-                                \"description\": \"If routing the output of the stream command to an attribute, the number of characters put to the attribute value will be at most this amount. This is important because attributes are held in memory and large attributes will quickly cause out of memory issues. If the output goes longer than this value, it will truncated to fit. Consider making this smaller if able.\",\n-                                \"displayName\": \"Max Attribute Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Attribute Length\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Output Destination Attribute\": {\n-                                \"description\": \"If set, the output of the stream command will be put into an attribute of the original FlowFile instead of a separate FlowFile. There will no longer be a relationship for 'output stream' or 'nonzero status'. The value of this property will be the key for the output attribute.\",\n-                                \"displayName\": \"Output Destination Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Destination Attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Output MIME Type\": {\n-                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute. This property is ignored if 'Output Destination Attribute' is set.\",\n-                                \"displayName\": \"Output MIME Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"This property is no longer used. It remains solely for backward compatibility in order to avoid making existing Processors invalid upon upgrade. This property will be removed in future versions. Now, instead of forcing the user to understand the semantics of schema caching, the Processor caches up to 25 schemas and automatically rolls off the old schemas. This provides the same performance when caching was enabled previously and in some cases very significant performance improvements if caching was previously disabled.\",\n+                                \"displayName\": \"Cache Schema\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output MIME Type\",\n-                                \"required\": false,\n+                                \"name\": \"cache-schema\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Working Directory\": {\n-                                \"description\": \"The directory to use as the current working directory when executing the command\",\n-                                \"displayName\": \"Working Directory\",\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Working Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"argumentsStrategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Arguments to be supplied to the executable are taken from the Command Arguments property\",\n-                                        \"displayName\": \"Command Arguments Property\",\n-                                        \"value\": \"Command Arguments Property\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Arguments to be supplied to the executable are taken from dynamic properties with pattern of 'command.argument.<commandIndex>'\",\n-                                        \"displayName\": \"Dynamic Property Arguments\",\n-                                        \"value\": \"Dynamic Property Arguments\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Command Arguments Property\",\n-                                \"description\": \"Strategy for configuring arguments to be supplied to the command.\",\n-                                \"displayName\": \"Command Arguments Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"argumentsStrategy\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The destination path for the flow file created from the command's output, if the returned status code is zero.\",\n-                                \"name\": \"output stream\"\n-                            },\n-                            {\n-                                \"description\": \"The destination path for the flow file created from the command's output, if the returned status code is non-zero. All flow files routed to this relationship will be penalized.\",\n-                                \"name\": \"nonzero status\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile will be routed. It will have new attributes detailing the result of the script execution.\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"command\",\n-                            \"command execution\",\n-                            \"execute\",\n-                            \"stream\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExecuteStreamCommand\",\n-                        \"typeDescription\": \"The ExecuteStreamCommand processor provides a flexible way to integrate external commands and scripts into NiFi data flows. ExecuteStreamCommand can pass the incoming FlowFile's content to the command that it executes similarly how piping works.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the command executed\",\n-                                \"name\": \"execution.command\"\n-                            },\n-                            {\n-                                \"description\": \"The semi-colon delimited list of arguments. Sensitive properties will be masked\",\n-                                \"name\": \"execution.command.args\"\n-                            },\n-                            {\n-                                \"description\": \"The exit status code returned from executing the command\",\n-                                \"name\": \"execution.status\"\n-                            },\n-                            {\n-                                \"description\": \"Any error messages returned from executing the command\",\n-                                \"name\": \"execution.error\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the MIME type of the output if the 'Output MIME Type' property is set and 'Output Destination Attribute' is not set\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Patterns can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the file is encoded\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-attribute\",\n-                                \"description\": \"Control if Grok output value is written as a new flowfile attributes, in this case each of the Grok identifier that is matched in the flowfile will be added as an attribute, prefixed with \\\"grok.\\\" or written in the flowfile content. Writing to flowfile content will overwrite any existing flowfile content.\",\n-                                \"displayName\": \"Destination\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n+                                \"name\": \"dbf-default-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Grok Expression\": {\n-                                \"description\": \"Grok expression. If other Grok expressions are referenced in this expression, they must be provided in the Grok Pattern File if set or exist in the default Grok patterns\",\n-                                \"displayName\": \"Grok Expression\",\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grok Expression\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Grok Pattern file\": {\n-                                \"description\": \"Custom Grok pattern definitions. These definitions will be loaded after the default Grok patterns. The Grok Parser will use the default Grok patterns when this property is not configured.\",\n-                                \"displayName\": \"Grok Patterns\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grok Pattern file\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Keep Empty Captures\": {\n+                            \"include-zero-record-flowfiles\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then empty capture values will be included in the returned capture map.\",\n-                                \"displayName\": \"Keep Empty Captures\",\n+                                \"description\": \"When running the SQL statement against an incoming FlowFile, if the result has no data, this property specifies whether or not a FlowFile will be sent to the corresponding relationship\",\n+                                \"displayName\": \"Include Zero Record FlowFiles\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Empty Captures\",\n+                                \"name\": \"include-zero-record-flowfiles\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the Grok expressions. Files larger than the specified maximum will not be fully evaluated.\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Buffer Size\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Named captures only\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Only store named captures from grok\",\n-                                \"displayName\": \"Named captures only\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Named captures only\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"restricted\": true,\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when no provided Grok Expression matches the content of the FlowFile\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the SQL statement contains columns not present in input data), the original FlowFile it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the Grok Expression is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"The original FlowFile is routed to this relationship\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"delimit\",\n-                            \"extract\",\n-                            \"grok\",\n-                            \"log\",\n-                            \"parse\",\n-                            \"text\"\n+                            \"aggregate\",\n+                            \"avro\",\n+                            \"calcite\",\n+                            \"csv\",\n+                            \"etl\",\n+                            \"filter\",\n+                            \"json\",\n+                            \"logs\",\n+                            \"modify\",\n+                            \"query\",\n+                            \"record\",\n+                            \"route\",\n+                            \"select\",\n+                            \"sql\",\n+                            \"text\",\n+                            \"transform\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExtractGrok\",\n-                        \"typeDescription\": \"Evaluates one or more Grok Expressions against the content of a FlowFile, adding the results as attributes or replacing the content of the FlowFile with a JSON notation of the matched content\",\n+                        \"type\": \"org.apache.nifi.processors.standard.QueryRecord\",\n+                        \"typeDescription\": \"Evaluates one or more SQL queries against the contents of a FlowFile. The result of the SQL query then becomes the content of the output FlowFile. This can be used, for example, for field-specific filtering, transformation, and row-level filtering. Columns can be renamed, simple calculations and aggregations performed, etc. The Processor is configured with a Record Reader Controller Service and a Record Writer service so as to allow flexibility in incoming and outgoing data formats. The Processor must be configured with at least one user-defined property. The name of the Property is the Relationship to route data to, and the value of the Property is a SQL SELECT statement that is used to specify how input data should be transformed/filtered. The SQL statement must be valid ANSI SQL and is powered by Apache Calcite. If the transformation fails, the original FlowFile is routed to the 'failure' relationship. Otherwise, the data selected will be routed to the associated relationship. If the Record Writer chooses to inherit the schema from the Record, it is important to note that the schema that is inherited will be from the ResultSet, rather than the input Record. This allows a single instance of the QueryRecord processor to have multiple queries, each of which returns a different set of columns and aggregations. As a result, though, the schema that is derived will have no schema name, so it is important that the configured Record Writer not attempt to write the Schema Name as an attribute if inheriting the Schema from the Record. See the Processor Usage documentation for more information.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"When operating in flowfile-attribute mode, each of the Grok identifier that is matched in the flowfile will be added as an attribute, prefixed with \\\"grok.\\\" For example,if the grok identifier \\\"timestamp\\\" is matched, then the value will be added to an attribute named \\\"grok.timestamp\\\"\",\n-                                \"name\": \"grok.XXX\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records selected by the query\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The relation to which the FlowFile was routed\",\n+                                \"name\": \"QueryRecord.Route\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -101017,29 +101382,26 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Allows users to specify fields to remove that match the RecordPath.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"(Ignored)\",\n+                                \"value\": \"A RecordPath to the field to be removed.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Specifies the number of schemas to cache. This value should reflect the expected number of different schemas that may be in the incoming FlowFiles. This ensures more efficient retrieval of the schemas and thus the processor performance.\",\n-                                \"displayName\": \"Schema Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n                             \"record-reader\": {\n                                 \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n                                 \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-reader\",\n@@ -101047,66 +101409,83 @@\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles whose record schemas are successfully extracted will be routed to this relationship\",\n+                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile's record schema cannot be extracted from the configured input format, the FlowFile will be routed to this relationship\",\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n                             \"avro\",\n                             \"csv\",\n+                            \"delete\",\n                             \"freeform\",\n                             \"generic\",\n                             \"json\",\n                             \"record\",\n+                            \"remove\",\n                             \"schema\",\n                             \"text\",\n-                            \"xml\"\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExtractRecordSchema\",\n-                        \"typeDescription\": \"Extracts the record schema from the FlowFile using the supplied Record Reader and writes it to the `avro.schema` attribute.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.RemoveRecordField\",\n+                        \"typeDescription\": \"Modifies the contents of a FlowFile that contains Record-oriented data (i.e. data that can be read via a RecordReader and written by a RecordWriter) by removing selected fields. This Processor requires that at least one user-defined Property be added. The name of the property is ignored by the processor, but could be a meaningful identifier for the user. The value of the property should indicate a RecordPath that determines the field to be removed. The processor executes the removal in the order in which these properties are added to the processor. Set the \\\"Record Writer\\\" to \\\"Inherit Record Schema\\\" in order to use the updated Record Schema modified when removing Fields.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader.\",\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n                                 \"name\": \"record.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute provides the schema extracted from the input FlowFile using the provided RecordReader.\",\n-                                \"name\": \"avro.schema\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -101116,22 +101495,14 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"The first capture group, if any found, will be placed into that attribute name.But all capture groups, including the matching string sequence itself will also be provided at that attribute name with an index value provided.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A FlowFile attribute\",\n-                                \"value\": \"A Regular Expression with one or more capturing group\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n                             \"Character Set\": {\n                                 \"defaultValue\": \"UTF-8\",\n                                 \"description\": \"The Character Set in which the file is encoded\",\n@@ -101139,346 +101510,259 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Canonical Equivalence\": {\n+                            \"Evaluation Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Line-by-Line\",\n+                                        \"value\": \"Line-by-Line\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Entire text\",\n+                                        \"value\": \"Entire text\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that two characters match only when their full canonical decompositions match.\",\n-                                \"displayName\": \"Enable Canonical Equivalence\",\n+                                \"defaultValue\": \"Line-by-Line\",\n+                                \"description\": \"Run the 'Replacement Strategy' against each line separately (Line-by-Line) or buffer the entire file into memory (Entire Text) and run against that.\",\n+                                \"displayName\": \"Evaluation Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Canonical Equivalence\",\n+                                \"name\": \"Evaluation Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Case-insensitive Matching\": {\n+                            \"Line-by-Line Evaluation Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"All\",\n+                                        \"value\": \"All\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that two characters match even if they are in a different case.  Can also be specified via the embedded flag (?i).\",\n-                                \"displayName\": \"Enable Case-insensitive Matching\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Case-insensitive Matching\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Enable DOTALL Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"First-Line\",\n+                                        \"value\": \"First-Line\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that the expression '.' should match any character, including a line terminator.  Can also be specified via the embedded flag (?s).\",\n-                                \"displayName\": \"Enable DOTALL Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable DOTALL Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Enable Literal Parsing of the Pattern\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Last-Line\",\n+                                        \"value\": \"Last-Line\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Except-First-Line\",\n+                                        \"value\": \"Except-First-Line\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Except-Last-Line\",\n+                                        \"value\": \"Except-Last-Line\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that Metacharacters and escape characters should be given no special meaning.\",\n-                                \"displayName\": \"Enable Literal Parsing of the Pattern\",\n+                                \"defaultValue\": \"All\",\n+                                \"description\": \"Run the 'Replacement Strategy' against each line separately (Line-by-Line) for all lines in the FlowFile, First Line (Header) alone, Last Line (Footer) alone, Except the First Line (Header) or Except the Last Line (Footer).\",\n+                                \"displayName\": \"Line-by-Line Evaluation Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Literal Parsing of the Pattern\",\n-                                \"required\": true,\n+                                \"name\": \"Line-by-Line Evaluation Mode\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Multiline Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that '^' and '$' should match just after and just before a line terminator or end of sequence, instead of only the beginning or end of the entire input.  Can also be specified via the embeded flag (?m).\",\n-                                \"displayName\": \"Enable Multiline Mode\",\n+                            \"Maximum Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer (per file or per line, depending on the Evaluation Mode) in order to apply the replacement. If 'Entire Text' (in Evaluation Mode) is selected and the FlowFile is larger than this value, the FlowFile will be routed to 'failure'. In 'Line-by-Line' Mode, if a single line is larger than this value, the FlowFile will be routed to 'failure'. A default value of 1 MB is provided, primarily for 'Entire Text' mode. In 'Line-by-Line' Mode, a value such as 8 KB or 16 KB is suggested. This value is ignored if the <Replacement Strategy> property is set to one of: Append, Prepend, Always Replace\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Multiline Mode\",\n+                                \"name\": \"Maximum Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Unicode Predefined Character Classes\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Regular Expression\": {\n+                                \"defaultValue\": \"(?s)(^.*$)\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"Regex Replace\",\n+                                            \"Literal Replace\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies conformance with the Unicode Technical Standard #18: Unicode Regular Expression Annex C: Compatibility Properties.  Can also be specified via the embedded flag (?U).\",\n-                                \"displayName\": \"Enable Unicode Predefined Character Classes\",\n+                                \"description\": \"The Search Value to search for in the FlowFile content. Only used for 'Literal Replace' and 'Regex Replace' matching strategies\",\n+                                \"displayName\": \"Search Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Unicode Predefined Character Classes\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Regular Expression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Unicode-aware Case Folding\": {\n+                            \"Replacement Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Insert the Replacement Value at the beginning of the FlowFile or the beginning of each line (depending on the Evaluation Mode). For \\\"Line-by-Line\\\" Evaluation Mode, the value will be prepended to each line. Similarly, for \\\"First-Line\\\", \\\"Last-Line\\\", \\\"Except-Last-Line\\\" and \\\"Except-First-Line\\\" Evaluation Modes,the value will be prepended to header alone, footer alone, all lines except header and all lines except footer respectively. For \\\"Entire Text\\\" evaluation mode,the value will be prepended to the entire text.\",\n+                                        \"displayName\": \"Prepend\",\n+                                        \"value\": \"Prepend\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"When used with 'Enable Case-insensitive Matching', matches in a manner consistent with the Unicode Standard.  Can also be specified via the embedded flag (?u).\",\n-                                \"displayName\": \"Enable Unicode-aware Case Folding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Unicode-aware Case Folding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Enable Unix Lines Mode\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"Insert the Replacement Value at the end of the FlowFile or the end of each line (depending on the Evaluation Mode). For \\\"Line-by-Line\\\" Evaluation Mode, the value will be appended to each line. Similarly, for \\\"First-Line\\\", \\\"Last-Line\\\", \\\"Except-Last-Line\\\" and \\\"Except-First-Line\\\" Evaluation Modes,the value will be appended to header alone, footer alone, all lines except header and all lines except footer respectively. For \\\"Entire Text\\\" evaluation mode,the value will be appended to the entire text.\",\n+                                        \"displayName\": \"Append\",\n+                                        \"value\": \"Append\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Prepends text before the start of the FlowFile (or the start of each line, depending on the configuration of the Evaluation Mode property) as well as appending text to the end of the FlowFile (or the end of each line, depending on the configuration of the Evaluation Mode property)\",\n+                                        \"displayName\": \"Surround\",\n+                                        \"value\": \"Surround\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that only the '\\n' line terminator is recognized in the behavior of '.', '^', and '$'.  Can also be specified via the embedded flag (?d).\",\n-                                \"displayName\": \"Enable Unix Lines Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Unix Lines Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Include Capture Group 0\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"Interpret the Search Value as a Regular Expression and replace all matches with the Replacement Value. The Replacement Value may reference Capturing Groups used in the Search Value by using a dollar-sign followed by the Capturing Group number, such as $1 or $2. If the Search Value is set to .* then everything is replaced without even evaluating the Regular Expression.\",\n+                                        \"displayName\": \"Regex Replace\",\n+                                        \"value\": \"Regex Replace\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Search for all instances of the Search Value and replace the matches with the Replacement Value.\",\n+                                        \"displayName\": \"Literal Replace\",\n+                                        \"value\": \"Literal Replace\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Always replaces the entire line or the entire contents of the FlowFile (depending on the value of the <Evaluation Mode> property) and does not bother searching for any value. When this strategy is chosen, the <Search Value> property is ignored.\",\n+                                        \"displayName\": \"Always Replace\",\n+                                        \"value\": \"Always Replace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Substitute variable references (specified in ${var} form) using FlowFile attributes for looking up the replacement value by variable name. When this strategy is chosen, both the <Search Value> and <Replacement Value> properties are ignored.\",\n+                                        \"displayName\": \"Substitute Variables\",\n+                                        \"value\": \"Substitute Variables\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates that Capture Group 0 should be included as an attribute. Capture Group 0 represents the entirety of the regular expression match, is typically not used, and could have considerable length.\",\n-                                \"displayName\": \"Include Capture Group 0\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Capture Group 0\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer (per FlowFile) in order to apply the regular expressions. FlowFiles larger than the specified maximum will not be fully evaluated.\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n+                                \"defaultValue\": \"Regex Replace\",\n+                                \"description\": \"The strategy for how and what to replace within the FlowFile's text content.\",\n+                                \"displayName\": \"Replacement Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Buffer Size\",\n+                                \"name\": \"Replacement Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Capture Group Length\": {\n-                                \"defaultValue\": \"1024\",\n-                                \"description\": \"Specifies the maximum number of characters a given capture group value can have. Any characters beyond the max will be truncated.\",\n-                                \"displayName\": \"Maximum Capture Group Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Capture Group Length\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Permit Whitespace and Comments in Pattern\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Replacement Value\": {\n+                                \"defaultValue\": \"$1\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"Prepend\",\n+                                            \"Regex Replace\",\n+                                            \"Always Replace\",\n+                                            \"Append\",\n+                                            \"Literal Replace\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"In this mode, whitespace is ignored, and embedded comments starting with # are ignored until the end of a line.  Can also be specified via the embedded flag (?x).\",\n-                                \"displayName\": \"Permit Whitespace and Comments in Pattern\",\n+                                \"description\": \"The value to insert using the 'Replacement Strategy'. Using \\\"Regex Replace\\\" back-references to Regular Expression capturing groups are supported, but back-references that reference capturing groups that do not exist in the regular expression will be treated as literal value. Back References may also be referenced using the Expression Language, as '$1', '$2', etc. The single-tick marks MUST be included, as these variables are not \\\"Standard\\\" attribute names (attribute names must be quoted unless they contain only numbers, letters, and _).\",\n+                                \"displayName\": \"Replacement Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Permit Whitespace and Comments in Pattern\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Replacement Value\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"extract-text-enable-named-groups\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Text to Append\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"Surround\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, when named groups are present in the regular expression, the name of the group will be used in the attribute name as opposed to the group index.  All capturing groups must be named, if the number of groups (not including capture group 0) does not equal the number of named groups validation will fail.\",\n-                                \"displayName\": \"Enable named group support\",\n+                                \"description\": \"The text to append to the end of the FlowFile, or each line, depending on teh configured value of the Evaluation Mode property\",\n+                                \"displayName\": \"Text to Append\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"extract-text-enable-named-groups\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Text to Append\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"extract-text-enable-repeating-capture-group\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Text to Prepend\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"Surround\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, every string matching the capture groups will be extracted. Otherwise, if the Regular Expression matches more than once, only the first match will be extracted.\",\n-                                \"displayName\": \"Enable repeating capture group\",\n+                                \"description\": \"The text to prepend to the start of the FlowFile, or each line, depending on teh configured value of the Evaluation Mode property\",\n+                                \"displayName\": \"Text to Prepend\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"extract-text-enable-repeating-capture-group\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Text to Prepend\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when no provided Regular Expression matches the content of the FlowFile\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"FlowFiles that have been successfully processed are routed to this relationship. This includes both FlowFiles that had text replaced and those that did not.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the Regular Expression is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"FlowFiles that could not be updated are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n+                            \"Change\",\n+                            \"Modify\",\n+                            \"Regex\",\n                             \"Regular Expression\",\n+                            \"Replace\",\n                             \"Text\",\n-                            \"evaluate\",\n-                            \"extract\",\n-                            \"regex\"\n+                            \"Update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExtractText\",\n-                        \"typeDescription\": \"Evaluates one or more Regular Expressions against the content of a FlowFile.  The results of those Regular Expressions are assigned to FlowFile Attributes.  Regular Expressions are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed.  The attributes are generated differently based on the enabling of named capture groups.  If named capture groups are not enabled:  The first capture group, if any found, will be placed into that attribute name.But all capture groups, including the matching string sequence itself will also be provided at that attribute name with an index value provided, with the exception of a capturing group that is optional and does not match - for example, given the attribute name \\\"regex\\\" and expression \\\"abc(def)?(g)\\\" we would add an attribute \\\"regex.1\\\" with a value of \\\"def\\\" if the \\\"def\\\" matched. If the \\\"def\\\" did not match, no attribute named \\\"regex.1\\\" would be added but an attribute named \\\"regex.2\\\" with a value of \\\"g\\\" will be added regardless.If named capture groups are enabled:  Each named capture group, if found will be placed into the attributes name with the name provided.  If enabled the matching string sequence itself will be placed into the attribute name.  If multiple matches are enabled, and index will be applied after the first set of matches. The exception is a capturing group that is optional and does not match  For example, given the attribute name \\\"regex\\\" and expression \\\"abc(?<NAMED>def)?(?<NAMED-TWO>g)\\\"  we would add an attribute \\\"regex.NAMED\\\" with the value of \\\"def\\\" if the \\\"def\\\" matched.  We would   add an attribute \\\"regex.NAMED-TWO\\\" with the value of \\\"g\\\" if the \\\"g\\\" matched regardless.  The value of the property must be a valid Regular Expressions with one or more capturing groups. If named capture groups are enabled, all capture groups must be named.  If they are not, then the  processor configuration will fail validation.  If the Regular Expression matches more than once, only the first match will be used unless the property enabling repeating capture group is set to true. If any provided Regular Expression matches, the FlowFile(s) will be routed to 'matched'. If no provided Regular Expression matches, the FlowFile will be routed to 'unmatched' and no attributes will be applied to the FlowFile.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ReplaceText\",\n+                        \"typeDescription\": \"Updates the content of a FlowFile by searching for some textual value in the FlowFile content (via Regular Expression/regex, or literal value) and replacing the section of the content that matches with some alternate value. It can also be used to append or prepend text to the contents of a FlowFile.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n@@ -101496,122 +101780,123 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Cache Entry Identifier\": {\n-                                \"defaultValue\": \"${hash.value}\",\n-                                \"description\": \"A comma-delimited list of FlowFile attributes, or the results of Attribute Expression Language statements, which will be evaluated against a FlowFile in order to determine the value(s) used to identify duplicates; it is these values that are cached. NOTE: Only a single Cache Entry Identifier is allowed unless Put Cache Value In Attribute is specified. Multiple cache lookups are only supported when the destination is a set of attributes (see the documentation for 'Put Cache Value In Attribute' for more details including naming convention.\",\n-                                \"displayName\": \"Cache Entry Identifier\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Cache Entry Identifier\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n                             \"Character Set\": {\n                                 \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the cached value is encoded. This will only be used when routing to an attribute.\",\n+                                \"description\": \"The Character Set in which the file is encoded\",\n                                 \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Character Set\",\n-                                \"required\": false,\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"The Controller Service that is used to get the cached values.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"Mapping File\": {\n+                                \"description\": \"The name of the file (including the full path) containing the Mappings.\",\n+                                \"displayName\": \"Mapping File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n+                                \"name\": \"Mapping File\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"Max Length To Put In Attribute\": {\n-                                \"defaultValue\": \"256\",\n-                                \"description\": \"If routing the cache value to an attribute of the FlowFile (by setting the \\\"Put Cache Value in attribute\\\" property), the number of characters put to the attribute value will be at most this amount. This is important because attributes are held in memory and large attributes will quickly cause out of memory issues. If the output goes longer than this value, it will be truncated to fit. Consider making this smaller if able.\",\n-                                \"displayName\": \"Max Length To Put In Attribute\",\n+                            \"Mapping File Refresh Interval\": {\n+                                \"defaultValue\": \"60s\",\n+                                \"description\": \"The polling interval to check for updates to the mapping file. The default is 60s.\",\n+                                \"displayName\": \"Mapping File Refresh Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Length To Put In Attribute\",\n-                                \"required\": false,\n+                                \"name\": \"Mapping File Refresh Interval\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Put Cache Value In Attribute\": {\n-                                \"description\": \"If set, the cache value received will be put into an attribute of the FlowFile instead of a the content of theFlowFile. The attribute key to put to is determined by evaluating value of this property. If multiple Cache Entry Identifiers are selected, multiple attributes will be written, using the evaluated value of this property, appended by a period (.) and the name of the cache entry identifier.\",\n-                                \"displayName\": \"Put Cache Value In Attribute\",\n+                            \"Matching Group\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of the matching group of the provided regex to replace with the corresponding value from the mapping file (if it exists).\",\n+                                \"displayName\": \"Matching Group\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Matching Group\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the regular expressions. If a FlowFile is larger than this value, the FlowFile will be routed to 'failure'\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Buffer Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Regular Expression\": {\n+                                \"defaultValue\": \"\\\\S+\",\n+                                \"description\": \"The Regular Expression to search for in the FlowFile content\",\n+                                \"displayName\": \"Regular Expression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Put Cache Value In Attribute\",\n-                                \"required\": false,\n+                                \"name\": \"Regular Expression\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.PutDistributedMapCache\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the cache was successfully communicated with it will be routed to this relationship\",\n+                                \"description\": \"FlowFiles that have been successfully updated are routed to this relationship, as well as FlowFiles whose content does not match the given Regular Expression\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If unable to communicate with the cache or if the cache entry is evaluated to be blank, the FlowFile will be penalized and routed to this relationship\",\n+                                \"description\": \"FlowFiles that could not be updated are routed to this relationship\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile's Cache Entry Identifier was not found in the cache, it will be routed to this relationship\",\n-                                \"name\": \"not-found\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"fetch\",\n-                            \"map\"\n+                            \"Change\",\n+                            \"Mapping\",\n+                            \"Modify\",\n+                            \"Regex\",\n+                            \"Regular Expression\",\n+                            \"Replace\",\n+                            \"Text\",\n+                            \"Update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FetchDistributedMapCache\",\n-                        \"typeDescription\": \"Computes cache key(s) from FlowFile attributes, for each incoming FlowFile, and fetches the value(s) from the Distributed Map Cache associated with each key. If configured without a destination attribute, the incoming FlowFile's content is replaced with the binary data received by the Distributed Map Cache. If there is no value stored under that key then the flow file will be routed to 'not-found'. Note that the processor will always attempt to read the entire cached value into memory before placing it in it's destination. This could be potentially problematic if the cached value is very large.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the 'Put Cache Value In Attribute' property is set then whatever it is set to will become the attribute key and the value would be whatever the response was from the Distributed Map Cache. If multiple cache entry identifiers are selected, multiple attributes will be written, using the evaluated value of this property, appended by a period (.) and the name of the cache entry identifier. For example, if the Cache Entry Identifier property is set to 'id,name', and the user-defined property is named 'fetched', then two attributes will be written, fetched.id and fetched.name, containing their respective values.\",\n-                                \"name\": \"user-defined\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.ReplaceTextWithMapping\",\n+                        \"typeDescription\": \"Updates the content of a FlowFile by evaluating a Regular Expression against it and replacing the section of the content that matches the Regular Expression with some alternate value provided in a mapping file.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n@@ -101623,1410 +101908,1353 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"One or more dynamic properties can be used to add attributes to FlowFiles passed to the 'retries_exceeded' relationship\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Exceeded FlowFile Attribute Key\",\n+                                \"value\": \"The value of the attribute added to the FlowFile\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Completion Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Leave the file as-is\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Move the file to the directory specified by the <Move Destination Directory> property\",\n-                                        \"displayName\": \"Move File\",\n-                                        \"value\": \"Move File\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Deletes the original file from the remote system\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"Delete File\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"Specifies what to do with the original file on the server once it has been pulled into NiFi. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n-                                \"displayName\": \"Completion Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Completion Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Mode\": {\n+                            \"Fail on Non-numerical Overwrite\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If the FlowFile already has the attribute defined in 'Retry Attribute' that is *not* a number, fail the FlowFile instead of resetting that value to '1'\",\n+                                \"displayName\": \"Fail on Non-numerical Overwrite\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Mode\",\n-                                \"required\": false,\n+                                \"name\": \"Fail on Non-numerical Overwrite\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"maximum-retries\": {\n+                                \"defaultValue\": \"3\",\n+                                \"description\": \"The maximum number of times a FlowFile can be retried before being passed to the 'retries_exceeded' relationship\",\n+                                \"displayName\": \"Maximum Retries\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"maximum-retries\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Directory\": {\n+                            \"penalize-retries\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Used when 'Completion Strategy' is 'Move File'. Specifies whether or not the remote directory should be created if it does not exist.\",\n-                                \"displayName\": \"Create Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If set to 'true', this Processor will penalize input FlowFiles before passing them to the 'retry' relationship. This does not apply to the 'retries_exceeded' relationship.\",\n+                                \"displayName\": \"Penalize Retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully-qualified hostname or IP address of the host to fetch the data from\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"penalize-retries\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n+                            \"retry-attribute\": {\n+                                \"defaultValue\": \"flowfile.retries\",\n+                                \"description\": \"The name of the attribute that contains the current retry count for the FlowFile. WARNING: If the name matches an attribute already on the FlowFile that does not contain a numerical value, the processor will either overwrite that attribute with '1' or fail based on configuration.\",\n+                                \"displayName\": \"Retry Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n+                                \"name\": \"retry-attribute\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Internal Buffer Size\": {\n-                                \"defaultValue\": \"16KB\",\n-                                \"description\": \"Set the internal buffer size for buffered data streams\",\n-                                \"displayName\": \"Internal Buffer Size\",\n+                            \"reuse-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, fail the FlowFile regardless of current retry count\",\n+                                        \"displayName\": \"Fail on Reuse\",\n+                                        \"value\": \"fail\"\n+                                    },\n+                                    {\n+                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, log a warning message before resetting the retry attribute and UUID for this instance\",\n+                                        \"displayName\": \"Warn on Reuse\",\n+                                        \"value\": \"warn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, log a debug message before resetting the retry attribute and UUID for this instance\",\n+                                        \"displayName\": \"Reset Reuse\",\n+                                        \"value\": \"reset\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Defines how the Processor behaves if the retry FlowFile has a different retry UUID than the instance that received the FlowFile. This generally means that the attribute was not reset after being successfully retried by a previous instance of this processor.\",\n+                                \"displayName\": \"Reuse Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Internal Buffer Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Move Destination Directory\": {\n-                                \"description\": \"The directory on the remote server to move the original file to once it has been ingested into NiFi. This property is ignored unless the Completion Strategy is set to 'Move File'. The specified directory must already exist on the remote system if 'Create Directory' is disabled, or the rename will fail.\",\n-                                \"displayName\": \"Move Destination Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Move Destination Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"21\",\n-                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"reuse-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Will read the attribute or attribute expression language result as defined in 'Retry Attribute'\",\n+                                \"name\": \"Retry Attribute\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Input FlowFile has exceeded the configured maximum retry count, do not pass this relationship back to the input Processor to terminate the limited feedback loop.\",\n+                                \"name\": \"retries_exceeded\"\n                             },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Input FlowFile has not exceeded the configured maximum retry count, pass this relationship back to the input Processor to create a limited feedback loop.\",\n+                                \"name\": \"retry\"\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The processor is configured such that a non-numerical value on 'Retry Attribute' results in a failure instead of resetting that value to '1'. This will immediately terminate the limited feedback loop. Might also include when 'Maximum Retries' contains attribute expression language that does not resolve to an Integer.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"FlowFile\",\n+                            \"Retry\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.RetryFlowFile\",\n+                        \"typeDescription\": \"FlowFiles passed to this Processor have a 'Retry Attribute' value checked against a configured 'Maximum Retries' value. If the current attribute value is below the configured maximum, the FlowFile is passed to a retry relationship. The FlowFile may or may not be penalized in that condition. If the FlowFile's attribute value exceeds the configured maximum, the FlowFile will be passed to a 'retries_exceeded' relationship. WARNING: If the incoming FlowFile has a non-numeric value in the configured 'Retry Attribute' attribute, it will be reset to '1'. You may choose to fail the FlowFile instead of performing the reset. Additional dynamic properties can be defined for any attributes you wish to add to the FlowFiles transferred to 'retries_exceeded'. These attributes support attribute expression language.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"User defined retry attribute is updated with the current retry count\",\n+                                \"name\": \"Retry Attribute\"\n                             },\n-                            \"Proxy Type\": {\n+                            {\n+                                \"description\": \"User defined retry attribute with .uuid that determines what processor retried the FlowFile last\",\n+                                \"name\": \"Retry Attribute .uuid\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Routes FlowFiles whose attributes match the Attribute Expression Language specified in the Dynamic Property Value to the Relationship specified in the Dynamic Property Key\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Relationship Name\",\n+                                \"value\": \"Attribute Expression Language\"\n+                            }\n+                        ],\n+                        \"dynamicRelationship\": {\n+                            \"description\": \"FlowFiles that match the Dynamic Property's Attribute Expression Language\",\n+                            \"name\": \"Name from Dynamic Property\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Routing Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n+                                        \"description\": \"A copy of the FlowFile will be routed to each relationship whose corresponding expression evaluates to 'true'\",\n+                                        \"displayName\": \"Route to Property name\",\n+                                        \"value\": \"Route to Property name\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"description\": \"Requires that all user-defined expressions evaluate to 'true' for the FlowFile to be considered a match\",\n+                                        \"displayName\": \"Route to 'matched' if all match\",\n+                                        \"value\": \"Route to 'match' if all match\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"description\": \"Requires that at least one user-defined expression evaluate to 'true' for the FlowFile to be considered a match\",\n+                                        \"displayName\": \"Route to 'matched' if any matches\",\n+                                        \"value\": \"Route to 'match' if any matches\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"Route to Property name\",\n+                                \"description\": \"Specifies how to determine which relationship to use when evaluating the Expression Language\",\n+                                \"displayName\": \"Routing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n+                                \"name\": \"Routing Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that do not match any user-define expression will be routed here\",\n+                                \"name\": \"unmatched\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Attribute Expression Language\",\n+                            \"Expression Language\",\n+                            \"Regular Expression\",\n+                            \"attributes\",\n+                            \"detect\",\n+                            \"filter\",\n+                            \"find\",\n+                            \"regex\",\n+                            \"regexp\",\n+                            \"routing\",\n+                            \"search\",\n+                            \"string\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.RouteOnAttribute\",\n+                        \"typeDescription\": \"Routes FlowFiles based on their Attributes using the Attribute Expression Language\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The relation to which the FlowFile was routed\",\n+                                \"name\": \"RouteOnAttribute.Route\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Routes FlowFiles whose content matches the regular expression defined by Dynamic Property's value to the Relationship defined by the Dynamic Property's key\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Relationship Name\",\n+                                \"value\": \"A Regular Expression\"\n+                            }\n+                        ],\n+                        \"dynamicRelationship\": {\n+                            \"description\": \"FlowFiles that match the Dynamic Property's Regular Expression\",\n+                            \"name\": \"Name from Dynamic Property\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the file is encoded\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote File\": {\n-                                \"description\": \"The fully qualified filename on the remote system\",\n-                                \"displayName\": \"Remote File\",\n+                            \"Content Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer in order to apply the regular expressions. If the size of the FlowFile exceeds this value, any amount of this value will be ignored\",\n+                                \"displayName\": \"Content Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote File\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Content Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Mode\": {\n+                            \"Match Requirement\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"displayName\": \"content must match exactly\",\n+                                        \"value\": \"content must match exactly\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n+                                        \"displayName\": \"content must contain match\",\n+                                        \"value\": \"content must contain match\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\n+                                \"defaultValue\": \"content must match exactly\",\n+                                \"description\": \"Specifies whether the entire content of the file must match the regular expression exactly, or if any part of the file (up to Content Buffer Size) can contain the regular expression in order to be considered a match\",\n+                                \"displayName\": \"Match Requirement\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Mode\",\n+                                \"name\": \"Match Requirement\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that do not match any of the user-supplied regular expressions will be routed to this relationship\",\n+                                \"name\": \"unmatched\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"content\",\n+                            \"detect\",\n+                            \"filter\",\n+                            \"find\",\n+                            \"regex\",\n+                            \"regexp\",\n+                            \"regular expression\",\n+                            \"route\",\n+                            \"search\",\n+                            \"string\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.RouteOnContent\",\n+                        \"typeDescription\": \"Applies Regular Expressions to the content of a FlowFile and routes a copy of the FlowFile to each destination whose Regular Expression matches. Regular Expressions are added as User-Defined Properties where the name of the property is the name of the relationship and the value is a Regular Expression to match against the FlowFile content. User-Defined properties do support the Attribute Expression Language, but the results are interpreted as literal values, not Regular Expressions\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Routes data that matches the value specified in the Dynamic Property Value to the Relationship specified in the Dynamic Property Key.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Relationship Name\",\n+                                \"value\": \"value to match against\"\n+                            }\n+                        ],\n+                        \"dynamicRelationship\": {\n+                            \"description\": \"FlowFiles that match the Dynamic Property's value\",\n+                            \"name\": \"Name from Dynamic Property\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the incoming text is encoded\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Grouping Regular Expression\": {\n+                                \"description\": \"Specifies a Regular Expression to evaluate against each line to determine which Group the line should be placed in. The Regular Expression must have at least one Capturing Group that defines the line's Group. If multiple Capturing Groups exist in the Regular Expression, the values from all Capturing Groups will be concatenated together. Two lines will not be placed into the same FlowFile unless they both have the same value for the Group (or neither line matches the Regular Expression). For example, to group together all lines in a CSV File by the first column, we can set this value to \\\"(.*?),.*\\\". Two lines that have the same Group but different Relationships will never be placed into the same FlowFile.\",\n+                                \"displayName\": \"Grouping Regular Expression\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Grouping Regular Expression\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Compression\": {\n+                            \"Ignore Case\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                                \"description\": \"If true, capitalization will not be taken into account when comparing values. E.g., matching against 'HELLO' or 'hello' will have the same result. This property is ignored if the 'Matching Strategy' is set to 'Satisfies Expression'.\",\n+                                \"displayName\": \"Ignore Case\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n+                                \"name\": \"Ignore Case\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                            \"Ignore Leading/Trailing Whitespace\": {\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not the whitespace at the beginning and end of the lines should be ignored when evaluating the line.\",\n+                                \"displayName\": \"Ignore Leading/Trailing Whitespace\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ignore Leading/Trailing Whitespace\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"fetchfiletransfer-notfound-loglevel\": {\n+                            \"Matching Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n+                                        \"description\": \"Match lines based on whether or not the the text satisfies the given Expression Language expression. I.e., the line will match if the property value, evaluated as an Expression, returns true. The expression is able to reference FlowFile Attributes, as well as the variables 'line' (which is the text of the line to evaluate) and 'lineNo' (which is the line number being evaluated. This will be 1 for the first line, 2 for the second and so on).\",\n+                                        \"displayName\": \"Satisfies Expression\",\n+                                        \"value\": \"Satisfies Expression\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n+                                        \"description\": \"Match lines based on whether the line starts with the property value\",\n+                                        \"displayName\": \"Starts With\",\n+                                        \"value\": \"Starts With\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n+                                        \"description\": \"Match lines based on whether the line ends with the property value\",\n+                                        \"displayName\": \"Ends With\",\n+                                        \"value\": \"Ends With\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n+                                        \"description\": \"Match lines based on whether the line contains the property value\",\n+                                        \"displayName\": \"Contains\",\n+                                        \"value\": \"Contains\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n+                                        \"description\": \"Match lines based on whether the line equals the property value\",\n+                                        \"displayName\": \"Equals\",\n+                                        \"value\": \"Equals\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n+                                        \"description\": \"Match lines based on whether the line exactly matches the Regular Expression that is provided as the Property value\",\n+                                        \"displayName\": \"Matches Regular Expression\",\n+                                        \"value\": \"Matches Regular Expression\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Match lines based on whether the line contains some text that matches the Regular Expression that is provided as the Property value\",\n+                                        \"displayName\": \"Contains Regular Expression\",\n+                                        \"value\": \"Contains Regular Expression\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ERROR\",\n-                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n-                                \"displayName\": \"Log level when file not found\",\n+                                \"description\": \"Specifies how to evaluate each line of incoming text against the user-defined properties.\",\n+                                \"displayName\": \"Matching Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n+                                \"name\": \"Matching Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ftp-use-utf8\": {\n+                            \"Routing Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Lines will be routed to each relationship whose corresponding expression evaluates to 'true'\",\n+                                        \"displayName\": \"Route to each matching Property Name\",\n+                                        \"value\": \"Route to each matching Property Name\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Requires that all user-defined expressions evaluate to 'true' for the line to be considered a match\",\n+                                        \"displayName\": \"Route to 'matched' if line matches all conditions\",\n+                                        \"value\": \"Route to 'matched' if line matches all conditions\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Requires that at least one user-defined expression evaluate to 'true' for the line to be considered a match\",\n+                                        \"displayName\": \"Route to 'matched' if lines matches any condition\",\n+                                        \"value\": \"Route to 'matched' if lines matches any condition\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n-                                \"displayName\": \"Use UTF-8 Encoding\",\n+                                \"defaultValue\": \"Route to each matching Property Name\",\n+                                \"description\": \"Specifies how to determine which Relationship(s) to use when evaluating the lines of incoming text against the 'Matching Strategy' and user-defined properties.\",\n+                                \"displayName\": \"Routing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ftp-use-utf8\",\n+                                \"name\": \"Routing Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetFTP\",\n-                            \"org.apache.nifi.processors.standard.GetSFTP\",\n-                            \"org.apache.nifi.processors.standard.PutFTP\",\n-                            \"org.apache.nifi.processors.standard.PutSFTP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to a communications failure will be transferred to this Relationship.\",\n-                                \"name\": \"comms.failure\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile for which we receive a 'Not Found' message from the remote server will be transferred to this Relationship.\",\n-                                \"name\": \"not.found\"\n+                                \"description\": \"The original input file will be routed to this destination when the lines have been successfully routed to 1 or more relationships\",\n+                                \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to insufficient permissions will be transferred to this Relationship.\",\n-                                \"name\": \"permission.denied\"\n+                                \"description\": \"Data that does not satisfy the required user-defined rules will be routed to this Relationship\",\n+                                \"name\": \"unmatched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"files\",\n-                            \"ftp\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"source\"\n+                            \"Expression Language\",\n+                            \"Regular Expression\",\n+                            \"attributes\",\n+                            \"csv\",\n+                            \"delimited\",\n+                            \"detect\",\n+                            \"filter\",\n+                            \"find\",\n+                            \"logs\",\n+                            \"regex\",\n+                            \"regexp\",\n+                            \"routing\",\n+                            \"search\",\n+                            \"string\",\n+                            \"text\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FetchFTP\",\n-                        \"typeDescription\": \"Fetches the content of a file from a remote FTP server and overwrites the contents of an incoming FlowFile with the content of the remote file.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.RouteText\",\n+                        \"typeDescription\": \"Routes textual data based on a set of user-defined rules. Each line in an incoming FlowFile is compared against the values specified by user-defined Properties. The mechanism by which the text is compared to these user-defined properties is defined by the 'Matching Strategy'. The data is then routed according to these rules, routing each line of the text individually.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The hostname or IP address from which the file was pulled\",\n-                                \"name\": \"ftp.remote.host\"\n-                            },\n-                            {\n-                                \"description\": \"The port that was used to communicate with the remote FTP server\",\n-                                \"name\": \"ftp.remote.port\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the remote file that was pulled\",\n-                                \"name\": \"ftp.remote.filename\"\n-                            },\n-                            {\n-                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"If the Remote File contains a directory name, that directory name will be added to the FlowFile using the 'path' attribute\",\n-                                \"name\": \"path\"\n+                                \"description\": \"The name of the relationship to which the FlowFile was routed.\",\n+                                \"name\": \"RouteText.Route\"\n                             },\n                             {\n-                                \"description\": \"The name of the failure relationship applied when routing to any failure relationship\",\n-                                \"name\": \"fetch.failure.reason\"\n+                                \"description\": \"The value captured by all capturing groups in the 'Grouping Regular Expression' property. If this property is not set or contains no capturing groups, this attribute will not be added.\",\n+                                \"name\": \"RouteText.Group\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            },\n-                            {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"write filesystem\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Completion Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Leave the file as-is\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Moves the file to the directory specified by the <Move Destination Directory> property\",\n-                                        \"displayName\": \"Move File\",\n-                                        \"value\": \"Move File\"\n-                                    },\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"sample-record-interval\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Deletes the original file from the file system\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"Delete File\"\n+                                        \"dependentValues\": [\n+                                            \"interval\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"Specifies what to do with the original file on the file system once it has been pulled into NiFi\",\n-                                \"displayName\": \"Completion Strategy\",\n+                                \"description\": \"Specifies the number of records to skip before writing a record to the outgoing FlowFile. This property is only used if Sampling Strategy is set to Interval Sampling. A value of zero (0) will cause no records to be included in theoutgoing FlowFile, a value of one (1) will cause all records to be included, and a value of two (2) will cause half the records to be included, and so on.\",\n+                                \"displayName\": \"Sampling Interval\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Completion Strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"sample-record-interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"File to Fetch\": {\n-                                \"defaultValue\": \"${absolute.path}/${filename}\",\n-                                \"description\": \"The fully-qualified filename of the file to fetch from the file system\",\n-                                \"displayName\": \"File to Fetch\",\n+                            \"sample-record-probability\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"probabilistic\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the probability (as a percent from 0-100) of a record being included in the outgoing FlowFile. This property is only used if Sampling Strategy is set to Probabilistic Sampling. A value of zero (0) will cause no records to be included in theoutgoing FlowFile, and a value of 100 will cause all records to be included in the outgoing FlowFile..\",\n+                                \"displayName\": \"Sampling Probability\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"File to Fetch\",\n+                                \"name\": \"sample-record-probability\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log level when file not found\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n-                                    },\n+                            \"sample-record-random-seed\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"probabilistic\",\n+                                            \"reservoir\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies a particular number to use as the seed for the random number generator (used by probabilistic strategies). Setting this property will ensure the same records are selected even when using probabilistic strategies.\",\n+                                \"displayName\": \"Random Seed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"sample-record-random-seed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sample-record-range\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"dependentValues\": [\n+                                            \"range\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ERROR\",\n-                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n-                                \"displayName\": \"Log level when file not found\",\n+                                \"description\": \"Specifies the range of records to include in the sample, from 1 to the total number of records. An example is '3,6-8,20-' which includes the third record, the sixth, seventh and eighth records, and all records from the twentieth record on. Commas separate intervals that don't overlap, and an interval can be between two numbers (i.e. 6-8) or up to a given number (i.e. -5), or from a number to the number of the last record (i.e. 20-). If this property is unset, all records will be included.\",\n+                                \"displayName\": \"Sampling Range\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log level when file not found\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"sample-record-range\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log level when permission denied\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n-                                    },\n+                            \"sample-record-reservoir\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"dependentValues\": [\n+                                            \"reservoir\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ERROR\",\n-                                \"description\": \"Log level to use in case user pierre does not have sufficient permissions to read the file\",\n-                                \"displayName\": \"Log level when permission denied\",\n+                                \"description\": \"Specifies the number of records to write to the outgoing FlowFile. This property is only used if Sampling Strategy is set to reservoir-based strategies such as Reservoir Sampling.\",\n+                                \"displayName\": \"Reservoir Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log level when permission denied\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"sample-record-reservoir\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Move Conflict Strategy\": {\n+                            \"sample-record-sampling-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The existing destination file should remain intact. The newly ingested file should be moved to the destination directory but be renamed to a random filename\",\n-                                        \"displayName\": \"Rename\",\n-                                        \"value\": \"Rename\"\n+                                        \"description\": \"Selects every Nth record where N is the value of the 'Interval Value' property\",\n+                                        \"displayName\": \"Interval Sampling\",\n+                                        \"value\": \"interval\"\n                                     },\n                                     {\n-                                        \"description\": \"The newly ingested file should replace the existing file in the Destination Directory\",\n-                                        \"displayName\": \"Replace File\",\n-                                        \"value\": \"Replace File\"\n+                                        \"description\": \"Creates a sample of records based on the index (i.e. record number) of the records using the specified range. An example is '3,6-8,20-' which includes the third record, the sixth, seventh and eighth record, and all records from the twentieth record on. Commas separate intervals that don't overlap, and an interval can be between two numbers (i.e. 6-8) or up to a given number (i.e. -5), or from a number to the number of the last record (i.e. 20-).\",\n+                                        \"displayName\": \"Range Sampling\",\n+                                        \"value\": \"range\"\n                                     },\n                                     {\n-                                        \"description\": \"The existing file should in the Destination Directory should stay intact and the newly ingested file should be deleted\",\n-                                        \"displayName\": \"Keep Existing\",\n-                                        \"value\": \"Keep Existing\"\n+                                        \"description\": \"Selects each record with probability P where P is the value of the 'Selection Probability' property\",\n+                                        \"displayName\": \"Probabilistic Sampling\",\n+                                        \"value\": \"probabilistic\"\n                                     },\n                                     {\n-                                        \"description\": \"The existing destination file should remain intact and the incoming FlowFile should be routed to failure\",\n-                                        \"displayName\": \"Fail\",\n-                                        \"value\": \"Fail\"\n+                                        \"description\": \"Creates a sample of K records where each record has equal probability of being included, where K is the value of the 'Reservoir Size' property. Note that if the value is very large it may cause memory issues as the reservoir is kept in-memory.\",\n+                                        \"displayName\": \"Reservoir Sampling\",\n+                                        \"value\": \"reservoir\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Rename\",\n-                                \"description\": \"If Completion Strategy is set to Move File and a file already exists in the destination directory with the same name, this property specifies how that naming conflict should be resolved\",\n-                                \"displayName\": \"Move Conflict Strategy\",\n+                                \"defaultValue\": \"reservoir\",\n+                                \"description\": \"Specifies which method to use for sampling records from the incoming FlowFile\",\n+                                \"displayName\": \"Sampling Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Move Conflict Strategy\",\n+                                \"name\": \"sample-record-sampling-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Move Destination Directory\": {\n-                                \"description\": \"The directory to the move the original file to once it has been fetched from the file system. This property is ignored unless the Completion Strategy is set to \\\"Move File\\\". If the directory does not exist, it will be created.\",\n-                                \"displayName\": \"Move Destination Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Move Destination Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetFile\",\n-                            \"org.apache.nifi.processors.standard.ListFile\",\n-                            \"org.apache.nifi.processors.standard.PutFile\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully fetched from the file system will be transferred to this Relationship.\",\n+                                \"description\": \"The FlowFile is routed to this relationship if the sampling completed successfully\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be fetched from the file system because the file could not be found will be transferred to this Relationship.\",\n-                                \"name\": \"not.found\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the file system due to the user running NiFi not having sufficient permissions will be transferred to this Relationship.\",\n-                                \"name\": \"permission.denied\"\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, any record is not valid), the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be fetched from the file system for any reason other than insufficient permissions or the file not existing will be transferred to this Relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The original FlowFile is routed to this relationship if sampling is successful\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"files\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"ingress\",\n-                            \"input\",\n-                            \"local\",\n-                            \"source\"\n+                            \"interval\",\n+                            \"range\",\n+                            \"record\",\n+                            \"reservoir\",\n+                            \"sample\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FetchFile\",\n-                        \"typeDescription\": \"Reads the contents of a file from disk and streams it into the contents of an incoming FlowFile. Once this is done, the file is optionally moved elsewhere or deleted to help keep the file system organized.\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.SampleRecord\",\n+                        \"typeDescription\": \"Samples the records of a FlowFile based on a specified sampling strategy (such as Reservoir Sampling). The resulting FlowFile may be of a fixed number of records (in the case of reservoir-based algorithms) or some subset of the total number of records (in the case of probabilistic sampling), or a deterministic number of records (in the case of interval sampling).\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The MIME type indicated by the record writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records in the resulting flow file\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Ciphers Allowed\": {\n-                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n-                                \"displayName\": \"Ciphers Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Ciphers Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Completion Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Leave the file as-is\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Move the file to the directory specified by the <Move Destination Directory> property\",\n-                                        \"displayName\": \"Move File\",\n-                                        \"value\": \"Move File\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Deletes the original file from the remote system\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"Delete File\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"Specifies what to do with the original file on the server once it has been pulled into NiFi. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n-                                \"displayName\": \"Completion Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Completion Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Create Directory\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Used when 'Completion Strategy' is 'Move File'. Specifies whether or not the remote directory should be created if it does not exist.\",\n-                                \"displayName\": \"Create Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Disable Directory Listing\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Control how 'Move Destination Directory' is created when 'Completion Strategy' is 'Move File' and 'Create Directory' is enabled. If set to 'true', directory listing is not performed prior to create missing directories. By default, this processor executes a directory listing command to see target directory existence before creating missing directories. However, there are situations that you might need to disable the directory listing such as the following. Directory listing might fail with some permission setups (e.g. chmod 100) on a directory. Also, if any other SFTP client created the directory after this processor performed a listing and before a directory creation request by this processor is finished, then an error is returned because the directory already exists.\",\n-                                \"displayName\": \"Disable Directory Listing\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Disable Directory Listing\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Host Key File\": {\n-                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n-                                \"displayName\": \"Host Key File\",\n+                            \"Attribute Pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"Regular Expression that specifies the names of attributes whose values will be matched against the terms in the dictionary\",\n+                                \"displayName\": \"Attribute Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Host Key File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully-qualified hostname or IP address of the host to fetch the data from\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"Attribute Pattern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Key Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n-                                \"displayName\": \"Key Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Key Exchange Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n-                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Exchange Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message Authentication Codes Allowed\": {\n-                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n-                                \"displayName\": \"Message Authentication Codes Allowed\",\n+                            \"Dictionary File\": {\n+                                \"description\": \"A new-line-delimited text file that includes the terms that should trigger a match. Empty lines are ignored.  The contents of the text file are loaded into memory when the processor is scheduled and reloaded when the contents are modified.\",\n+                                \"displayName\": \"Dictionary File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Message Authentication Codes Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Move Destination Directory\": {\n-                                \"description\": \"The directory on the remote server to move the original file to once it has been ingested into NiFi. This property is ignored unless the Completion Strategy is set to 'Move File'. The specified directory must already exist on the remote system if 'Create Directory' is disabled, or the rename will fail.\",\n-                                \"displayName\": \"Move Destination Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Move Destination Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"22\",\n-                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"Dictionary File\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Private Key Passphrase\": {\n-                                \"description\": \"Password for the private key\",\n-                                \"displayName\": \"Private Key Passphrase\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Passphrase\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Private Key Path\": {\n-                                \"description\": \"The fully qualified path to the Private Key file\",\n-                                \"displayName\": \"Private Key Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Path\",\n-                                \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                            \"Dictionary Filter Pattern\": {\n+                                \"description\": \"A Regular Expression that will be applied to each line in the dictionary file. If the regular expression does not match the line, the line will not be included in the list of terms to search for. If a Matching Group is specified, only the portion of the term that matches that Matching Group will be used instead of the entire term. If not specified, all terms in the dictionary will be used and each term will consist of the text of the entire line in the file\",\n+                                \"displayName\": \"Dictionary Filter Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n+                                \"name\": \"Dictionary Filter Pattern\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote File\": {\n-                                \"description\": \"The fully qualified filename on the remote system\",\n-                                \"displayName\": \"Remote File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote File\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Send Keep Alive On Timeout\": {\n+                            \"Match Criteria\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"At Least 1 Must Match\",\n+                                        \"value\": \"At Least 1 Must Match\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"All Must Match\",\n+                                        \"value\": \"All Must Match\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n-                                \"displayName\": \"Send Keep Alive On Timeout\",\n+                                \"defaultValue\": \"At Least 1 Must Match\",\n+                                \"description\": \"If set to All Must Match, then FlowFiles will be routed to 'matched' only if all specified attributes' values are found in the dictionary. If set to At Least 1 Must Match, FlowFiles will be routed to 'matched' if any attribute specified is found in the dictionary\",\n+                                \"displayName\": \"Match Criteria\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Keep Alive On Timeout\",\n+                                \"name\": \"Match Criteria\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles whose attributes are not found in the dictionary will be routed to this relationship\",\n+                                \"name\": \"unmatched\"\n                             },\n-                            \"Strict Host Key Checking\": {\n+                            {\n+                                \"description\": \"FlowFiles whose attributes are found in the dictionary will be routed to this relationship\",\n+                                \"name\": \"matched\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"attributes\",\n+                            \"find\",\n+                            \"lookup\",\n+                            \"scan\",\n+                            \"search\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ScanAttribute\",\n+                        \"typeDescription\": \"Scans the specified attributes of FlowFiles, checking to see if any of their values are present within the specified dictionary of terms\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Dictionary Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"binary\",\n+                                        \"value\": \"binary\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\n+                                \"defaultValue\": \"text\",\n+                                \"description\": \"Indicates how the dictionary is encoded. If 'text', dictionary terms are new-line delimited and UTF-8 encoded; if 'binary', dictionary terms are denoted by a 4-byte integer indicating the term length followed by the term itself\",\n+                                \"displayName\": \"Dictionary Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Strict Host Key Checking\",\n+                                \"name\": \"Dictionary Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Compression\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                            \"Dictionary File\": {\n+                                \"description\": \"The filename of the terms dictionary\",\n+                                \"displayName\": \"Dictionary File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"Dictionary File\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that do not match any term in the dictionary are routed to this relationship\",\n+                                \"name\": \"unmatched\"\n                             },\n-                            \"fetchfiletransfer-notfound-loglevel\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ERROR\",\n-                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n-                                \"displayName\": \"Log level when file not found\",\n+                            {\n+                                \"description\": \"FlowFiles that match at least one term in the dictionary are routed to this relationship\",\n+                                \"name\": \"matched\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"aho-corasick\",\n+                            \"byte sequence\",\n+                            \"content\",\n+                            \"dictionary\",\n+                            \"find\",\n+                            \"scan\",\n+                            \"search\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ScanContent\",\n+                        \"typeDescription\": \"Scans the content of FlowFiles for terms that are found in a user-supplied dictionary. If a term is matched, the UTF-8 encoded version of the term will be added to the FlowFile using the 'matching.term' attribute\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The term that caused the Processor to route the FlowFile to the 'matched' relationship; if FlowFile is routed to the 'unmatched' relationship, this attribute is not added\",\n+                                \"name\": \"matching.term\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Segment Size\": {\n+                                \"description\": \"The maximum data size in bytes for each segment\",\n+                                \"displayName\": \"Segment Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Segment Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetFTP\",\n-                            \"org.apache.nifi.processors.standard.GetSFTP\",\n-                            \"org.apache.nifi.processors.standard.PutFTP\",\n-                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                            \"org.apache.nifi.processors.standard.MergeContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to a communications failure will be transferred to this Relationship.\",\n-                                \"name\": \"comms.failure\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile for which we receive a 'Not Found' message from the remote server will be transferred to this Relationship.\",\n-                                \"name\": \"not.found\"\n+                                \"description\": \"All segments will be sent to this relationship. If the file was small enough that it was not segmented, a copy of the original is sent to this relationship as well as original\",\n+                                \"name\": \"segments\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to insufficient permissions will be transferred to this Relationship.\",\n-                                \"name\": \"permission.denied\"\n+                                \"description\": \"The original FlowFile will be sent to this relationship\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"files\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"sftp\",\n-                            \"source\"\n+                            \"segment\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FetchSFTP\",\n-                        \"typeDescription\": \"Fetches the content of a file from a remote SFTP server and overwrites the contents of an incoming FlowFile with the content of the remote file.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.SegmentContent\",\n+                        \"typeDescription\": \"Segments a FlowFile into multiple smaller segments on byte boundaries. Each segment is given the following attributes: fragment.identifier, fragment.index, fragment.count, segment.original.filename; these attributes can then be used by the MergeContent processor in order to reconstitute the original FlowFile\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The hostname or IP address from which the file was pulled\",\n-                                \"name\": \"sftp.remote.host\"\n+                                \"description\": \"All segments produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute. This attribute is added to maintain backward compatibility, but the fragment.identifier is preferred, as it is designed to work in conjunction with the MergeContent Processor\",\n+                                \"name\": \"segment.identifier\"\n                             },\n                             {\n-                                \"description\": \"The port that was used to communicate with the remote SFTP server\",\n-                                \"name\": \"sftp.remote.port\"\n+                                \"description\": \"A one-up number that indicates the ordering of the segments that were created from a single parent FlowFile. This attribute is added to maintain backward compatibility, but the fragment.index is preferred, as it is designed to work in conjunction with the MergeContent Processor\",\n+                                \"name\": \"segment.index\"\n                             },\n                             {\n-                                \"description\": \"The name of the remote file that was pulled\",\n-                                \"name\": \"sftp.remote.filename\"\n+                                \"description\": \"The number of segments generated from the parent FlowFile. This attribute is added to maintain backward compatibility, but the fragment.count is preferred, as it is designed to work in conjunction with the MergeContent Processor\",\n+                                \"name\": \"segment.count\"\n                             },\n                             {\n-                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"All segments produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"If the Remote File contains a directory name, that directory name will be added to the FlowFile using the 'path' attribute\",\n-                                \"name\": \"path\"\n+                                \"description\": \"A one-up number that indicates the ordering of the segments that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"The name of the failure relationship applied when routing to any failure relationship\",\n-                                \"name\": \"fetch.failure.reason\"\n+                                \"description\": \"The number of segments generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            },\n+                            {\n+                                \"description\": \"The filename will be updated to include the parent's filename, the segment index, and the segment count\",\n+                                \"name\": \"segment.original.filename \"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attribute Matching Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Provides a set of attribute keys to filter for, separated by a comma delimiter ','.\",\n-                                        \"displayName\": \"Enumerate attributes\",\n-                                        \"value\": \"Enumerate attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides a regular expression to match keys of attributes to filter for.\",\n-                                        \"displayName\": \"Use regular expression\",\n-                                        \"value\": \"Use regular expression\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Enumerate attributes\",\n-                                \"description\": \"Specifies the strategy to filter attributes by.\",\n-                                \"displayName\": \"Attribute Matching Strategy\",\n+                            \"Byte Sequence\": {\n+                                \"description\": \"A representation of bytes to look for and upon which to split the source file into separate files\",\n+                                \"displayName\": \"Byte Sequence\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attribute Matching Strategy\",\n+                                \"name\": \"Byte Sequence\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Filter Mode\": {\n+                            \"Byte Sequence Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Retains only the attributes matching the filter, all other attributes are removed.\",\n-                                        \"displayName\": \"Retain\",\n-                                        \"value\": \"Retain\"\n+                                        \"description\": \"The Byte Sequence will be interpreted as a hexadecimal representation of bytes\",\n+                                        \"displayName\": \"Hexadecimal\",\n+                                        \"value\": \"Hexadecimal\"\n                                     },\n                                     {\n-                                        \"description\": \"Removes the attributes matching the filter, all other attributes are retained.\",\n-                                        \"displayName\": \"Remove\",\n-                                        \"value\": \"Remove\"\n+                                        \"description\": \"The Byte Sequence will be interpreted as UTF-8 Encoded text\",\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Retain\",\n-                                \"description\": \"Specifies the strategy to apply on filtered attributes. Either 'Remove' or 'Retain' only the matching attributes.\",\n-                                \"displayName\": \"Filter Mode\",\n+                                \"defaultValue\": \"Hexadecimal\",\n+                                \"description\": \"Specifies how the <Byte Sequence> property should be interpreted\",\n+                                \"displayName\": \"Byte Sequence Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Filter Mode\",\n+                                \"name\": \"Byte Sequence Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Filtered Attributes\": {\n-                                \"dependencies\": [\n+                            \"Byte Sequence Location\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Enumerate attributes\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Attribute Matching Strategy\",\n-                                        \"propertyName\": \"Attribute Matching Strategy\"\n+                                        \"description\": \"Keep the Byte Sequence at the end of the first split if <Keep Byte Sequence> is true\",\n+                                        \"displayName\": \"Trailing\",\n+                                        \"value\": \"Trailing\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Keep the Byte Sequence at the beginning of the second split if <Keep Byte Sequence> is true\",\n+                                        \"displayName\": \"Leading\",\n+                                        \"value\": \"Leading\"\n                                     }\n                                 ],\n-                                \"description\": \"A set of attribute names to filter from FlowFiles. Each attribute name is separated by the comma delimiter ','.\",\n-                                \"displayName\": \"Filtered Attributes\",\n+                                \"defaultValue\": \"Trailing\",\n+                                \"description\": \"If <Keep Byte Sequence> is set to true, specifies whether the byte sequence should be added to the end of the first split or the beginning of the second; if <Keep Byte Sequence> is false, this property is ignored.\",\n+                                \"displayName\": \"Byte Sequence Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Filtered Attributes\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Byte Sequence Location\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Filtered Attributes Pattern\": {\n-                                \"dependencies\": [\n+                            \"Keep Byte Sequence\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Use regular expression\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Attribute Matching Strategy\",\n-                                        \"propertyName\": \"Attribute Matching Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"A regular expression to match names of attributes to filter from FlowFiles.\",\n-                                \"displayName\": \"Filtered Attributes Pattern\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Determines whether or not the Byte Sequence should be included with each Split\",\n+                                \"displayName\": \"Keep Byte Sequence\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Filtered Attributes Pattern\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Keep Byte Sequence\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.MergeContent\"\n+                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All successful FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"All Splits will be routed to the splits relationship\",\n+                                \"name\": \"splits\"\n+                            },\n+                            {\n+                                \"description\": \"The original file\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The FlowFile with its attributes is stored in memory, not the content of the FlowFile. If many splits are generated due to the size of the content, or how the content is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"attributes\",\n-                            \"delete\",\n-                            \"filter\",\n-                            \"modification\",\n-                            \"regex\",\n-                            \"regular expression\",\n-                            \"remove\",\n-                            \"retain\"\n+                            \"binary\",\n+                            \"content\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FilterAttribute\",\n-                        \"typeDescription\": \"Filters the attributes of a FlowFile by retaining specified attributes and removing the rest or by removing specified attributes and retaining the rest.\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.SplitContent\",\n+                        \"typeDescription\": \"Splits incoming FlowFiles by a specified byte sequence\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n@@ -103043,1007 +103271,1201 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"flatten-json-character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which file is encoded\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"flatten-json-character-set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"flatten-json-pretty-print-json\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not resulted json should be pretty printed\",\n-                                \"displayName\": \"Pretty Print JSON\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"flatten-json-pretty-print-json\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"flatten-json-return-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flatten\",\n-                                        \"value\": \"flatten\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"unflatten\",\n-                                        \"value\": \"unflatten\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flatten\",\n-                                \"description\": \"Specifies the desired return type of json such as flatten/unflatten\",\n-                                \"displayName\": \"Return Type\",\n+                            \"JsonPath Expression\": {\n+                                \"description\": \"A JsonPath expression that indicates the array element to split into JSON/scalar fragments.\",\n+                                \"displayName\": \"JsonPath Expression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"flatten-json-return-type\",\n+                                \"name\": \"JsonPath Expression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"flatten-json-separator\": {\n-                                \"defaultValue\": \".\",\n-                                \"description\": \"The separator character used for joining keys. Must be a JSON-legal character.\",\n-                                \"displayName\": \"Separator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"flatten-json-separator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"flatten-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flattens every objects into a single level json\",\n-                                        \"displayName\": \"normal\",\n-                                        \"value\": \"normal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flattens every objects and keep arrays format\",\n-                                        \"displayName\": \"keep arrays\",\n-                                        \"value\": \"keep arrays\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Conforms to MongoDB dot notation to update also nested documents\",\n-                                        \"displayName\": \"dot notation\",\n-                                        \"value\": \"dot notation\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flattens every objects except arrays which contain only primitive types (strings, numbers, booleans and null)\",\n-                                        \"displayName\": \"keep primitive arrays\",\n-                                        \"value\": \"keep primitive arrays\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"keep arrays\",\n-                                \"description\": \"Specifies how json should be flattened/unflattened\",\n-                                \"displayName\": \"Flatten Mode\",\n+                            \"Max String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n+                                \"displayName\": \"Max String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"flatten-mode\",\n+                                \"name\": \"Max String Length\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ignore-reserved-characters\": {\n+                            \"Null Value Representation\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"empty string\",\n+                                        \"value\": \"empty string\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"the string 'null'\",\n+                                        \"value\": \"the string 'null'\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, reserved characters in keys will be ignored\",\n-                                \"displayName\": \"Ignore Reserved Characters\",\n+                                \"defaultValue\": \"empty string\",\n+                                \"description\": \"Indicates the desired representation of JSON Path expressions resulting in a null value.\",\n+                                \"displayName\": \"Null Value Representation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ignore-reserved-characters\",\n+                                \"name\": \"Null Value Representation\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully flattened/unflattened files go to this relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON or the specified path does not exist), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Files that cannot be flattened/unflattened go to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"All segments of the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"split\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The entirety of the FlowFile's content (as a JsonNode object) is read into memory, in addition to all of the generated FlowFiles representing the split JSON. If many splits are generated due to the size of the JSON, or how the JSON is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"flatten\",\n                             \"json\",\n-                            \"unflatten\"\n+                            \"jsonpath\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FlattenJson\",\n-                        \"typeDescription\": \"Provides the user with the ability to take a nested JSON document and flatten it into a simple key/value pair document. The keys are combined at each level with a user-defined separator that defaults to '.'. This Processor also allows to unflatten back the flattened json. It supports four kinds of flatten mode such as normal, keep-arrays, dot notation for MongoDB query and keep-primitive-arrays. Default flatten mode is 'keep-arrays'.\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.SplitJson\",\n+                        \"typeDescription\": \"Splits a JSON File into multiple, separate FlowFiles for an array element specified by a JsonPath expression. Each generated FlowFile is comprised of an element of the specified array and transferred to relationship 'split,' with the original file transferred to the 'original' relationship. If the specified JsonPath is not found or does not evaluate to an array element, the original file is routed to 'failure' and no files are generated.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.JoinEnrichment\"\n-                        ],\n+                        \"propertyDescriptors\": {\n+                            \"Record Reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Record Writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Records Per Split\": {\n+                                \"description\": \"Specifies how many records should be written to each 'split' or 'segment' FlowFile\",\n+                                \"displayName\": \"Records Per Split\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Records Per Split\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A clone of the incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n-                                \"name\": \"enrichment\"\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n+                                \"description\": \"The individual 'segments' of the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"splits\"\n+                            },\n+                            {\n+                                \"description\": \"Upon successfully splitting an input FlowFile, the original FlowFile will be sent to this relationship.\",\n                                 \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"enrich\",\n-                            \"fork\",\n-                            \"join\",\n-                            \"record\"\n+                            \"avro\",\n+                            \"csv\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"log\",\n+                            \"logs\",\n+                            \"schema\",\n+                            \"split\",\n+                            \"text\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ForkEnrichment\",\n-                        \"typeDescription\": \"Used in conjunction with the JoinEnrichment processor, this processor is responsible for adding the attributes that are necessary for the JoinEnrichment processor to perform its function. Each incoming FlowFile will be cloned. The original FlowFile will have appropriate attributes added and then be transferred to the 'original' relationship. The clone will have appropriate attributes added and then be routed to the 'enrichment' relationship. See the documentation for the JoinEnrichment processor (and especially its Additional Details) for more information on how these Processors work together and how to perform enrichment tasks in NiFi by using these Processors.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.SplitRecord\",\n+                        \"typeDescription\": \"Splits up an input FlowFile that is in a record-oriented data format into multiple smaller FlowFiles\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The Group ID to use in order to correlate the 'original' FlowFile with the 'enrichment' FlowFile.\",\n-                                \"name\": \"enrichment.group.id\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer for the FlowFiles routed to the 'splits' Relationship.\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The role to use for enrichment. This will either be ORIGINAL or ENRICHMENT.\",\n-                                \"name\": \"enrichment.role\"\n+                                \"description\": \"The number of records in the FlowFile. This is added to FlowFiles that are routed to the 'splits' Relationship.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"A Record Path value, pointing to a field of type ARRAY containing RECORD objects\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Record Path property\",\n-                                \"value\": \"The Record Path value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"fork-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Generated records will be the elements of the array\",\n-                                        \"displayName\": \"Extract\",\n-                                        \"value\": \"extract\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generated records will preserve the input schema and will contain a one-element array\",\n-                                        \"displayName\": \"Split\",\n-                                        \"value\": \"split\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"split\",\n-                                \"description\": \"Specifies the forking mode of the processor\",\n-                                \"displayName\": \"Mode\",\n+                            \"Header Line Count\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of lines that should be considered part of the header; the header lines will be duplicated to all split files\",\n+                                \"displayName\": \"Header Line Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fork-mode\",\n+                                \"name\": \"Header Line Count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include-parent-fields\": {\n+                            \"Header Line Marker Characters\": {\n+                                \"description\": \"The first character(s) on the line of the datafile which signifies a header line. This value is ignored when Header Line Count is non-zero. The first line not containing the Header Line Marker Characters and all subsequent lines are considered non-header\",\n+                                \"displayName\": \"Header Line Marker Characters\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Header Line Marker Characters\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Line Split Count\": {\n+                                \"description\": \"The number of lines that will be added to each split file, excluding header lines. A value of zero requires Maximum Fragment Size to be set, and line count will not be considered in determining splits.\",\n+                                \"displayName\": \"Line Split Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Line Split Count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Fragment Size\": {\n+                                \"description\": \"The maximum size of each split file, including header lines. NOTE: in the case where a single line exceeds this property (including headers, if applicable), that line will be output in a split of its own which exceeds this Maximum Fragment Size setting.\",\n+                                \"displayName\": \"Maximum Fragment Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Fragment Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remove Trailing Newlines\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"This parameter is only valid with the 'extract' mode. If set to true, all the fields from the root level to the given array will be added as fields of each element of the array to fork.\",\n-                                \"displayName\": \"Include Parent Fields\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to remove newlines at the end of each split file. This should be false if you intend to merge the split files later. If this is set to 'true' and a FlowFile is generated that contains only 'empty lines' (i.e., consists only of \\\\r and \\\\n characters), the FlowFile will not be emitted. Note, however, that if header lines are specified, the resultant FlowFile will never be empty as it will consist of the header lines, so a FlowFile may be emitted that contains only the header lines.\",\n+                                \"displayName\": \"Remove Trailing Newlines\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-parent-fields\",\n+                                \"name\": \"Remove Trailing Newlines\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.MergeContent\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If a file cannot be split for some reason, the original file will be routed to this destination and nothing will be routed elsewhere\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                            {\n+                                \"description\": \"The original input file will be routed to this destination when it has been successfully split into 1 or more files\",\n+                                \"name\": \"original\"\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            {\n+                                \"description\": \"The split files will be routed to this destination when an input file is successfully split into 1 or more split files\",\n+                                \"name\": \"splits\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The FlowFile with its attributes is stored in memory, not the content of the FlowFile. If many splits are generated due to the size of the content, or how the content is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"split\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.SplitText\",\n+                        \"typeDescription\": \"Splits a text file into multiple smaller text files on line boundaries limited by maximum number of lines or total size of fragment. Each output split file will contain no more than the configured number of lines or bytes. If both Line Split Count and Maximum Fragment Size are specified, the split occurs at whichever limit is reached first. If the first line of a fragment exceeds the Maximum Fragment Size, that line will be output in a single split file which exceeds the configured maximum size limit. This component also allows one to specify that each split should include a header lines. Header lines can be computed by either specifying the amount of lines that should constitute a header or by using header marker to match against the read lines. If such match happens then the corresponding line will be treated as header. Keep in mind that upon the first failure of header marker match, no more matches will be performed and the rest of the data will be parsed as regular lines for a given split. If after computation of the header there are no more data, the resulting split will consists of only header lines.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of lines of text from the original FlowFile that were copied to this FlowFile\",\n+                                \"name\": \"text.line.count\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes from the original FlowFile that were copied to this FlowFile, including header, if applicable, which is duplicated in each split FlowFile\",\n+                                \"name\": \"fragment.size\"\n+                            },\n+                            {\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Split Depth\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Indicates the XML-nesting depth to start splitting XML fragments. A depth of 1 means split the root's children, whereas a depth of 2 means split the root's children's children and so forth.\",\n+                                \"displayName\": \"Split Depth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"Split Depth\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"In case a FlowFile generates an error during the fork operation, it will be routed to this relationship\",\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid XML), it will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFiles will be routed to this relationship\",\n+                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n                                 \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"The FlowFiles containing the forked records will be routed to this relationship\",\n-                                \"name\": \"fork\"\n+                                \"description\": \"All segments of the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"split\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The entirety of the FlowFile's content (as a Document object) is read into memory, in addition to all of the generated FlowFiles representing the split XML. A Document object can take approximately 10 times as much memory as the size of the XML. For example, a 1 MB XML document may use 10 MB of memory. If many splits are generated due to the size of the XML, a two-phase approach may be necessary to avoid excessive use of memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"array\",\n-                            \"content\",\n-                            \"event\",\n-                            \"fork\",\n-                            \"record\",\n-                            \"stream\"\n+                            \"split\",\n+                            \"xml\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ForkRecord\",\n-                        \"typeDescription\": \"This processor allows the user to fork a record into multiple records. The user must specify at least one Record Path, as a dynamic property, pointing to a field of type ARRAY containing RECORD objects. The processor accepts two modes: 'split' and 'extract'. In both modes, there is one record generated per element contained in the designated array. In the 'split' mode, each generated record will preserve the same schema as given in the input but the array will contain only one element. In the 'extract' mode, the element of the array must be of record type and will be the generated record. Additionally, in the 'extract' mode, it is possible to specify if each generated record should contain all the fields of the parent records from the root level to the extracted record. This assumes that the fields to add in the record are defined in the schema of the Record Writer controller service. See examples in the additional details documentation of this processor.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.SplitXml\",\n+                        \"typeDescription\": \"Splits an XML File into multiple separate FlowFiles, each comprising a child or descendant of the original root element\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The generated FlowFile will have a 'record.count' attribute indicating the number of records that were written to the FlowFile.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"The MIME Type indicated by the Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"Any Attribute that the configured Record Writer returns will be added to the FlowFile.\",\n-                                \"name\": \"<Attributes from Record Writer>\"\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"30 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Specifies an attribute on generated FlowFiles defined by the Dynamic Property's key and value. If Expression Language is used, evaluation will be performed only once per batch of generated FlowFiles.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Generated FlowFile attribute name\",\n-                                \"value\": \"Generated FlowFile attribute value\"\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of FlowFiles to be transferred in each invocation\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"File Location\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"State is stored locally. Each node in a cluster will tail a different file.\",\n+                                        \"displayName\": \"Local\",\n+                                        \"value\": \"Local\"\n+                                    },\n+                                    {\n+                                        \"description\": \"State is located on a remote resource. This Processor will store state across the cluster so that it can be run on Primary Node Only and a new Primary Node can pick up where the last one left off.\",\n+                                        \"displayName\": \"Remote\",\n+                                        \"value\": \"Remote\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Local\",\n+                                \"description\": \"Specifies where the state is located either local or cluster so that state can be stored appropriately in order to ensure that all data is consumed without duplicating data upon restart of NiFi\",\n+                                \"displayName\": \"State Location\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"name\": \"File Location\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Format\": {\n+                            \"File to Tail\": {\n+                                \"description\": \"Path of the file to tail in case of single file mode. If using multifile mode, regular expression to find files to tail in the base directory. In case recursivity is set to true, the regular expression will be used to match the path starting from the base directory (see additional details for examples).\",\n+                                \"displayName\": \"File(s) to Tail\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"File to Tail\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Initial Start Position\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"description\": \"Start with the oldest data that matches the Rolling Filename Pattern and then begin reading from the File to Tail\",\n+                                        \"displayName\": \"Beginning of Time\",\n+                                        \"value\": \"Beginning of Time\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n+                                        \"description\": \"Start with the beginning of the File to Tail. Do not ingest any data that has already been rolled over\",\n+                                        \"displayName\": \"Beginning of File\",\n+                                        \"value\": \"Beginning of File\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Start with the data at the end of the File to Tail. Do not ingest any data thas has already been rolled over or any data in the File to Tail that has already been written.\",\n+                                        \"displayName\": \"Current Time\",\n+                                        \"value\": \"Current Time\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Text\",\n-                                \"description\": \"Specifies whether the data should be Text or Binary\",\n-                                \"displayName\": \"Data Format\",\n+                                \"defaultValue\": \"Beginning of File\",\n+                                \"description\": \"When the Processor first begins to tail data, this property specifies where the Processor should begin reading data. Once data has been ingested from a file, the Processor will continue from the last point from which it has received data.\",\n+                                \"displayName\": \"Initial Start Position\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Format\",\n+                                \"name\": \"Initial Start Position\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"File Size\": {\n-                                \"defaultValue\": \"0B\",\n-                                \"description\": \"The size of the file that will be used\",\n-                                \"displayName\": \"File Size\",\n+                            \"Line Start Pattern\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Single file\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Tailing mode\",\n+                                        \"propertyName\": \"tail-mode\"\n+                                    }\n+                                ],\n+                                \"description\": \"A Regular Expression to match against the start of a log line. If specified, any line that matches the expression, and any following lines, will be buffered until another line matches the Expression. In doing this, we can avoid splitting apart multi-line messages in the file. This assumes that the data is in UTF-8 format.\",\n+                                \"displayName\": \"Line Start Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Size\",\n+                                \"name\": \"Line Start Pattern\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Buffer Size\": {\n+                                \"defaultValue\": \"64 KB\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Line Start Pattern\",\n+                                        \"propertyName\": \"Line Start Pattern\"\n+                                    }\n+                                ],\n+                                \"description\": \"When using the Line Start Pattern, there may be situations in which the data in the file being tailed never matches the Regular Expression. This would result in the processor buffering all data from the tailed file, which can quickly exhaust the heap. To avoid this, the Processor will buffer only up to this amount of data before flushing the buffer, even if it means ingesting partial data from the file.\",\n+                                \"displayName\": \"Max Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Unique FlowFiles\": {\n+                            \"Post-Rollover Tail Period\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"When a file is rolled over, the processor will continue tailing the rolled over file until it has not been modified for this amount of time. This allows for another process to rollover a file, and then flush out any buffered data. Note that when this value is set, and the tailed file rolls over, the new file will not be tailed until the old file has not been modified for the configured amount of time. Additionally, when using this capability, in order to avoid data duplication, this period must be set longer than the Processor's Run Schedule, and the Processor must not be stopped after the file being tailed has been rolled over and before the data has been fully consumed. Otherwise, the data may be duplicated, as the entire file may be written out as the contents of a single FlowFile.\",\n+                                \"displayName\": \"Post-Rollover Tail Period\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Post-Rollover Tail Period\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Rolling Filename Pattern\": {\n+                                \"description\": \"If the file to tail \\\"rolls over\\\" as would be the case with log files, this filename pattern will be used to identify files that have rolled over so that if NiFi is restarted, and the file has rolled over, it will be able to pick up where it left off. This pattern supports wildcard characters * and ?, it also supports the notation ${filename} to specify a pattern based on the name of the file (without extension), and will assume that the files that have rolled over live in the same directory as the file being tailed. The same glob pattern will be used for all files.\",\n+                                \"displayName\": \"Rolling Filename Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Rolling Filename Pattern\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"pre-allocated-buffer-size\": {\n+                                \"defaultValue\": \"65536 B\",\n+                                \"description\": \"Sets the amount of memory that is pre-allocated for each tailed file.\",\n+                                \"displayName\": \"Pre-Allocated Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"pre-allocated-buffer-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"reread-on-nul\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, each FlowFile that is generated will be unique. If false, a random value will be generated and all FlowFiles will get the same content but this offers much higher throughput\",\n-                                \"displayName\": \"Unique FlowFiles\",\n+                                \"description\": \"If this option is set to 'true', when a NUL character is read, the processor will yield and try to read the same part again later. (Note: Yielding may delay the processing of other files tailed by this processor, not just the one with the NUL character.) The purpose of this flag is to allow users to handle cases where reading a file may return temporary NUL values. NFS for example may send file contents out of order. In this case the missing parts are temporarily replaced by NUL values. CAUTION! If the file contains legitimate NUL values, setting this flag causes this processor to get stuck indefinitely. For this reason users should refrain from using this feature if they can help it and try to avoid having the target file on a file system where reads are unreliable.\",\n+                                \"displayName\": \"Reread when NUL encountered\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Unique FlowFiles\",\n-                                \"required\": true,\n+                                \"name\": \"reread-on-nul\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set to use when writing the bytes of Custom Text to a flow file.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"tail-base-directory\": {\n+                                \"description\": \"Base directory used to look for files to tail. This property is required when using Multifile mode.\",\n+                                \"displayName\": \"Base directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"tail-base-directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"tail-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"In this mode, only the one file indicated in the 'Files to tail' property will be watched by the processor. In this mode, the file may not exist when starting the processor.\",\n+                                        \"displayName\": \"Single file\",\n+                                        \"value\": \"Single file\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In this mode, the 'Files to tail' property accepts a regular expression and the processor will look for files in 'Base directory' to list the files to tail by the processor.\",\n+                                        \"displayName\": \"Multiple files\",\n+                                        \"value\": \"Multiple files\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Single file\",\n+                                \"description\": \"Mode to use: single file will tail only one file, multiple file will look for a list of file. In Multiple mode the Base directory is required.\",\n+                                \"displayName\": \"Tailing mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"character-set\",\n+                                \"name\": \"tail-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"generate-ff-custom-text\": {\n-                                \"description\": \"If Data Format is text and if Unique FlowFiles is false, then this custom text will be used as content of the generated FlowFiles and the File Size will be ignored. Finally, if Expression Language is used, evaluation will be performed only once per batch of generated FlowFiles\",\n-                                \"displayName\": \"Custom Text\",\n+                            \"tailfile-lookup-frequency\": {\n+                                \"defaultValue\": \"10 minutes\",\n+                                \"description\": \"Only used in Multiple files mode. It specifies the minimum duration the processor will wait before listing again the files to tail.\",\n+                                \"displayName\": \"Lookup frequency\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"generate-ff-custom-text\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"tailfile-lookup-frequency\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mime-type\": {\n-                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute.\",\n-                                \"displayName\": \"Mime Type\",\n+                            \"tailfile-maximum-age\": {\n+                                \"defaultValue\": \"24 hours\",\n+                                \"description\": \"Only used in Multiple files mode. It specifies the necessary minimum duration to consider that no new messages will be appended in a file regarding its last modification date. This should not be set too low to avoid duplication of data in case new messages are appended at a lower frequency.\",\n+                                \"displayName\": \"Maximum age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mime-type\",\n+                                \"name\": \"tailfile-maximum-age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"tailfile-recursive-lookup\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"When using Multiple files mode, this property defines if files must be listed recursively or not in the base directory.\",\n+                                \"displayName\": \"Recursive lookup\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"tailfile-recursive-lookup\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Stores state about where in the Tailed File it left off so that on restart it does not have to duplicate data. State is stored either local or clustered depend on the <File Location> property.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"\",\n+                                \"description\": \"All FlowFiles are routed to this Relationship.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"generate\",\n-                            \"load\",\n-                            \"random\",\n-                            \"test\"\n+                            \"file\",\n+                            \"log\",\n+                            \"source\",\n+                            \"tail\",\n+                            \"text\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GenerateFlowFile\",\n-                        \"typeDescription\": \"This processor creates FlowFiles with random data or custom content. GenerateFlowFile is useful for load testing, configuration, and simulation. Also see DuplicateFlowFile for additional load testing.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.TailFile\",\n+                        \"typeDescription\": \"\\\"Tails\\\" a file, or a list of files, ingesting data from the file as it is written to the file. The file is expected to be textual. Data is ingested only when a new line is encountered (carriage return or new-line character or combination). If the file to tail is periodically \\\"rolled over\\\", as is generally the case with log files, an optional Rolling Filename Pattern can be used to retrieve data from files that have rolled over, even if the rollover occurred while NiFi was not running (provided that the data still exists upon restart of NiFi). It is generally advisable to set the Run Schedule to a few seconds, rather than running with the default value of 0 secs, as this Processor will consume a lot of resources if scheduled very aggressively. At this time, this Processor does not support ingesting files that have been compressed when 'rolled over'.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the MIME type of the output if the 'Mime Type' property is set\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"Path of the original file the flow file comes from.\",\n+                                \"name\": \"tailfile.original.path\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Custom properties define the generated record schema using configured field names and value data types in absence of the Schema Text property\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Field name in generated record\",\n-                                \"value\": \"Faker category for generated record values\"\n+                                \"description\": \"These XSLT parameters are passed to the transformer\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"An XSLT transform parameter name\",\n+                                \"value\": \"An XSLT transform parameter value\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"null-percentage\": {\n-                                \"defaultValue\": \"0\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Nullable Fields\",\n-                                        \"propertyName\": \"nullable-fields\"\n-                                    }\n-                                ],\n-                                \"description\": \"The percent probability (0-100%) that a generated value for any nullable field will be null. Set this property to zero to have no null values, or 100 to have all null values.\",\n-                                \"displayName\": \"Null Value Percentage\",\n+                            \"XSLT file name\": {\n+                                \"description\": \"Provides the name (including full path) of the XSLT file to apply to the FlowFile XML content.One of the 'XSLT file name' and 'XSLT Lookup' properties must be defined.\",\n+                                \"displayName\": \"XSLT file name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"null-percentage\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"XSLT file name\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Maximum number of stylesheets to cache. Zero disables the cache.\",\n+                                \"displayName\": \"Cache size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"nullable-fields\": {\n+                            \"cache-ttl-after-last-access\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"The cache TTL (time-to-live) or how long to keep stylesheets in the cache after last access.\",\n+                                \"displayName\": \"Cache TTL after last access\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-ttl-after-last-access\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"indent-output\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Whether the generated fields will be nullable. Note that this property is ignored if Schema Text is set. Also it only affects the schema of the generated data, not whether any values will be null. If this property is true, see 'Null Value Percentage' to set the probability that any generated field will be null.\",\n-                                \"displayName\": \"Nullable Fields\",\n+                                \"description\": \"Whether or not to indent the output.\",\n+                                \"displayName\": \"Indent\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"nullable-fields\",\n+                                \"name\": \"indent-output\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"number-of-records\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies how many records will be generated for each outgoing FlowFile.\",\n-                                \"displayName\": \"Number of Records\",\n+                            \"secure-processing\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to mitigate various XML-related attacks like XXE (XML External Entity) attacks.\",\n+                                \"displayName\": \"Secure processing\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"number-of-records\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"secure-processing\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"xslt-controller\": {\n+                                \"description\": \"Controller lookup used to store XSLT definitions. One of the 'XSLT file name' and 'XSLT Lookup' properties must be defined. WARNING: note that the lookup controller service should not be used to store large XSLT files.\",\n+                                \"displayName\": \"XSLT Lookup\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"name\": \"xslt-controller\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"description\": \"The text of an Avro-formatted Schema used to generate record data. If this property is set, any user-defined properties are ignored.\",\n-                                \"displayName\": \"Schema Text\",\n+                            \"xslt-controller-key\": {\n+                                \"description\": \"Key used to retrieve the XSLT definition from the XSLT lookup controller. This property must be set when using the XSLT controller property.\",\n+                                \"displayName\": \"XSLT Lookup key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"schema-text\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"xslt-controller-key\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully created will be routed to this relationship\",\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid XML), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fake\",\n-                            \"generate\",\n-                            \"random\",\n-                            \"test\"\n+                            \"transform\",\n+                            \"xml\",\n+                            \"xslt\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GenerateRecord\",\n-                        \"typeDescription\": \"This processor creates FlowFiles with records having random value for the specified fields. GenerateRecord is useful for testing, configuration, and simulation. It uses either user-defined properties to define a record schema or a provided schema and generates the specified number of records using random data for the fields in the schema.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.TransformXml\",\n+                        \"typeDescription\": \"Applies the provided XSLT file to the FlowFile XML payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the XSL transform fails, the original FlowFile is routed to the 'failure' relationship\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Specifies an initial max value for max value columns. Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified). In the case of incoming connections, the value is only used the first time for each table specified in the FlowFiles.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"initial.maxvalue.<max_value_column>\",\n-                                \"value\": \"Initial maximum value for the specified column\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Columns to Return\": {\n-                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Columns to Return\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Columns to Return\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"File Filter\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"Only files contained in the archive whose names match the given regular expression will be extracted (tar/zip only)\",\n+                                \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Database Connection Pooling Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum-value Columns\": {\n-                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Maximum-value Columns\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Maximum-value Columns\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the database table to be queried.\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n+                                \"name\": \"File Filter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-db-type\": {\n+                            \"Packaging Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"use mime.type attribute\",\n+                                        \"value\": \"use mime.type attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"tar\",\n+                                        \"value\": \"tar\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"zip\",\n+                                        \"value\": \"zip\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-stream-v3\",\n+                                        \"value\": \"flowfile-stream-v3\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-stream-v2\",\n+                                        \"value\": \"flowfile-stream-v2\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-tar-v1\",\n+                                        \"value\": \"flowfile-tar-v1\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n-                                \"displayName\": \"Database Type\",\n+                                \"defaultValue\": \"use mime.type attribute\",\n+                                \"description\": \"The Packaging Format used to create the file\",\n+                                \"displayName\": \"Packaging Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-fetch-db-type\",\n+                                \"name\": \"Packaging Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-where-clause\": {\n-                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n-                                \"displayName\": \"Additional WHERE clause\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"db-fetch-where-clause\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gen-table-column-for-val-partitioning\": {\n-                                \"description\": \"The name of a column whose values will be used for partitioning. The default behavior is to use row numbers on the result set for partitioning into 'pages' to be fetched from the database, using an offset/limit strategy. However for certain databases, it can be more efficient under the right circumstances to use the column values themselves to define the 'pages'. This property should only be used when the default queries are not performing well, when there is no maximum-value column or a single maximum-value column whose type can be coerced to a long integer (i.e. not date or timestamp), and the column values are evenly distributed and not sparse, for best performance.\",\n-                                \"displayName\": \"Column for Value Partitioning\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gen-table-column-for-val-partitioning\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gen-table-custom-orderby-column\": {\n-                                \"description\": \"The name of a column to be used for ordering the results if Max-Value Columns are not provided and partitioning is enabled. This property is ignored if either Max-Value Columns is set or Partition Size = 0. NOTE: If neither Max-Value Columns nor Custom ORDER BY Column is set, then depending on the the database/driver, the processor may report an error and/or the generated SQL may result in missing and/or duplicate rows. This is because without an explicit ordering, fetching each partition is done using an arbitrary ordering.\",\n-                                \"displayName\": \"Custom ORDER BY Column\",\n+                            \"Password\": {\n+                                \"description\": \"Password used for decrypting Zip archives encrypted with ZipCrypto or AES. Configuring a password disables support for alternative Zip compression algorithms.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gen-table-custom-orderby-column\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gen-table-fetch-partition-size\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The number of result rows to be fetched by each generated SQL statement. The total number of rows in the table divided by the partition size gives the number of SQL statements (i.e. FlowFiles) generated. A value of zero indicates that a single FlowFile is to be generated whose SQL statement will fetch all rows in the table.\",\n-                                \"displayName\": \"Partition Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gen-table-fetch-partition-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"gen-table-output-flowfile-on-zero-results\": {\n+                            \"allow-stored-entries-wdd\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Depending on the specified properties, an execution of this processor may not result in any SQL statements generated. When this property is true, an empty FlowFile will be generated (having the parent of the incoming FlowFile if present) and transferred to the 'success' relationship. When this property is false, no output FlowFiles will be generated.\",\n-                                \"displayName\": \"Output Empty FlowFile on Zero Results\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"zip\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Packaging Format\",\n+                                        \"propertyName\": \"Packaging Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Some zip archives contain stored entries with data descriptors which by spec should not happen.  If this property is true they will be read anyway.  If false and such an entry is discovered the zip will fail to process.\",\n+                                \"displayName\": \"Allow Stored Entries With Data Descriptor\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gen-table-output-flowfile-on-zero-results\",\n+                                \"name\": \"allow-stored-entries-wdd\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If the <Packaging Format> property is set to use mime.type attribute, this attribute is used to determine the FlowFile's MIME Type. In this case, if the attribute is set to application/tar, the TAR Packaging Format will be used. If the attribute is set to application/zip, the ZIP Packaging Format will be used. If the attribute is set to application/flowfile-v3 or application/flowfile-v2 or application/flowfile-v1, the appropriate FlowFile Packaging Format will be used. If this attribute is missing, the FlowFile will be routed to 'failure'. Otherwise, if the attribute's value is not one of those mentioned above, the FlowFile will be routed to 'success' without being unpacked. Use the File Filter property only extract files matching a specific regular expression.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n-                            \"org.apache.nifi.processors.standard.ListDatabaseTables\",\n-                            \"org.apache.nifi.processors.standard.QueryDatabaseTable\"\n+                            \"org.apache.nifi.processors.standard.MergeContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"description\": \"Unpacked FlowFiles are sent to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"This relationship is only used when SQL query execution (using an incoming FlowFile) failed. The incoming FlowFile will be penalized and routed to this relationship. If no incoming connection(s) are specified, this relationship is unused.\",\n+                                \"description\": \"The original FlowFile is sent to this relationship when it cannot be unpacked for some reason\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile is sent to this relationship after it has been successfully unpacked\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"fetch\",\n-                            \"generate\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"select\",\n-                            \"sql\"\n+                            \"Unpack\",\n+                            \"archive\",\n+                            \"flowfile-stream\",\n+                            \"flowfile-stream-v3\",\n+                            \"tar\",\n+                            \"un-merge\",\n+                            \"zip\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GenerateTableFetch\",\n-                        \"typeDescription\": \"Generates SQL select queries that fetch \\\"pages\\\" of rows from a table. The partition size property, along with the table's row count, determine the size and number of pages and generated FlowFiles. In addition, incremental fetching can be achieved by setting Maximum-Value Columns, which causes the processor to track the columns' maximum values, thus only fetching rows whose columns' values exceed the observed maximums. This processor is intended to be run on the Primary Node only.\\n\\nThis processor can accept incoming connections; the behavior of the processor is different whether incoming connections are provided:\\n  - If no incoming connection(s) are specified, the processor will generate SQL queries on the specified processor schedule. Expression Language is supported for many fields, but no FlowFile attributes are available. However the properties will be evaluated using the Variable Registry.\\n  - If incoming connection(s) are specified and no FlowFile is available to a processor task, no work will be performed.\\n  - If incoming connection(s) are specified and a FlowFile is available to a processor task, the FlowFile's attributes may be used in Expression Language for such fields as Table Name and others. However, the Max-Value Columns and Columns to Return fields must be empty or refer to columns that are available in each specified table.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.UnpackContent\",\n+                        \"typeDescription\": \"Unpacks the content of FlowFiles that have been packaged with one of several different Packaging Formats, emitting one to many FlowFiles for each input FlowFile. Supported formats are TAR, ZIP, and FlowFile Stream packages.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"If the processor has incoming connections, and processing an incoming FlowFile causes a SQL Exception, the FlowFile is routed to failure and this attribute is set to the exception message.\",\n-                                \"name\": \"generatetablefetch.sql.error\"\n+                                \"description\": \"If the FlowFile is successfully unpacked, its MIME Type is no longer known, so the mime.type attribute is set to application/octet-stream.\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The name of the database table to be queried.\",\n-                                \"name\": \"generatetablefetch.tableName\"\n+                                \"description\": \"All unpacked FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"The comma-separated list of column names used in the query.\",\n-                                \"name\": \"generatetablefetch.columnNames\"\n+                                \"description\": \"A one-up number that indicates the ordering of the unpacked FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"Where clause used in the query to get the expected rows.\",\n-                                \"name\": \"generatetablefetch.whereClause\"\n+                                \"description\": \"The number of unpacked FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n                             },\n                             {\n-                                \"description\": \"The comma-separated list of column names used to keep track of data that has been returned since the processor started running.\",\n-                                \"name\": \"generatetablefetch.maxColumnNames\"\n+                                \"description\": \"The filename of the parent FlowFile. Extensions of .tar, .zip or .pkg are removed because the MergeContent processor automatically adds those extensions if it is used to rebuild the original FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n                             },\n                             {\n-                                \"description\": \"The number of result rows to be fetched by the SQL statement.\",\n-                                \"name\": \"generatetablefetch.limit\"\n+                                \"description\": \"The date and time that the unpacked file was last modified (tar only).\",\n+                                \"name\": \"file.lastModifiedTime\"\n                             },\n                             {\n-                                \"description\": \"Offset to be used to retrieve the corresponding partition.\",\n-                                \"name\": \"generatetablefetch.offset\"\n+                                \"description\": \"The date and time that the file was created. This attribute holds always the same value as file.lastModifiedTime (tar only).\",\n+                                \"name\": \"file.creationTime\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles generated from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n+                                \"description\": \"The owner of the unpacked file (tar only)\",\n+                                \"name\": \"file.owner\"\n                             },\n                             {\n-                                \"description\": \"This is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet.\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"The group owner of the unpacked file (tar only)\",\n+                                \"name\": \"file.group\"\n                             },\n                             {\n-                                \"description\": \"This is the position of this FlowFile in the list of outgoing FlowFiles that were all generated from the same execution. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same execution and in what order  FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"The read/write/execute permissions of the unpacked file (tar only)\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The encryption method for entries in Zip archives\",\n+                                \"name\": \"file.encryptionMethod\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -104058,764 +104480,759 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Connection Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"counter-name\": {\n+                                \"description\": \"The name of the counter you want to set the value of - supports expression language like ${counterName}\",\n+                                \"displayName\": \"Counter Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"counter-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"delta\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Adjusts the counter by the specified delta for each flow file received. May be a positive or negative integer.\",\n+                                \"displayName\": \"Delta\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"delta\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Delete Original\": {\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The name of the counter to update/get.\",\n+                                \"name\": \"counterName\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Counter was updated/retrieved\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"counter\",\n+                            \"debug\",\n+                            \"instrumentation\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.UpdateCounter\",\n+                        \"typeDescription\": \"This processor allows users to set specific counters and key points in their flow. It is useful for debugging and basic counting functions.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"db-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines whether or not the file is deleted from the remote system after it has been successfully transferred\",\n-                                \"displayName\": \"Delete Original\",\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses.\",\n+                                \"displayName\": \"Database Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Delete Original\",\n-                                \"required\": true,\n+                                \"name\": \"db-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n+                            \"record-reader\": {\n+                                \"description\": \"The service for reading incoming flow files. The reader is only used to determine the schema of the records, the actual records will not be processed.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n+                            \"updatedatabasetable-catalog-name\": {\n+                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n+                                \"displayName\": \"Catalog Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n+                                \"name\": \"updatedatabasetable-catalog-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Dotted Files\": {\n+                            \"updatedatabasetable-create-table\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Create a table with the given schema if it does not already exist\",\n+                                        \"displayName\": \"Create If Not Exists\",\n+                                        \"value\": \"Create If Not Exists\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"If the target does not already exist, log an error and route the flowfile to failure\",\n+                                        \"displayName\": \"Fail If Not Exists\",\n+                                        \"value\": \"Fail If Not Exists\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Internal Buffer Size\": {\n-                                \"defaultValue\": \"16KB\",\n-                                \"description\": \"Set the internal buffer size for buffered data streams\",\n-                                \"displayName\": \"Internal Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Internal Buffer Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Selects\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of files to pull in a single connection\",\n-                                \"displayName\": \"Max Selects\",\n+                                \"defaultValue\": \"Fail If Not Exists\",\n+                                \"description\": \"Specifies how to process the target table when it does not exist (create it, fail, e.g.).\",\n+                                \"displayName\": \"Create Table Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Selects\",\n+                                \"name\": \"updatedatabasetable-create-table\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Path Filter Regex\": {\n-                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n-                                \"displayName\": \"Path Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter Regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Polling Interval\": {\n-                                \"defaultValue\": \"60 sec\",\n-                                \"description\": \"Determines how long to wait between fetching the listing for new files\",\n-                                \"displayName\": \"Polling Interval\",\n+                            \"updatedatabasetable-dbcp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection(s) to the database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"21\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"updatedatabasetable-dbcp-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Proxy Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    },\n+                            \"updatedatabasetable-primary-keys\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"dependentValues\": [\n+                                            \"Create If Not Exists\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Create Table Strategy\",\n+                                        \"propertyName\": \"updatedatabasetable-create-table\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Path\": {\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n+                                \"description\": \"A comma-separated list of record field names that uniquely identifies a row in the database. This property is only used if the specified table needs to be created, in which case the Primary Key Fields will be used to specify the primary keys of the newly-created table. IMPORTANT: Primary Key Fields must match the record field names exactly unless 'Quote Column Identifiers' is false and the database allows for case-insensitive column names. In practice it is best to specify Primary Key Fields that exactly match the record field names, and those will become the column names in the created table.\",\n+                                \"displayName\": \"Primary Key Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Path\",\n+                                \"name\": \"updatedatabasetable-primary-keys\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Poll Batch Size\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n-                                \"displayName\": \"Remote Poll Batch Size\",\n+                            \"updatedatabasetable-query-timeout\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Sets the number of seconds the driver will wait for a query to execute. A value of 0 means no timeout. NOTE: Non-zero values may not be supported by the driver.\",\n+                                \"displayName\": \"Query Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Poll Batch Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-query-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Search Recursively\": {\n+                            \"updatedatabasetable-quoted-column-identifiers\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\n+                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables and/or forcing the record field names to match the column names exactly.\",\n+                                \"displayName\": \"Quote Column Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Search Recursively\",\n-                                \"required\": true,\n+                                \"name\": \"updatedatabasetable-quoted-column-identifiers\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Mode\": {\n+                            \"updatedatabasetable-quoted-table-identifiers\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name and/or forcing the value of the Table Name property to match the target table name exactly.\",\n+                                \"displayName\": \"Quote Table Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Mode\",\n+                                \"name\": \"updatedatabasetable-quoted-table-identifiers\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Natural Ordering\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"updatedatabasetable-record-writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Update Field Names\",\n+                                        \"propertyName\": \"updatedatabasetable-update-field-names\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files in the order in which they are naturally listed; otherwise, the order in which the files will be pulled is not defined\",\n-                                \"displayName\": \"Use Natural Ordering\",\n+                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer should use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types. If Create Table Strategy is set 'Create If Not Exists', the Record Writer's output format must match the Record Reader's format in order for the data to be placed in the created table location. Note that this property is only used if 'Update Field Names' is set to true and the field names do not all match the column names exactly. If no update is needed for any field names (or 'Update Field Names' is false), the Record Writer is not used and instead the input FlowFile is routed to success or failure without modification.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Natural Ordering\",\n+                                \"name\": \"updatedatabasetable-record-writer\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"updatedatabasetable-schema-name\": {\n+                                \"description\": \"The name of the database schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly.\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-schema-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                            \"updatedatabasetable-table-name\": {\n+                                \"description\": \"The name of the database table to update. If the table does not exist, then it will either be created or an error thrown, depending on the value of the Create Table property.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"updatedatabasetable-table-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\n+                            \"updatedatabasetable-translate-field-names\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n-                                \"displayName\": \"Follow symlink\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, the Processor will attempt to translate field names into the corresponding column names for the table specified, for the purposes of determining whether the field name exists as a column in the target table. NOTE: If the target table does not exist and is to be created, this property is ignored and the field names will be used as-is. If false, the field names must match the column names exactly, or the column may not be found and instead an error my be reported that the column already exists.\",\n+                                \"displayName\": \"Translate Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"follow-symlink\",\n+                                \"name\": \"updatedatabasetable-translate-field-names\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ftp-use-utf8\": {\n+                            \"updatedatabasetable-update-field-names\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n-                                \"displayName\": \"Use UTF-8 Encoding\",\n+                                \"description\": \"This property indicates whether to update the output schema such that the field names are set to the exact column names from the specified table. This should be used if the incoming record field names may not match the table's column names in terms of upper- and lower-case. For example, this property should be set to true if the output FlowFile is destined for Oracle e.g., which expects the field names to match the column names exactly. NOTE: The value of the 'Translate Field Names' property is ignored when updating field names; instead they are updated to match the column name as returned by the database.\",\n+                                \"displayName\": \"Update Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ftp-use-utf8\",\n+                                \"name\": \"updatedatabasetable-update-field-names\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutFTP\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"A FlowFile containing records routed to this relationship after the record has been successfully transmitted to the database.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile containing records routed to this relationship if the record could not be transmitted to the database.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"FTP\",\n-                            \"fetch\",\n-                            \"files\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"source\"\n+                            \"alter\",\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"metadata\",\n+                            \"table\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetFTP\",\n-                        \"typeDescription\": \"Fetches files from an FTP Server and creates FlowFiles from them\",\n+                        \"type\": \"org.apache.nifi.processors.standard.UpdateDatabaseTable\",\n+                        \"typeDescription\": \"This processor uses a JDBC connection and incoming records to generate any database table changes needed to support the incoming records. It expects a 'flat' record layout, meaning none of the top-level record fields has nested fields that are intended to become columns themselves.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename is set to the name of the file on the remote server\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the source file was last modified\",\n-                                \"name\": \"file.lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n-                                \"name\": \"file.lastAccessTime\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric owner id of the source file\",\n-                                \"name\": \"file.owner\"\n+                                \"description\": \"This attribute is written on the flow files routed to the 'success' and 'failure' relationships, and contains the target table name.\",\n+                                \"name\": \"output.table\"\n                             },\n                             {\n-                                \"description\": \"The numeric group id of the source file\",\n-                                \"name\": \"file.group\"\n+                                \"description\": \"This attribute is written on the flow files routed to the 'success' and 'failure' relationships, and contains the path on the file system to the table (or partition location if the table is partitioned).\",\n+                                \"name\": \"output.path\"\n                             },\n                             {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer, only if a Record Writer is specified and Update Field Names is 'true'.\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n-                                \"name\": \"absolute.path\"\n+                                \"description\": \"Sets the number of records in the FlowFile, only if a Record Writer is specified and Update Field Names is 'true'.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            },\n+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"write filesystem\"\n+                                \"description\": \"Allows users to specify values to use to replace fields in the record that match the RecordPath.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"A RecordPath.\",\n+                                \"value\": \"The value to use to replace fields in the record that match the RecordPath\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of files to pull in each iteration\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"File Filter\": {\n-                                \"defaultValue\": \"[^\\\\.].*\",\n-                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n-                                \"displayName\": \"File Filter\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Ignore Hidden Files\": {\n+                            \"replacement-value-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The value entered for a Property (after Expression Language has been evaluated) is the desired value to update the Record Fields with. Expression Language may reference variables 'field.name', 'field.type', and 'field.value' to access information about the field and the value of the field being evaluated.\",\n+                                        \"displayName\": \"Literal Value\",\n+                                        \"value\": \"literal-value\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The value entered for a Property (after Expression Language has been evaluated) is not the literal value to use but rather is a Record Path that should be evaluated against the Record, and the result of the RecordPath will be used to update the Record. Note that if this option is selected, and the Record Path results in multiple values for a given Record, the input FlowFile will be routed to the 'failure' Relationship.\",\n+                                        \"displayName\": \"Record Path Value\",\n+                                        \"value\": \"record-path-value\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n-                                \"displayName\": \"Ignore Hidden Files\",\n+                                \"defaultValue\": \"literal-value\",\n+                                \"description\": \"Specifies how to interpret the configured replacement values\",\n+                                \"displayName\": \"Replacement Value Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Hidden Files\",\n+                                \"name\": \"replacement-value-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ConvertRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Input Directory\": {\n-                                \"description\": \"The input directory from which to pull files\",\n-                                \"displayName\": \"Input Directory\",\n+                            {\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"csv\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"log\",\n+                            \"logs\",\n+                            \"record\",\n+                            \"schema\",\n+                            \"text\",\n+                            \"update\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.UpdateRecord\",\n+                        \"typeDescription\": \"Updates the contents of a FlowFile that contains Record-oriented data (i.e., data that can be read via a RecordReader and written by a RecordWriter). This Processor requires that at least one user-defined Property be added. The name of the Property should indicate a RecordPath that determines the field that should be updated. The value of the Property is either a replacement value (optionally making use of the Expression Language) or is itself a RecordPath that extracts a value from the Record. Whether the Property value is determined to be a RecordPath or a literal value depends on the configuration of the <Replacement Value Strategy> Property.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This attribute provides the current row index and is only available inside the literal value expression.\",\n+                                \"name\": \"record.index\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"validate-csv-delimiter\": {\n+                                \"defaultValue\": \",\",\n+                                \"description\": \"Character used as 'delimiter' in the incoming data. Example: ,\",\n+                                \"displayName\": \"Delimiter character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Input Directory\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"validate-csv-delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Source File\": {\n+                            \"validate-csv-eol\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Symbols used as 'end of line' in the incoming data. Example: \\\\n\",\n+                                \"displayName\": \"End of line symbols\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"validate-csv-eol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"validate-csv-header\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the file is not deleted after it has been copied to the Content Repository; this causes the file to be picked up continually and is useful for testing purposes.  If not keeping original NiFi will need write permissions on the directory it is pulling from otherwise it will ignore the file.\",\n-                                \"displayName\": \"Keep Source File\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"True if the incoming flow file contains a header to ignore, false otherwise.\",\n+                                \"displayName\": \"Header\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Source File\",\n+                                \"name\": \"validate-csv-header\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"validate-csv-quote\": {\n+                                \"defaultValue\": \"\\\"\",\n+                                \"description\": \"Character used as 'quote' in the incoming data. Example: \\\"\",\n+                                \"displayName\": \"Quote character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"validate-csv-quote\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"validate-csv-schema\": {\n+                                \"description\": \"The schema to be used for validation. Is expected a comma-delimited string representing the cell processors to apply. The following cell processors are allowed in the schema definition: [ParseBigDecimal, ParseBool, ParseChar, ParseDate, ParseDouble, ParseInt, ParseLong, Optional, DMinMax, Equals, ForbidSubStr, LMinMax, NotNull, Null, RequireHashCode, RequireSubStr, Strlen, StrMinMax, StrNotNullOrEmpty, StrRegEx, Unique, UniqueHashCode, IsIncludedIn]. Note: cell processors cannot be nested except with Optional.\",\n+                                \"displayName\": \"Schema\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"validate-csv-schema\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Path Filter\": {\n-                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n-                                \"displayName\": \"Path Filter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Polling Interval\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Indicates how long to wait before performing a directory listing\",\n-                                \"displayName\": \"Polling Interval\",\n+                            \"validate-csv-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"In case an error is found, the input CSV file will be split into two FlowFiles: one routed to the 'valid' relationship containing all the correct lines and one routed to the 'invalid' relationship containing all the incorrect lines. Take care if choosing this option while using Unique cell processors in schema definition:the first occurrence will be considered valid and the next ones as invalid.\",\n+                                        \"displayName\": \"Line by line validation\",\n+                                        \"value\": \"Line by line validation\"\n+                                    },\n+                                    {\n+                                        \"description\": \"As soon as an error is found in the CSV file, the validation will stop and the whole flow file will be routed to the 'invalid' relationship. This option offers best performances.\",\n+                                        \"displayName\": \"FlowFile validation\",\n+                                        \"value\": \"FlowFile validation\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FlowFile validation\",\n+                                \"description\": \"Strategy to apply when routing input files to output relationships.\",\n+                                \"displayName\": \"Validation strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n+                                \"name\": \"validate-csv-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Recurse Subdirectories\": {\n+                            \"validate-csv-violations\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not to pull files from subdirectories\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the validation.error.message attribute would include the list of all the violations for the first invalid line. Note that setting this property to true would slightly decrease the performances as all columns would be validated. If false, a line is invalid as soon as a column is found violating the specified constraint and only this violation for the first invalid line will be included in the validation.error.message attribute.\",\n+                                \"displayName\": \"Include all violations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Recurse Subdirectories\",\n+                                \"name\": \"validate-csv-violations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchFile\",\n-                            \"org.apache.nifi.processors.standard.PutFile\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All files are routed to success\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles that are successfully validated against the schema are routed to this relationship\",\n+                                \"name\": \"valid\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n+                                \"name\": \"invalid\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"files\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"ingress\",\n-                            \"input\",\n-                            \"local\",\n-                            \"source\"\n+                            \"csv\",\n+                            \"schema\",\n+                            \"validation\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetFile\",\n-                        \"typeDescription\": \"Creates FlowFiles from files in a directory.  NiFi will ignore files it doesn't have at least read permissions for.\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ValidateCsv\",\n+                        \"typeDescription\": \"Validates the contents of FlowFiles against a user-specified CSV schema. Take a look at the additional documentation of this processor for some schema examples.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename is set to the name of the file on disk\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the relative path of the file's directory on disk. For example, if the <Input Directory> property is set to /tmp, files picked up from /tmp will have the path attribute set to ./. If the <Recurse Subdirectories> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to abc/1/2/3\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was created. May not work on all file systems\",\n-                                \"name\": \"file.creationTime\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was last modified. May not work on all file systems\",\n-                                \"name\": \"file.lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n-                                \"name\": \"file.lastAccessTime\"\n-                            },\n-                            {\n-                                \"description\": \"The owner of the file. May not work on all file systems\",\n-                                \"name\": \"file.owner\"\n+                                \"description\": \"If line by line validation, number of valid lines extracted from the source data\",\n+                                \"name\": \"count.valid.lines\"\n                             },\n                             {\n-                                \"description\": \"The group owner of the file. May not work on all file systems\",\n-                                \"name\": \"file.group\"\n+                                \"description\": \"If line by line validation, number of invalid lines extracted from the source data\",\n+                                \"name\": \"count.invalid.lines\"\n                             },\n                             {\n-                                \"description\": \"The read/write/execute permissions of the file. May not work on all file systems\",\n-                                \"name\": \"file.permissions\"\n+                                \"description\": \"If line by line validation, total number of lines in the source data\",\n+                                \"name\": \"count.total.lines\"\n                             },\n                             {\n-                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n-                                \"name\": \"absolute.path\"\n+                                \"description\": \"For flow files routed to invalid, message of the first validation error\",\n+                                \"name\": \"validation.error.message\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -104829,1323 +105246,1594 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.standard.InvokeHTTP\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n-                        \"dynamicProperties\": [\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"The additional headers to be sent by the processor whenever making a new HTTP request. \\n Setting a dynamic property name to XYZ and value to ${attribute} will result in the header 'XYZ: attribute_value' being sent to the HTTP endpoint\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Header Name\",\n-                                \"value\": \"The Expression Language to be used to populate the header value\"\n+                                \"explanation\": \"Schema configuration can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Accept Content-Type\": {\n-                                \"description\": \"If specified, requests will only accept the provided Content-Type\",\n-                                \"displayName\": \"Accept Content-Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Accept Content-Type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"How long to wait when attempting to connect to the remote server before giving up\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"How long to wait between receiving segments of data from the remote server before giving up and discarding the partial file\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"JSON Schema\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCHEMA_CONTENT_PROPERTY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"Schema Access Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"A URL or file path to the JSON schema or the actual JSON schema content\",\n+                                \"displayName\": \"JSON Schema\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Filename\": {\n-                                \"description\": \"The filename to assign to the file when pulled\",\n-                                \"displayName\": \"Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Filename\",\n+                                \"name\": \"JSON Schema\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Follow Redirects\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"JSON Schema Registry\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"SCHEMA_NAME_PROPERTY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"Schema Access Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If we receive a 3xx HTTP Status Code from the server, indicates whether or not we should follow the redirect that the server specifies\",\n-                                \"displayName\": \"Follow Redirects\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Follow Redirects\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password required to access the URL\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context\",\n-                                \"displayName\": \"SSL Context Service\",\n+                                \"description\": \"Specifies the Controller Service to use for the JSON Schema Registry\",\n+                                \"displayName\": \"JSON Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"URL\": {\n-                                \"description\": \"The URL to pull from\",\n-                                \"displayName\": \"URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"URL\",\n+                                \"name\": \"JSON Schema Registry\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"User Agent\": {\n-                                \"description\": \"What to report as the User Agent when we connect to the remote server\",\n-                                \"displayName\": \"User Agent\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"User Agent\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username required to access the URL\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.JsonSchemaRegistry\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"redirect-cookie-policy\": {\n+                            \"JSON Schema Version\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Default cookie policy that provides a higher degree of compatibility with common cookie management of popular HTTP agents for non-standard (Netscape style) cookies.\",\n-                                        \"displayName\": \"default\",\n-                                        \"value\": \"default\"\n+                                        \"description\": \"Draft Version 4\",\n+                                        \"displayName\": \"Draft 4\",\n+                                        \"value\": \"DRAFT_4\"\n                                     },\n                                     {\n-                                        \"description\": \"RFC 6265 compliant cookie policy (interoperability profile).\",\n-                                        \"displayName\": \"standard\",\n-                                        \"value\": \"standard\"\n+                                        \"description\": \"Draft Version 6\",\n+                                        \"displayName\": \"Draft 6\",\n+                                        \"value\": \"DRAFT_6\"\n                                     },\n                                     {\n-                                        \"description\": \"RFC 6265 compliant cookie policy (strict profile).\",\n-                                        \"displayName\": \"strict\",\n-                                        \"value\": \"strict\"\n+                                        \"description\": \"Draft Version 7\",\n+                                        \"displayName\": \"Draft 7\",\n+                                        \"value\": \"DRAFT_7\"\n                                     },\n                                     {\n-                                        \"description\": \"Netscape draft compliant cookie policy.\",\n-                                        \"displayName\": \"netscape\",\n-                                        \"value\": \"netscape\"\n+                                        \"description\": \"Draft Version 2019-09\",\n+                                        \"displayName\": \"Draft 2019-09\",\n+                                        \"value\": \"DRAFT_2019_09\"\n                                     },\n                                     {\n-                                        \"description\": \"A cookie policy that ignores cookies.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"Draft Version 2020-12\",\n+                                        \"displayName\": \"Draft 2020-12\",\n+                                        \"value\": \"DRAFT_2020_12\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"When a HTTP server responds to a request with a redirect, this is the cookie policy used to copy cookies to the following request.\",\n-                                \"displayName\": \"Redirect Cookie Policy\",\n+                                \"defaultValue\": \"DRAFT_2020_12\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCHEMA_CONTENT_PROPERTY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"Schema Access Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The JSON schema specification\",\n+                                \"displayName\": \"JSON Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redirect-cookie-policy\",\n-                                \"required\": false,\n+                                \"name\": \"JSON Schema Version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Schema Access Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured JSON Schema Registry Service.\",\n+                                        \"displayName\": \"Schema Name Property\",\n+                                        \"value\": \"SCHEMA_NAME_PROPERTY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A URL or file path to the JSON schema or the actual JSON schema is specified by the 'JSON Schema' Property. No matter how the JSON schema is specified, it must be a valid JSON schema\",\n+                                        \"displayName\": \"JSON Schema Property\",\n+                                        \"value\": \"SCHEMA_CONTENT_PROPERTY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SCHEMA_CONTENT_PROPERTY\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Schema Access Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Schema Name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCHEMA_NAME_PROPERTY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"Schema Access Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Schema Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Stores Last Modified Time and ETag headers returned by server so that the same data will not be fetched multiple times.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All files are transferred to the success relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles that are successfully validated against the schema are routed to this relationship\",\n+                                \"name\": \"valid\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n+                                \"name\": \"invalid\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that cannot be read as JSON are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Validating JSON requires reading FlowFile content into memory\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"get\",\n-                            \"http\",\n-                            \"https\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"poll\",\n-                            \"source\"\n+                            \"JSON\",\n+                            \"schema\",\n+                            \"validation\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetHTTP\",\n-                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use InvokeHTTP instead. Fetches data from an HTTP or HTTPS URL and writes the data to the content of a FlowFile. Once the content has been fetched, the ETag and Last Modified dates are remembered (if the web server supports these concepts). This allows the Processor to fetch new data only if the remote data has changed or until the state is cleared. That is, once the content has been fetched from the given URL, it will not be fetched again until the content on the remote server changes. Note that due to limitations on state management, stored \\\"last modified\\\" and etag fields never expire. If the URL in GetHttp uses Expression Language that is unbounded, there is the potential for Out of Memory Errors to occur.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ValidateJson\",\n+                        \"typeDescription\": \"Validates the contents of FlowFiles against a configurable JSON Schema. See json-schema.org for specification standards. This Processor does not support input containing multiple JSON objects, such as newline-delimited JSON. If the input FlowFile contains newline-delimited JSON, only the first line will be validated.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename is set to the name of the file on the remote server\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type of the FlowFile, as reported by the HTTP Content-Type header\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"If the flow file is routed to the invalid relationship , this attribute will contain the error message resulting from the validation failure.\",\n+                                \"name\": \"json.validation.errors\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.jms.processors.ConsumeJMS\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases. \",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Acknowledgement Mode\": {\n+                            \"allow-extra-fields\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Client Acknowledge\",\n-                                        \"value\": \"Client Acknowledge\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Auto Acknowledge\",\n-                                        \"value\": \"Auto Acknowledge\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Client Acknowledge\",\n-                                \"description\": \"The JMS Acknowledgement Mode. Using Auto Acknowledge can cause messages to be lost on restart of NiFi but may provide better performance than Client Acknowledge.\",\n-                                \"displayName\": \"Acknowledgement Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Acknowledgement Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Client ID Prefix\": {\n-                                \"description\": \"A human-readable ID that can be used to associate connections with yourself so that the maintainers of the JMS Server know who to contact if problems arise\",\n-                                \"displayName\": \"Client ID Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client ID Prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"The amount of time to wait when attempting to receive a message before giving up and assuming failure\",\n-                                \"displayName\": \"Communications Timeout\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If the incoming data has fields that are not present in the schema, this property determines whether or not the Record is valid. If true, the Record is still valid. If false, the Record will be invalid due to the extra fields.\",\n+                                \"displayName\": \"Allow Extra Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"allow-extra-fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Copy JMS Properties to Attributes\": {\n+                            \"coerce-types\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not the JMS Message Properties should be copied to the FlowFile Attributes; if so, the attribute name will be jms.XXX, where XXX is the JMS Property name\",\n-                                \"displayName\": \"Copy JMS Properties to Attributes\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If enabled, the processor will coerce every field to the type specified in the Reader's schema. If the value of a field cannot be coerced to the type, the field will be skipped (will not be read from the input data), thus will not appear in the output. If not enabled, then every field will appear in the output but their types may differ from what is specified in the schema. For details please see the Additional Details page of the processor's Help. This property controls how the data is read by the specified Record Reader.\",\n+                                \"displayName\": \"Force Types From Reader's Schema\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Copy JMS Properties to Attributes\",\n+                                \"name\": \"coerce-types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Destination Name\": {\n-                                \"description\": \"The name of the JMS Topic or queue to use\",\n-                                \"displayName\": \"Destination Name\",\n+                            \"invalid-record-writer\": {\n+                                \"description\": \"If specified, this Controller Service will be used to write out any records that are invalid. If not specified, the writer specified by the \\\"Record Writer\\\" property will be used with the schema used to read the input records. This is useful, for example, when the configured Record Writer cannot write data that does not adhere to its schema (as is the case with Avro) or when it is desirable to keep invalid records in their original format while converting valid records to another format.\",\n+                                \"displayName\": \"Record Writer for Invalid Records\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Name\",\n-                                \"required\": true,\n+                                \"name\": \"invalid-record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"maximum-validation-details-length\": {\n+                                \"defaultValue\": \"1024\",\n+                                \"description\": \"Specifies the maximum number of characters that validation details value can have. Any characters beyond the max will be truncated. This property is only used if 'Validation Details Attribute Name' is set\",\n+                                \"displayName\": \"Maximum Validation Details Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"maximum-validation-details-length\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"JMS Provider\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ActiveMQ\",\n-                                        \"value\": \"ActiveMQ\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ActiveMQ\",\n-                                \"description\": \"The Provider used for the JMS Server\",\n-                                \"displayName\": \"JMS Provider\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JMS Provider\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Message Batch Size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The number of messages to pull/push in a single iteration of the processor\",\n-                                \"displayName\": \"Message Batch Size\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records. Regardless of the Controller Service schema access configuration, the schema that is used to validate record is used to write the valid results.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Batch Size\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Message Selector\": {\n-                                \"description\": \"The JMS Message Selector to use in order to narrow the messages that are pulled\",\n-                                \"displayName\": \"Message Selector\",\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The schema to validate the data against is determined by asking the configured Record Reader for its schema\",\n+                                        \"displayName\": \"Use Reader's Schema\",\n+                                        \"value\": \"reader-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The schema to validate the data against is determined by looking at the 'Schema Name' Property and looking up the schema in the configured Schema Registry\",\n+                                        \"displayName\": \"Use Schema Name Property\",\n+                                        \"value\": \"schema-name-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The schema to validate the data against is determined by looking at the 'Schema Text' Property and parsing the schema as an Avro schema\",\n+                                        \"displayName\": \"Use Schema Text Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"reader-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that should be used to validate records\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Selector\",\n-                                \"required\": false,\n+                                \"name\": \"schema-access-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization\",\n-                                \"displayName\": \"Password\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"schema-registry\": {\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry. This is necessary only if the Schema Access Strategy is set to \\\"Use 'Schema Name' Property\\\".\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"URL\": {\n-                                \"description\": \"The URL of the JMS Server\",\n-                                \"displayName\": \"URL\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"strict-type-checking\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If the incoming data has a Record where a field is not of the correct type, this property determines how to handle the Record. If true, the Record will be considered invalid. If false, the Record will be considered valid and the field will be coerced into the correct type (if possible, according to the type coercion supported by the Record Writer). This property controls how the data is validated against the validation schema.\",\n+                                \"displayName\": \"Strict Type Checking\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"URL\",\n+                                \"name\": \"strict-type-checking\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username used for authentication and authorization\",\n-                                \"displayName\": \"Username\",\n+                            \"validation-details-attribute-name\": {\n+                                \"description\": \"If specified, when a validation error occurs, this attribute name will be used to leave the details. The number of characters will be limited by the property 'Maximum Validation Details Length'.\",\n+                                \"displayName\": \"Validation Details Attribute Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"validation-details-attribute-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutJMS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles are routed to success\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Records that are valid according to the schema will be routed to this relationship\",\n+                                \"name\": \"valid\"\n+                            },\n+                            {\n+                                \"description\": \"Records that are not valid according to the schema will be routed to this relationship\",\n+                                \"name\": \"invalid\"\n+                            },\n+                            {\n+                                \"description\": \"If the records cannot be read, validated, or written, for any reason, the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"consume\",\n-                            \"consumer\",\n-                            \"get\",\n-                            \"jms\",\n-                            \"listen\",\n-                            \"pull\",\n-                            \"queue\",\n-                            \"source\"\n+                            \"record\",\n+                            \"schema\",\n+                            \"validate\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetJMSQueue\",\n-                        \"typeDescription\": \"Pulls messages from a ActiveMQ JMS Queue, creating a FlowFile for each JMS Message or bundle of messages, as configured\",\n-                        \"version\": \"1.27.0\"\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ValidateRecord\",\n+                        \"typeDescription\": \"Validates the Records of an incoming FlowFile against a given schema. All records that adhere to the schema are routed to the \\\"valid\\\" relationship while records that do not adhere to the schema are routed to the \\\"invalid\\\" relationship. It is therefore possible for a single incoming FlowFile to be split into two individual FlowFiles if some records are valid according to the schema and others are not. Any FlowFile that is routed to the \\\"invalid\\\" relationship will emit a ROUTE Provenance Event with the Details field populated to explain why records were invalid. In addition, to gain further explanation of why records were invalid, DEBUG-level logging can be enabled for the \\\"org.apache.nifi.processors.standard.ValidateRecord\\\" logger.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records in the FlowFile routed to a relationship\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.jms.processors.ConsumeJMS\"\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Schema configuration can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n                         ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Acknowledgement Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Client Acknowledge\",\n-                                        \"value\": \"Client Acknowledge\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Auto Acknowledge\",\n-                                        \"value\": \"Auto Acknowledge\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Client Acknowledge\",\n-                                \"description\": \"The JMS Acknowledgement Mode. Using Auto Acknowledge can cause messages to be lost on restart of NiFi but may provide better performance than Client Acknowledge.\",\n-                                \"displayName\": \"Acknowledgement Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Acknowledgement Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Client ID Prefix\": {\n-                                \"description\": \"A human-readable ID that can be used to associate connections with yourself so that the maintainers of the JMS Server know who to contact if problems arise\",\n-                                \"displayName\": \"Client ID Prefix\",\n+                            \"Schema File\": {\n+                                \"description\": \"The file path or URL to the XSD Schema file that is to be used for validation. If this property is blank, only XML syntax/structure will be validated.\",\n+                                \"displayName\": \"Schema File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client ID Prefix\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Schema File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"The amount of time to wait when attempting to receive a message before giving up and assuming failure\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"XML Source Attribute\": {\n+                                \"description\": \"The name of the attribute containing XML to be validated. If this property is blank, the FlowFile content will be validated.\",\n+                                \"displayName\": \"XML Source Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"XML Source Attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that are successfully validated against the schema, if provided, or verified to be well-formed XML are routed to this relationship\",\n+                                \"name\": \"valid\"\n                             },\n-                            \"Copy JMS Properties to Attributes\": {\n+                            {\n+                                \"description\": \"FlowFiles that are not valid according to the specified schema or contain invalid XML are routed to this relationship\",\n+                                \"name\": \"invalid\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"While this processor supports processing XML within attributes, it is strongly discouraged to hold large amounts of data in attributes. In general, attribute values should be as small as possible and hold no more than a couple hundred characters.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"schema\",\n+                            \"validation\",\n+                            \"xml\",\n+                            \"xsd\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ValidateXml\",\n+                        \"typeDescription\": \"Validates XML contained in a FlowFile. By default, the XML is contained in the FlowFile content. If the 'XML Source Attribute' property is set, the XML to be validated is contained in the specified attribute. It is not recommended to use attributes to hold large XML documents; doing so could adversely affect system performance. Full schema validation is performed if the processor is configured with the XSD schema details. Otherwise, the only validation performed is to ensure the XML syntax is correct and well-formed, e.g. all opening tags are properly closed.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the flow file is routed to the invalid relationship the attribute will contain the error message resulting from the validation failure.\",\n+                                \"name\": \"validatexml.invalid.error\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"attribute-copy-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"When cached attributes are copied onto released FlowFiles, they replace any matching attributes.\",\n+                                        \"displayName\": \"Replace if present\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Attributes on released FlowFiles are not overwritten by copied cached attributes.\",\n+                                        \"displayName\": \"Keep original\",\n+                                        \"value\": \"keeporiginal\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not the JMS Message Properties should be copied to the FlowFile Attributes; if so, the attribute name will be jms.XXX, where XXX is the JMS Property name\",\n-                                \"displayName\": \"Copy JMS Properties to Attributes\",\n+                                \"defaultValue\": \"keeporiginal\",\n+                                \"description\": \"Specifies how to handle attributes copied from FlowFiles entering the Notify processor\",\n+                                \"displayName\": \"Attribute Copy Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Copy JMS Properties to Attributes\",\n+                                \"name\": \"attribute-copy-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Destination Name\": {\n-                                \"description\": \"The name of the JMS Topic or queue to use\",\n-                                \"displayName\": \"Destination Name\",\n+                            \"distributed-cache-service\": {\n+                                \"description\": \"The Controller Service that is used to check for release signals from a corresponding Notify processor\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Name\",\n+                                \"name\": \"distributed-cache-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"JMS Provider\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ActiveMQ\",\n-                                        \"value\": \"ActiveMQ\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ActiveMQ\",\n-                                \"description\": \"The Provider used for the JMS Server\",\n-                                \"displayName\": \"JMS Provider\",\n+                            \"expiration-duration\": {\n+                                \"defaultValue\": \"10 min\",\n+                                \"description\": \"Indicates the duration after which waiting FlowFiles will be routed to the 'expired' relationship\",\n+                                \"displayName\": \"Expiration Duration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JMS Provider\",\n+                                \"name\": \"expiration-duration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Batch Size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The number of messages to pull/push in a single iteration of the processor\",\n-                                \"displayName\": \"Message Batch Size\",\n+                            \"releasable-flowfile-count\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the releasable FlowFile count. This specifies how many FlowFiles can be released when a target count reaches target signal count. Zero (0) has a special meaning, any number of FlowFiles can be released as long as signal count matches target.\",\n+                                \"displayName\": \"Releasable FlowFile Count\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Batch Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"releasable-flowfile-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Selector\": {\n-                                \"description\": \"The JMS Message Selector to use in order to narrow the messages that are pulled\",\n-                                \"displayName\": \"Message Selector\",\n+                            \"release-signal-id\": {\n+                                \"description\": \"A value that specifies the key to a specific release signal cache. To decide whether the FlowFile that is being processed by the Wait processor should be sent to the 'success' or the 'wait' relationship, the processor checks the signals in the cache specified by this key.\",\n+                                \"displayName\": \"Release Signal Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Selector\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"release-signal-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization\",\n-                                \"displayName\": \"Password\",\n+                            \"signal-counter-name\": {\n+                                \"description\": \"Within the cache (specified by the Release Signal Identifier) the signals may belong to different counters. If this property is specified, the processor checks the number of signals in the cache that belong to this particular counter. If not specified, the processor checks the total number of signals in the cache.\",\n+                                \"displayName\": \"Signal Counter Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"signal-counter-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"target-signal-count\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of signals that need to be in the cache (specified by the Release Signal Identifier) in order for the FlowFile processed by the Wait processor to be sent to the \\u2018success\\u2019 relationship. If the number of signals in the cache has reached this number, the FlowFile is routed to the 'success' relationship and the number of signals in the cache is decreased by this value. If Signal Counter Name is specified, this processor checks a particular counter, otherwise checks against the total number of signals in the cache.\",\n+                                \"displayName\": \"Target Signal Count\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"target-signal-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"URL\": {\n-                                \"description\": \"The URL of the JMS Server\",\n-                                \"displayName\": \"URL\",\n+                            \"wait-buffer-count\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Specify the maximum number of incoming FlowFiles that can be buffered to check whether it can move forward. The more buffer can provide the better performance, as it reduces the number of interactions with cache service by grouping FlowFiles by signal identifier. Only a signal identifier can be processed at a processor execution.\",\n+                                \"displayName\": \"Wait Buffer Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"URL\",\n+                                \"name\": \"wait-buffer-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Durable Subscription\": {\n+                            \"wait-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Transfer a FlowFile to the 'wait' relationship when whose release signal has not been notified yet. This mode allows other incoming FlowFiles to be enqueued by moving FlowFiles into the wait relationship. It is recommended to set a prioritizer (for instance First In First Out) on the 'wait' relationship.\",\n+                                        \"displayName\": \"Transfer to wait relationship\",\n+                                        \"value\": \"wait\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Transfer a FlowFile to the upstream connection where it comes from when whose release signal has not been notified yet. This mode helps keeping upstream connection being full so that the upstream source processor will not be scheduled while back-pressure is active and limit incoming FlowFiles. \",\n+                                        \"displayName\": \"Keep in the upstream connection\",\n+                                        \"value\": \"keep\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, connections to the specified topic will use Durable Subscription so that messages are queued when we are not pulling them\",\n-                                \"displayName\": \"Use Durable Subscription\",\n+                                \"defaultValue\": \"wait\",\n+                                \"description\": \"Specifies how to handle a FlowFile waiting for a notify signal\",\n+                                \"displayName\": \"Wait Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Durable Subscription\",\n+                                \"name\": \"wait-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username used for authentication and authorization\",\n-                                \"displayName\": \"Username\",\n+                            \"wait-penalty-duration\": {\n+                                \"description\": \"If configured, after a signal identifier got processed but did not meet the release criteria, the signal identifier is penalized and FlowFiles having the signal identifier will not be processed again for the specified period of time, so that the signal identifier will not block others to be processed. This can be useful for use cases where a Wait processor is expected to process multiple signal identifiers, and each signal identifier has multiple FlowFiles, and also the order of releasing FlowFiles is important within a signal identifier. The FlowFile order can be configured with Prioritizers. IMPORTANT: There is a limitation of number of queued signals can be processed, and Wait processor may not be able to check all queued signal ids. See additional details for the best practice.\",\n+                                \"displayName\": \"Wait Penalty Duration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"wait-penalty-duration\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutJMS\"\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.Notify\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles are routed to success\",\n+                                \"description\": \"A FlowFile that has exceeded the configured Expiration Duration will be routed to this relationship\",\n+                                \"name\": \"expired\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile with a matching release signal in the cache will be routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile with no matching release signal in the cache will be routed to this relationship\",\n+                                \"name\": \"wait\"\n+                            },\n+                            {\n+                                \"description\": \"When the cache cannot be reached, or if the Release Signal Identifier evaluates to null or empty, FlowFiles will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"consume\",\n-                            \"consumer\",\n-                            \"durable\",\n-                            \"get\",\n-                            \"jms\",\n-                            \"listen\",\n-                            \"non-durable\",\n-                            \"pull\",\n-                            \"source\",\n-                            \"subscription\",\n-                            \"topic\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"hold\",\n+                            \"map\",\n+                            \"release\",\n+                            \"signal\",\n+                            \"wait\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetJMSTopic\",\n-                        \"typeDescription\": \"Pulls messages from a ActiveMQ JMS Topic, creating a FlowFile for each JMS Message or bundle of messages, as configured.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.Wait\",\n+                        \"typeDescription\": \"Routes incoming FlowFiles to the 'wait' relationship until a matching release signal is stored in the distributed cache from a corresponding Notify processor. When a matching release signal is identified, a waiting FlowFile is routed to the 'success' relationship. The release signal entry is then removed from the cache. The attributes of the FlowFile that produced the release signal are copied to the waiting FlowFile if the Attribute Cache Regex property of the corresponding Notify processor is set properly. If there are multiple release signals in the cache identified by the Release Signal Identifier, and the Notify processor is configured to copy the FlowFile attributes to the cache, then the FlowFile passing the Wait processor receives the union of the attributes of the FlowFiles that produced the release signals in the cache (identified by Release Signal Identifier). Waiting FlowFiles will be routed to 'expired' if they exceed the Expiration Duration. If you need to wait for more than one signal, specify the desired number of signals via the 'Target Signal Count' property. This is particularly useful with processors that split a source FlowFile into multiple fragments, such as SplitText. In order to wait for all fragments to be processed, connect the 'original' relationship to a Wait processor, and the 'splits' relationship to a corresponding Notify processor. Configure the Notify and Wait processors to use the '${fragment.identifier}' as the value of 'Release Signal Identifier', and specify '${fragment.count}' as the value of 'Target Signal Count' in the Wait processor.It is recommended to use a prioritizer (for instance First In First Out) when using the 'wait' relationship as a loop.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All FlowFiles will have an attribute 'wait.start.timestamp', which sets the initial epoch timestamp when the file first entered this processor.  This is used to determine the expiration time of the FlowFile.  This attribute is not written when the FlowFile is transferred to failure, expired or success\",\n+                                \"name\": \"wait.start.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The name of each counter for which at least one signal has been present in the cache since the last time the cache was empty gets copied to the current FlowFile as an attribute.\",\n+                                \"name\": \"wait.counter.<counterName>\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": [\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Ciphers Allowed\": {\n-                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n-                                \"displayName\": \"Ciphers Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Ciphers Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Delete Original\": {\n+                            \"Show Deltas\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Determines whether or not the file is deleted from the remote system after it has been successfully transferred\",\n-                                \"displayName\": \"Delete Original\",\n+                                \"description\": \"Specifies whether or not to show the difference in values between the current status and the previous status\",\n+                                \"displayName\": \"Show Deltas\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Delete Original\",\n+                                \"name\": \"Show Deltas\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n+                            \"reporting-granularity\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The stats that are reported will reflect up to the last 5 minutes' worth of processing, which will coincide with the stats that are shown in the UI.\",\n+                                        \"displayName\": \"Five Minutes\",\n+                                        \"value\": \"five-minutes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The stats that are reported will be an average of the value per second, gathered over the last 5 minutes. This is essentially obtained by dividing the stats that are shown in the UI by 300 (300 seconds in 5 minutes), with the exception of when NiFi has been running for less than 5 minutes. In that case, the stats will be divided by the amount of time NiFi has been running.\",\n+                                        \"displayName\": \"One Second\",\n+                                        \"value\": \"one-second\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"five-minutes\",\n+                                \"description\": \"When reporting information, specifies the granularity of the metrics to report\",\n+                                \"displayName\": \"Reporting Granularity\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n+                                \"name\": \"reporting-granularity\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"Host Key File\": {\n-                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n-                                \"displayName\": \"Host Key File\",\n+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"log\",\n+                            \"stats\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.controller.ControllerStatusReportingTask\",\n+                        \"typeDescription\": \"Logs the 5-minute stats that are shown in the NiFi Summary Page for Processors and Connections, as well optionally logging the deltas between the previous iteration and the current iteration. Processors' stats are logged using the org.apache.nifi.controller.ControllerStatusReportingTask.Processors logger, while Connections' stats are logged using the org.apache.nifi.controller.ControllerStatusReportingTask.Connections logger. These can be configured in the NiFi logging configuration to log to different files, if desired.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Directory Display Name\": {\n+                                \"defaultValue\": \"Un-Named\",\n+                                \"description\": \"The name to display for the directory in alerts.\",\n+                                \"displayName\": \"Directory Display Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Host Key File\",\n+                                \"name\": \"Directory Display Name\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Directory Location\": {\n+                                \"description\": \"The directory path of the partition to be monitored.\",\n+                                \"displayName\": \"Directory Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Directory Location\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n+                            \"Threshold\": {\n+                                \"defaultValue\": \"80%\",\n+                                \"description\": \"The threshold at which a bulletin will be generated to indicate that the disk usage of the partition on which the directory found is of concern\",\n+                                \"displayName\": \"Threshold\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Threshold\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Ignore Dotted Files\": {\n+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"disk\",\n+                            \"monitoring\",\n+                            \"repo\",\n+                            \"storage\",\n+                            \"warning\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.controller.MonitorDiskUsage\",\n+                        \"typeDescription\": \"Checks the amount of storage space available for the specified directory and warns (via a log message and a System-Level Bulletin) if the partition on which it lives exceeds some configurable threshold of storage space\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Memory Pool\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"PS Eden Space\",\n+                                        \"value\": \"PS Eden Space\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"PS Survivor Space\",\n+                                        \"value\": \"PS Survivor Space\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PS Old Gen\",\n+                                        \"value\": \"PS Old Gen\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n+                                \"defaultValue\": \"PS Old Gen\",\n+                                \"description\": \"The name of the JVM Memory Pool to monitor. The allowed values for Memory Pools are platform and JVM dependent and may vary for different versions of Java and from published documentation. This reporting task will become invalidated if configured to use a Memory Pool that is not available on the currently running host platform and JVM\",\n+                                \"displayName\": \"Memory Pool\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n+                                \"name\": \"Memory Pool\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Key Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n-                                \"displayName\": \"Key Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Key Exchange Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n-                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Exchange Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Selects\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of files to pull in a single connection\",\n-                                \"displayName\": \"Max Selects\",\n+                            \"Reporting Interval\": {\n+                                \"description\": \"Indicates how often this reporting task should report bulletins while the memory utilization exceeds the configured threshold\",\n+                                \"displayName\": \"Reporting Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Selects\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message Authentication Codes Allowed\": {\n-                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n-                                \"displayName\": \"Message Authentication Codes Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"name\": \"Reporting Interval\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Path Filter Regex\": {\n-                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n-                                \"displayName\": \"Path Filter Regex\",\n+                            \"Usage Threshold\": {\n+                                \"defaultValue\": \"65%\",\n+                                \"description\": \"Indicates the threshold at which warnings should be generated. This can be a percentage or a Data Size\",\n+                                \"displayName\": \"Usage Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter Regex\",\n-                                \"required\": false,\n+                                \"name\": \"Usage Threshold\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Polling Interval\": {\n-                                \"defaultValue\": \"60 sec\",\n-                                \"description\": \"Determines how long to wait between fetching the listing for new files\",\n-                                \"displayName\": \"Polling Interval\",\n+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"garbage collection\",\n+                            \"gc\",\n+                            \"heap\",\n+                            \"jvm\",\n+                            \"memory\",\n+                            \"monitor\",\n+                            \"warning\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.controller.MonitorMemory\",\n+                        \"typeDescription\": \"Checks the amount of Java Heap available in the JVM for a particular JVM Memory Pool. If the amount of space used exceeds some configurable threshold, will warn (via a log message and System-Level Bulletin) that the memory pool is exceeding this threshold.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The fully-qualified name of the host on which Ganglia is running\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"Port\": {\n-                                \"defaultValue\": \"22\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"defaultValue\": \"8649\",\n+                                \"description\": \"The Port on which Ganglia is listening for incoming connections\",\n                                 \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Private Key Passphrase\": {\n-                                \"description\": \"Password for the private key\",\n-                                \"displayName\": \"Private Key Passphrase\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Passphrase\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Private Key Path\": {\n-                                \"description\": \"The fully qualified path to the Private Key file\",\n-                                \"displayName\": \"Private Key Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Path\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Type\": {\n+                            \"Send JVM Metrics\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not JVM Metrics should be gathered and sent, in addition to NiFi-specific metrics\",\n+                                \"displayName\": \"Send JVM Metrics\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n+                                \"name\": \"Send JVM Metrics\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Remote Path\": {\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ganglia\",\n+                            \"stats\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.reporting.ganglia.StandardGangliaReporter\",\n+                        \"typeDescription\": \"Reports metrics to Ganglia so that Ganglia can be used for external monitoring of the application. Metrics reported include JVM Metrics (optional); the following 5-minute NiFi statistics: FlowFiles Received, Bytes Received, FlowFiles Sent, Bytes Sent, Bytes Read, Bytes Written, Total Task Duration; and the current values for FlowFiles Queued, Bytes Queued, and number of Active Threads.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kerberos-iaa-providers-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hl7-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hl7-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Encoding that is used to encode the HL7 data\",\n+                                \"displayName\": \"Character Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Path\",\n-                                \"required\": false,\n+                                \"name\": \"Character Encoding\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Poll Batch Size\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n-                                \"displayName\": \"Remote Poll Batch Size\",\n+                            \"hl7-input-version\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"autodetect\",\n+                                        \"value\": \"autodetect\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.2\",\n+                                        \"value\": \"2.2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.3\",\n+                                        \"value\": \"2.3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.3.1\",\n+                                        \"value\": \"2.3.1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.4\",\n+                                        \"value\": \"2.4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.5\",\n+                                        \"value\": \"2.5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.5.1\",\n+                                        \"value\": \"2.5.1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.6\",\n+                                        \"value\": \"2.6\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"autodetect\",\n+                                \"description\": \"The HL7 version to use for parsing and validation\",\n+                                \"displayName\": \"HL7 Input Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Poll Batch Size\",\n+                                \"name\": \"hl7-input-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Search Recursively\": {\n+                            \"parse-segment-fields\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\n+                                \"description\": \"Whether or not to parse HL7 segment fields into attributes\",\n+                                \"displayName\": \"Parse Segment Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Search Recursively\",\n+                                \"name\": \"parse-segment-fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Send Keep Alive On Timeout\": {\n+                            \"skip-validation\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n-                                \"displayName\": \"Send Keep Alive On Timeout\",\n+                                \"description\": \"Whether or not to validate HL7 message values\",\n+                                \"displayName\": \"Skip Validation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Keep Alive On Timeout\",\n+                                \"name\": \"skip-validation\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Strict Host Key Checking\": {\n+                            \"use-segment-names\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\n+                                \"description\": \"Whether or not to use HL7 segment names in attributes\",\n+                                \"displayName\": \"Use Segment Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Strict Host Key Checking\",\n+                                \"name\": \"use-segment-names\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if it is properly parsed as HL7 and its attributes extracted\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Use Compression\": {\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be mapped to FlowFile Attributes. This would happen if the FlowFile does not contain valid HL7 data\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"HL7\",\n+                            \"attributes\",\n+                            \"extract\",\n+                            \"health level 7\",\n+                            \"healthcare\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.hl7.ExtractHL7Attributes\",\n+                        \"typeDescription\": \"Extracts information from an HL7 (Health Level 7) formatted FlowFile and adds the information as FlowFile Attributes. The attributes are named as <Segment Name> <dot> <Field Index>. If the segment is repeating, the naming will be <Segment Name> <underscore> <Segment Index> <dot> <Field Index>. For example, we may have an attribute named \\\"MHS.12\\\" with a value of \\\"2.1\\\" and an attribute named \\\"OBX_11.3\\\" with a value of \\\"93000^CPT4\\\".\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hl7-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If a FlowFile matches the query, it will be routed to a relationship with the name of the property\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Name of a Relationship\",\n+                                \"value\": \"An HL7 Query Language query\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Encoding that is used to encode the HL7 data\",\n+                                \"displayName\": \"Character Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Character Encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Any FlowFile that cannot be parsed as HL7 will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile that comes into this processor will be routed to this relationship, unless it is routed to 'failure'\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"HL7\",\n+                            \"Health Level 7\",\n+                            \"healthcare\",\n+                            \"route\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.hl7.RouteHL7\",\n+                        \"typeDescription\": \"Routes incoming HL7 data according to user-defined queries. To add a query, add a new property to the processor. The name of the property will become a new relationship for the processor, and the value is an HL7 Query Language query. If a FlowFile matches the query, a copy of the FlowFile will be routed to the associated relationship.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the relationship to which the FlowFile was routed\",\n+                                \"name\": \"RouteHL7.Route\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-smb-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Completion Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Leaves the file as-is.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Moves the file to the specified directory on the remote system. This option cannot be used when DFS is enabled on 'SMB Client Provider Service'.\",\n+                                        \"displayName\": \"Move File\",\n+                                        \"value\": \"MOVE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Deletes the file from the remote system.\",\n+                                        \"displayName\": \"Delete File\",\n+                                        \"value\": \"DELETE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies what to do with the original file on the server once it has been processed. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n+                                \"displayName\": \"Completion Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n+                                \"name\": \"Completion Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Natural Ordering\": {\n+                            \"Create Destination Directory\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files in the order in which they are naturally listed; otherwise, the order in which the files will be pulled is not defined\",\n-                                \"displayName\": \"Use Natural Ordering\",\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"MOVE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Completion Strategy\",\n+                                        \"propertyName\": \"Completion Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Destination Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Create Destination Directory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Destination Directory\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"MOVE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Completion Strategy\",\n+                                        \"propertyName\": \"Completion Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The directory on the remote server to move the original file to once it has been processed.\",\n+                                \"displayName\": \"Destination Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Natural Ordering\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Destination Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                            \"remote-file\": {\n+                                \"defaultValue\": \"${path}/${filename}\",\n+                                \"description\": \"The full path of the file to be retrieved from the remote server. Expression language is supported.\",\n+                                \"displayName\": \"Remote File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"remote-file\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n-                                \"displayName\": \"Follow symlink\",\n+                            \"smb-client-provider-service\": {\n+                                \"description\": \"Specifies the SMB client provider to use for creating SMB connections.\",\n+                                \"displayName\": \"SMB Client Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"follow-symlink\",\n+                                \"name\": \"smb-client-provider-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-smb-client-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n+                            \"org.apache.nifi.processors.smb.ListSmb\",\n+                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"A FlowFile will be routed here for each successfully fetched file.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile will be routed here when failed to fetch its content.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n+                            \"cifs\",\n                             \"fetch\",\n                             \"files\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"sftp\",\n-                            \"source\"\n+                            \"samba\",\n+                            \"smb\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetSFTP\",\n-                        \"typeDescription\": \"Fetches files from an SFTP Server and creates FlowFiles from them\",\n+                        \"type\": \"org.apache.nifi.processors.smb.FetchSmb\",\n+                        \"typeDescription\": \"Fetches files from a SMB Share. Designed to be used in tandem with ListSmb.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename is set to the name of the file on the remote server\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the source file was last modified\",\n-                                \"name\": \"file.lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric owner id of the source file\",\n-                                \"name\": \"file.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric group id of the source file\",\n-                                \"name\": \"file.group\"\n-                            },\n-                            {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\n+                                \"description\": \"The error code returned by SMB when the fetch of a file fails.\",\n+                                \"name\": \"error.code\"\n                             },\n                             {\n-                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n-                                \"name\": \"absolute.path\"\n+                                \"description\": \"The error message returned by SMB when the fetch of a file fails.\",\n+                                \"name\": \"error.message\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -106157,1348 +106845,686 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional HTTP Methods\": {\n-                                \"description\": \"A comma-separated list of non-standard HTTP Methods that should be allowed\",\n-                                \"displayName\": \"Additional HTTP Methods\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of files to pull in each iteration\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional HTTP Methods\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Directory\": {\n+                                \"description\": \"The network folder to which files should be written. This is the remaining relative path after the share: \\\\\\\\hostname\\\\share\\\\[dir1\\\\dir2].\",\n+                                \"displayName\": \"Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow DELETE\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP DELETE Method\",\n-                                \"displayName\": \"Allow DELETE\",\n+                            \"Domain\": {\n+                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n+                                \"displayName\": \"Domain\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow DELETE\",\n+                                \"name\": \"Domain\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"File Filter\": {\n+                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n+                                \"displayName\": \"File Filter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The network host to which files should be written.\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow GET\": {\n+                            \"Ignore Hidden Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP GET Method\",\n-                                \"displayName\": \"Allow GET\",\n+                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n+                                \"displayName\": \"Ignore Hidden Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow GET\",\n+                                \"name\": \"Ignore Hidden Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow HEAD\": {\n+                            \"Keep Source File\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Allow HTTP HEAD Method\",\n-                                \"displayName\": \"Allow HEAD\",\n+                                \"description\": \"If true, the file is not deleted after it has been copied to the Content Repository; this causes the file to be picked up continually and is useful for testing purposes.  If not keeping original NiFi will need write permissions on the directory it is pulling from otherwise it will ignore the file.\",\n+                                \"displayName\": \"Keep Source File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow HEAD\",\n+                                \"name\": \"Keep Source File\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow OPTIONS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Allow HTTP OPTIONS Method\",\n-                                \"displayName\": \"Allow OPTIONS\",\n+                            \"Password\": {\n+                                \"description\": \"The password used for authentication. Required if Username is set.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow OPTIONS\",\n-                                \"required\": true,\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Path Filter\": {\n+                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n+                                \"displayName\": \"Path Filter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Path Filter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow POST\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP POST Method\",\n-                                \"displayName\": \"Allow POST\",\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Indicates how long to wait before performing a directory listing\",\n+                                \"displayName\": \"Polling Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow POST\",\n+                                \"name\": \"Polling Interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow PUT\": {\n+                            \"Recurse Subdirectories\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP PUT Method\",\n-                                \"displayName\": \"Allow PUT\",\n+                                \"description\": \"Indicates whether or not to pull files from subdirectories\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow PUT\",\n+                                \"name\": \"Recurse Subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allowed Paths\": {\n-                                \"description\": \"A Regular Expression that specifies the valid HTTP Paths that are allowed in the incoming URL Requests. If this value is specified and the path of the HTTP Requests does not match this Regular Expression, the Processor will respond with a 404: NotFound\",\n-                                \"displayName\": \"Allowed Paths\",\n+                            \"Share\": {\n+                                \"description\": \"The network share to which files should be written. This is the \\\"first folder\\\"after the hostname: \\\\\\\\hostname\\\\[share]\\\\dir1\\\\dir2\",\n+                                \"displayName\": \"Share\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allowed Paths\",\n-                                \"required\": false,\n+                                \"name\": \"Share\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client Authentication\": {\n+                            \"Share Access Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Processor will not authenticate clients. Anyone can communicate with this Processor anonymously\",\n-                                        \"displayName\": \"No Authentication\",\n-                                        \"value\": \"No Authentication\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"Processor will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n-                                        \"displayName\": \"Want Authentication\",\n-                                        \"value\": \"Want Authentication\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"read\",\n+                                        \"value\": \"read\"\n                                     },\n                                     {\n-                                        \"description\": \"Processor will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n-                                        \"displayName\": \"Need Authentication\",\n-                                        \"value\": \"Need Authentication\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"read, delete\",\n+                                        \"value\": \"read, delete\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"read, write, delete\",\n+                                        \"value\": \"read, write, delete\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"No Authentication\",\n-                                \"description\": \"Specifies whether or not the Processor should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n-                                \"displayName\": \"Client Authentication\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"Indicates which shared access are granted on the file during the read. None is the most restrictive, but the safest setting to prevent corruption.\",\n+                                \"displayName\": \"Share Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Authentication\",\n+                                \"name\": \"Share Access Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Default URL Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The character set to use for decoding URL parameters if the HTTP Request does not supply one\",\n-                                \"displayName\": \"Default URL Character Set\",\n+                            \"Username\": {\n+                                \"description\": \"The username used for authentication. If no username is set then anonymous authentication is attempted.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Default URL Character Set\",\n-                                \"required\": true,\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"HTTP Context Map\": {\n-                                \"description\": \"The HTTP Context Map Controller Service to use for caching the HTTP Request Information\",\n-                                \"displayName\": \"HTTP Context Map\",\n+                            \"enable-dfs\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n+                                \"displayName\": \"Enable DFS\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Context Map\",\n+                                \"name\": \"enable-dfs\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"HTTP Protocols\": {\n+                            \"smb-dialect\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"HTTP/1.1\",\n-                                        \"displayName\": \"http/1.1\",\n-                                        \"value\": \"HTTP_1_1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AUTO\",\n+                                        \"value\": \"AUTO\"\n                                     },\n                                     {\n-                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n-                                        \"displayName\": \"h2 http/1.1\",\n-                                        \"value\": \"H2_HTTP_1_1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 2.0.2\",\n+                                        \"value\": \"SMB_2_0_2\"\n                                     },\n                                     {\n-                                        \"description\": \"HTTP/2\",\n-                                        \"displayName\": \"h2\",\n-                                        \"value\": \"H2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"HTTP_1_1\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 2.1\",\n+                                        \"value\": \"SMB_2_1\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.0\",\n+                                        \"value\": \"SMB_3_0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.0.2\",\n+                                        \"value\": \"SMB_3_0_2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.1.1\",\n+                                        \"value\": \"SMB_3_1_1\"\n                                     }\n                                 ],\n-                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n-                                \"displayName\": \"HTTP Protocols\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Protocols\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The Hostname to bind to. If not specified, will bind to all hosts\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Listening Port\": {\n-                                \"defaultValue\": \"80\",\n-                                \"description\": \"The Port to listen on for incoming HTTP requests\",\n-                                \"displayName\": \"Listening Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Listening Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum Threads\": {\n-                                \"defaultValue\": \"200\",\n-                                \"description\": \"The maximum number of threads that the embedded HTTP server will use for handling requests.\",\n-                                \"displayName\": \"Maximum Threads\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Threads\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"container-queue-size\": {\n-                                \"defaultValue\": \"50\",\n-                                \"description\": \"The size of the queue for Http Request Containers\",\n-                                \"displayName\": \"Container Queue Size\",\n+                                \"defaultValue\": \"AUTO\",\n+                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n+                                \"displayName\": \"SMB Dialect\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"container-queue-size\",\n+                                \"name\": \"smb-dialect\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"multipart-read-buffer-size\": {\n-                                \"defaultValue\": \"512 KB\",\n-                                \"description\": \"The threshold size, at which the contents of an incoming file would be written to disk. Only applies for requests with Content-Type: multipart/form-data. It is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space.\",\n-                                \"displayName\": \"Multipart Read Buffer Size\",\n+                            \"timeout\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"Timeout for read and write operations.\",\n+                                \"displayName\": \"Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"multipart-read-buffer-size\",\n+                                \"name\": \"timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"multipart-request-max-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The max size of the request. Only applies for requests with Content-Type: multipart/form-data, and is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space\",\n-                                \"displayName\": \"Multipart Request Max Size\",\n+                            \"use-encryption\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n+                                \"displayName\": \"Use Encryption\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"multipart-request-max-size\",\n+                                \"name\": \"use-encryption\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"parameters-to-attributes\": {\n-                                \"description\": \"A comma-separated list of HTTP parameters or form data to output as attributes\",\n-                                \"displayName\": \"Parameters to Attributes List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameters-to-attributes\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n+                            \"org.apache.nifi.processors.smb.FetchSmb\",\n+                            \"org.apache.nifi.processors.smb.ListSmb\",\n+                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All content that is received is routed to the 'success' relationship\",\n+                                \"description\": \"All files are routed to success\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"http\",\n-                            \"https\",\n-                            \"ingress\",\n-                            \"listen\",\n-                            \"request\",\n-                            \"web service\"\n+                            \"samba, smb, cifs, files, get\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.HandleHttpRequest\",\n-                        \"typeDescription\": \"Starts an HTTP Server and listens for HTTP Requests. For each request, creates a FlowFile and transfers to 'success'. This Processor is designed to be used in conjunction with the HandleHttpResponse Processor in order to create a Web Service. In case  of a multipart request, one FlowFile is generated for each part.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.smb.GetSmbFile\",\n+                        \"typeDescription\": \"Reads file from a samba network location to FlowFiles. Use this processor instead of a cifs mounts if share access control is important. Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"An identifier that allows the HandleHttpRequest and HandleHttpResponse to coordinate which FlowFile belongs to which HTTP Request/Response.\",\n-                                \"name\": \"http.context.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type of the data, according to the HTTP Header \\\"Content-Type\\\"\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The part of the request URL that is considered the Servlet Path\",\n-                                \"name\": \"http.servlet.path\"\n-                            },\n-                            {\n-                                \"description\": \"The part of the request URL that is considered to be the Context Path\",\n-                                \"name\": \"http.context.path\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP Method that was used for the request, such as GET or POST\",\n-                                \"name\": \"http.method\"\n-                            },\n-                            {\n-                                \"description\": \"IP address/hostname of the server\",\n-                                \"name\": \"http.local.name\"\n-                            },\n-                            {\n-                                \"description\": \"Listening port of the server\",\n-                                \"name\": \"http.server.port\"\n-                            },\n-                            {\n-                                \"description\": \"The query string portion of the Request URL\",\n-                                \"name\": \"http.query.string\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname of the requestor\",\n-                                \"name\": \"http.remote.host\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname:port combination of the requestor\",\n-                                \"name\": \"http.remote.addr\"\n-                            },\n-                            {\n-                                \"description\": \"The username of the requestor\",\n-                                \"name\": \"http.remote.user\"\n-                            },\n-                            {\n-                                \"description\": \"The protocol used to communicate\",\n-                                \"name\": \"http.protocol\"\n-                            },\n-                            {\n-                                \"description\": \"The full Request URL\",\n-                                \"name\": \"http.request.uri\"\n-                            },\n-                            {\n-                                \"description\": \"The type of HTTP Authorization used\",\n-                                \"name\": \"http.auth.type\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the authenticated user making the request\",\n-                                \"name\": \"http.principal.name\"\n-                            },\n-                            {\n-                                \"description\": \"Each of query parameters in the request will be added as an attribute, prefixed with \\\"http.query.param.\\\"\",\n-                                \"name\": \"http.query.param.XXX\"\n-                            },\n-                            {\n-                                \"description\": \"Form parameters in the request that are configured by \\\"Parameters to Attributes List\\\" will be added as an attribute, prefixed with \\\"http.param.\\\". Putting form parameters of large size is not recommended.\",\n-                                \"name\": \"http.param.XXX\"\n-                            },\n-                            {\n-                                \"description\": \"The Distinguished Name of the requestor. This value will not be populated unless the Processor is configured to use an SSLContext Service\",\n-                                \"name\": \"http.subject.dn\"\n-                            },\n-                            {\n-                                \"description\": \"The Distinguished Name of the entity that issued the Subject's certificate. This value will not be populated unless the Processor is configured to use an SSLContext Service\",\n-                                \"name\": \"http.issuer.dn\"\n-                            },\n-                            {\n-                                \"description\": \"X.509 Client Certificate Subject Alternative Name value from mutual TLS authentication. The attribute name has a zero-based index ordered according to the content of Client Certificate\",\n-                                \"name\": \"http.certificate.sans.N.name\"\n-                            },\n-                            {\n-                                \"description\": \"X.509 Client Certificate Subject Alternative Name type from mutual TLS authentication. The attribute name has a zero-based index ordered according to the content of Client Certificate. The attribute value is one of the General Names from RFC 3280 Section 4.1.2.7\",\n-                                \"name\": \"http.certificate.sans.N.nameType\"\n-                            },\n-                            {\n-                                \"description\": \"Each of the HTTP Headers that is received in the request will be added as an attribute, prefixed with \\\"http.headers.\\\" For example, if the request contains an HTTP Header named \\\"x-my-header\\\", then the value will be added to an attribute named \\\"http.headers.x-my-header\\\"\",\n-                                \"name\": \"http.headers.XXX\"\n-                            },\n-                            {\n-                                \"description\": \"Each of the HTTP Headers that is received in the multipart request will be added as an attribute, prefixed with \\\"http.headers.multipart.\\\" For example, if the multipart request contains an HTTP Header named \\\"content-disposition\\\", then the value will be added to an attribute named \\\"http.headers.multipart.content-disposition\\\"\",\n-                                \"name\": \"http.headers.multipart.XXX\"\n-                            },\n-                            {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's content size is recorded into this attribute\",\n-                                \"name\": \"http.multipart.size\"\n+                                \"description\": \"The filename is set to the name of the file on the network share\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's content type is recorded into this attribute\",\n-                                \"name\": \"http.multipart.content.type\"\n+                                \"description\": \"The path is set to the relative path of the file's network share name. For example, if the input is set to \\\\\\\\hostname\\\\share\\\\tmp, files picked up from \\\\tmp will have the path attribute set to tmp\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's name is recorded into this attribute\",\n-                                \"name\": \"http.multipart.name\"\n+                                \"description\": \"The date and time that the file was created. May not work on all file systems\",\n+                                \"name\": \"file.creationTime\"\n                             },\n                             {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", when the part contains an uploaded file, the name of the file is recorded into this attribute. Files are stored temporarily at the default temporary-file directory specified in \\\"java.io.File\\\" Java Docs)\",\n-                                \"name\": \"http.multipart.filename\"\n+                                \"description\": \"The date and time that the file was last modified. May not work on all file systems\",\n+                                \"name\": \"file.lastModifiedTime\"\n                             },\n                             {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's index is recorded into this attribute. The index starts with 1.\",\n-                                \"name\": \"http.multipart.fragments.sequence.number\"\n+                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n+                                \"name\": \"file.lastAccessTime\"\n                             },\n                             {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the count of all parts is recorded into this attribute.\",\n-                                \"name\": \"http.multipart.fragments.total.number\"\n+                                \"description\": \"The full path from where a file was picked up. This includes the hostname and the share name\",\n+                                \"name\": \"absolute.path\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These HTTPHeaders are set in the HTTP Response\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"An HTTP header name\",\n-                                \"value\": \"An HTTP header value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Attributes to add to the HTTP Response (Regex)\": {\n-                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be added to the HTTP response\",\n-                                \"displayName\": \"Attributes to add to the HTTP Response (Regex)\",\n+                            \"directory\": {\n+                                \"description\": \"The network folder from which to list files. This is the remaining relative path after the share: smb://HOSTNAME:PORT/SHARE/[DIRECTORY]/sub/directories. It is also possible to add subdirectories. The given path on the remote file share must exist. This can be checked using verification. You may mix Windows and Linux-style directory separators.\",\n+                                \"displayName\": \"Input Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to add to the HTTP Response (Regex)\",\n+                                \"name\": \"directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"HTTP Context Map\": {\n-                                \"description\": \"The HTTP Context Map Controller Service to use for caching the HTTP Request Information\",\n-                                \"displayName\": \"HTTP Context Map\",\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Context Map\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"et-state-cache\": {\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"HTTP Status Code\": {\n-                                \"description\": \"The HTTP Status Code to use when responding to the HTTP Request. See Section 10 of RFC 2616 for more information.\",\n-                                \"displayName\": \"HTTP Status Code\",\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"HTTP Status Code\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-time-window\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The value of this attribute is used to lookup the HTTP Response so that the proper message can be sent back to the requestor. If this attribute is missing, the FlowFile will be routed to 'failure.'\",\n-                                \"name\": \"http.context.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"Value of the URI requested by the client. Used for provenance event.\",\n-                                \"name\": \"http.request.uri\"\n-                            },\n-                            {\n-                                \"description\": \"IP address of the client. Used for provenance event.\",\n-                                \"name\": \"http.remote.host\"\n-                            },\n-                            {\n-                                \"description\": \"IP address/hostname of the server. Used for provenance event.\",\n-                                \"name\": \"http.local.name\"\n-                            },\n-                            {\n-                                \"description\": \"Listening port of the server. Used for provenance event.\",\n-                                \"name\": \"http.server.port\"\n-                            },\n-                            {\n-                                \"description\": \"SSL distinguished name (if any). Used for provenance event.\",\n-                                \"name\": \"http.subject.dn\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.http.StandardHttpContextMap\",\n-                            \"org.apache.nifi.processors.standard.HandleHttpRequest\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles will be routed to this Relationship after the response has been successfully sent to the requestor\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"FlowFiles will be routed to this Relationship if the Processor is unable to respond to the requestor. This may happen, for instance, if the connection times out or if NiFi is restarted before responding to the HTTP Request.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"egress\",\n-                            \"http\",\n-                            \"https\",\n-                            \"response\",\n-                            \"web service\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.HandleHttpResponse\",\n-                        \"typeDescription\": \"Sends an HTTP Response to the Requestor that generated a FlowFile. This Processor is designed to be used in conjunction with the HandleHttpRequest in order to create a web service.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.attributes.UpdateAttribute\"\n-                        ],\n-                        \"deprecationReason\": \"UpdateAttribute can be configured using the hash Expression Language function to digest one or more attributes\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"This regular expression is evaluated against the flowfile attribute values. If the regular expression contains a capturing group, the value of that group will be used when comparing flow file attributes. Otherwise, the original flow file attribute's value will be used if and only if the value matches the given regular expression.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A flowfile attribute key for attribute inspection\",\n-                                \"value\": \"A Regular Expression\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Hash Value Attribute Key\": {\n-                                \"description\": \"The name of the flowfile attribute where the hash value should be stored\",\n-                                \"displayName\": \"Hash Value Attribute Key\",\n+                            \"file-name-suffix-filter\": {\n+                                \"description\": \"Files ending with the given suffix will be omitted. Can be used to make sure that files that are still uploading are not listed multiple times, by having those files have a suffix and remove the suffix once the upload finishes. This is highly recommended when using 'Tracking Entities' or 'Tracking Timestamps' listing strategies.\",\n+                                \"displayName\": \"File Name Suffix Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hash Value Attribute Key\",\n-                                \"required\": true,\n+                                \"name\": \"file-name-suffix-filter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Used for flowfiles that have a hash value added\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"Used for flowfiles that are missing required attributes\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"hash\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.HashAttribute\",\n-                        \"typeDescription\": \"Hashes together the key/value pairs of several flowfile attributes and adds the hash as a new attribute. Optional properties are to be added such that the name of the property is the name of a flowfile attribute to consider and the value of the property is a regular expression that, if matched by the attribute value, will cause that attribute to be used as part of the hash. If the regular expression contains a capturing group, only the value of the capturing group will be used. For a processor which accepts various attributes and generates a cryptographic hash of each, see \\\"CryptographicHashAttribute\\\". \",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"This Processor adds an attribute whose value is the result of Hashing the existing flowfile attributes. The name of this attribute is specified by the <Hash Value Attribute Key> property.\",\n-                                \"name\": \"<Hash Value Attribute Key>\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.standard.CryptographicHashContent\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Hash Algorithm\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1.0.10118.3.0.55\",\n-                                        \"value\": \"1.0.10118.3.0.55\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-1\",\n-                                        \"value\": \"SHA-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-384\",\n-                                        \"value\": \"SHA-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HARAKA-256\",\n-                                        \"value\": \"HARAKA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-512-256\",\n-                                        \"value\": \"SKEIN-512-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-1024-384\",\n-                                        \"value\": \"SKEIN-1024-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE3-256\",\n-                                        \"value\": \"BLAKE3-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2B-160\",\n-                                        \"value\": \"BLAKE2B-160\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA\",\n-                                        \"value\": \"SHA\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"KECCAK-288\",\n-                                        \"value\": \"KECCAK-288\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WHIRLPOOL\",\n-                                        \"value\": \"WHIRLPOOL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-512-384\",\n-                                        \"value\": \"SKEIN-512-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-224\",\n-                                        \"value\": \"SHA-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SM3\",\n-                                        \"value\": \"SM3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2B-512\",\n-                                        \"value\": \"BLAKE2B-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.1.0.10118.3.0.55\",\n-                                        \"value\": \"OID.1.0.10118.3.0.55\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TUPLEHASH128-256\",\n-                                        \"value\": \"TUPLEHASH128-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GOST3411-2012-512\",\n-                                        \"value\": \"GOST3411-2012-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"KECCAK-256\",\n-                                        \"value\": \"KECCAK-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-512-128\",\n-                                        \"value\": \"SKEIN-512-128\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2B-384\",\n-                                        \"value\": \"BLAKE2B-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHAKE256-512\",\n-                                        \"value\": \"SHAKE256-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.12\",\n-                                        \"value\": \"OID.2.16.840.1.101.3.4.2.12\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.11\",\n-                                        \"value\": \"OID.2.16.840.1.101.3.4.2.11\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-256-160\",\n-                                        \"value\": \"SKEIN-256-160\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.10\",\n-                                        \"value\": \"OID.2.16.840.1.101.3.4.2.10\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DSTU7564-256\",\n-                                        \"value\": \"DSTU7564-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2S-224\",\n-                                        \"value\": \"BLAKE2S-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA3-256\",\n-                                        \"value\": \"SHA3-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"KECCAK-384\",\n-                                        \"value\": \"KECCAK-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-256-128\",\n-                                        \"value\": \"SKEIN-256-128\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DSTU7564-384\",\n-                                        \"value\": \"DSTU7564-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HARAKA-512\",\n-                                        \"value\": \"HARAKA-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PARALLELHASH128-256\",\n-                                        \"value\": \"PARALLELHASH128-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHAKE128-256\",\n-                                        \"value\": \"SHAKE128-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"KECCAK-224\",\n-                                        \"value\": \"KECCAK-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-512-512\",\n-                                        \"value\": \"SKEIN-512-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PARALLELHASH256-512\",\n-                                        \"value\": \"PARALLELHASH256-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-1024-512\",\n-                                        \"value\": \"SKEIN-1024-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-512-160\",\n-                                        \"value\": \"SKEIN-512-160\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.1.2.804.2.1.1.1.1.2.2.3\",\n-                                        \"value\": \"OID.1.2.804.2.1.1.1.1.2.2.3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GOST3411\",\n-                                        \"value\": \"GOST3411\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1.2.804.2.1.1.1.1.2.2.3\",\n-                                        \"value\": \"1.2.804.2.1.1.1.1.2.2.3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2B-256\",\n-                                        \"value\": \"BLAKE2B-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.1.2.804.2.1.1.1.1.2.2.2\",\n-                                        \"value\": \"OID.1.2.804.2.1.1.1.1.2.2.2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-1024-1024\",\n-                                        \"value\": \"SKEIN-1024-1024\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.1.2.804.2.1.1.1.1.2.2.1\",\n-                                        \"value\": \"OID.1.2.804.2.1.1.1.1.2.2.1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA3-384\",\n-                                        \"value\": \"SHA3-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-512/224\",\n-                                        \"value\": \"SHA-512/224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.9\",\n-                                        \"value\": \"OID.2.16.840.1.101.3.4.2.9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2S-256\",\n-                                        \"value\": \"BLAKE2S-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.8\",\n-                                        \"value\": \"OID.2.16.840.1.101.3.4.2.8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.7\",\n-                                        \"value\": \"OID.2.16.840.1.101.3.4.2.7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TIGER\",\n-                                        \"value\": \"TIGER\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RIPEMD256\",\n-                                        \"value\": \"RIPEMD256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA3-224\",\n-                                        \"value\": \"SHA3-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-256-256\",\n-                                        \"value\": \"SKEIN-256-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA3-512\",\n-                                        \"value\": \"SHA3-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RIPEMD320\",\n-                                        \"value\": \"RIPEMD320\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2.16.840.1.101.3.4.2.9\",\n-                                        \"value\": \"2.16.840.1.101.3.4.2.9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RIPEMD160\",\n-                                        \"value\": \"RIPEMD160\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TUPLEHASH256-512\",\n-                                        \"value\": \"TUPLEHASH256-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GOST3411-2012-256\",\n-                                        \"value\": \"GOST3411-2012-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2.16.840.1.101.3.4.2.8\",\n-                                        \"value\": \"2.16.840.1.101.3.4.2.8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1.2.804.2.1.1.1.1.2.2.1\",\n-                                        \"value\": \"1.2.804.2.1.1.1.1.2.2.1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"KECCAK-512\",\n-                                        \"value\": \"KECCAK-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-512-224\",\n-                                        \"value\": \"SKEIN-512-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2.16.840.1.101.3.4.2.7\",\n-                                        \"value\": \"2.16.840.1.101.3.4.2.7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1.2.804.2.1.1.1.1.2.2.2\",\n-                                        \"value\": \"1.2.804.2.1.1.1.1.2.2.2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2.16.840.1.101.3.4.2.12\",\n-                                        \"value\": \"2.16.840.1.101.3.4.2.12\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2.16.840.1.101.3.4.2.10\",\n-                                        \"value\": \"2.16.840.1.101.3.4.2.10\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2.16.840.1.101.3.4.2.11\",\n-                                        \"value\": \"2.16.840.1.101.3.4.2.11\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2S-160\",\n-                                        \"value\": \"BLAKE2S-160\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-512/256\",\n-                                        \"value\": \"SHA-512/256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MD2\",\n-                                        \"value\": \"MD2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RIPEMD128\",\n-                                        \"value\": \"RIPEMD128\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MD4\",\n-                                        \"value\": \"MD4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-512\",\n-                                        \"value\": \"SHA-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-256-224\",\n-                                        \"value\": \"SKEIN-256-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2S-128\",\n-                                        \"value\": \"BLAKE2S-128\"\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DSTU7564-512\",\n-                                        \"value\": \"DSTU7564-512\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"MD5\",\n-                                \"description\": \"Determines what hashing algorithm should be used to perform the hashing function\",\n-                                \"displayName\": \"Hash Algorithm\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hash Algorithm\",\n+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hash Attribute Name\": {\n-                                \"defaultValue\": \"hash.value\",\n-                                \"description\": \"The name of the FlowFile Attribute into which the Hash Value should be written. If the value already exists, it will be overwritten\",\n-                                \"displayName\": \"Hash Attribute Name\",\n+                            \"max-file-age\": {\n+                                \"description\": \"Any file older than the given value will be omitted.\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hash Attribute Name\",\n-                                \"required\": true,\n+                                \"name\": \"max-file-age\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are process successfully will be sent to this relationship\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be processed successfully will be sent to this relationship without any attribute being added\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"MD5\",\n-                            \"SHA-1\",\n-                            \"SHA-256\",\n-                            \"content\",\n-                            \"hash\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.HashContent\",\n-                        \"typeDescription\": \"Calculates a hash value for the Content of a FlowFile and puts that hash value on the FlowFile as an attribute whose name is determined by the <Hash Attribute Name> property. This processor did not provide a consistent offering of hash algorithms, and is now deprecated. For modern cryptographic hashing capabilities, see \\\"CryptographicHashContent\\\". \",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"This Processor adds an attribute whose value is the result of Hashing the existing FlowFile content. The name of this attribute is specified by the <Hash Attribute Name> property\",\n-                                \"name\": \"<Hash Attribute Name>\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"config-body\": {\n-                                \"description\": \"Body of MIME type config file. Only one of Config File or Config Body may be used.\",\n-                                \"displayName\": \"Config Body\",\n+                            \"max-file-size\": {\n+                                \"description\": \"Any file larger than the given value will be omitted.\",\n+                                \"displayName\": \"Maximum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"config-body\",\n+                                \"name\": \"max-file-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"config-file\": {\n-                                \"description\": \"Path to MIME type config file. Only one of Config File or Config Body may be used.\",\n-                                \"displayName\": \"Config File\",\n+                            \"min-file-age\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"The minimum age that a file must be in order to be listed; any file younger than this amount of time will be ignored.\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"config-file\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"min-file-age\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"min-file-size\": {\n+                                \"description\": \"Any file smaller than the given value will be omitted.\",\n+                                \"displayName\": \"Minimum File Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"min-file-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"use-filename-in-detection\": {\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"smb-client-provider-service\": {\n+                                \"description\": \"Specifies the SMB client provider to use for creating SMB connections.\",\n+                                \"displayName\": \"SMB Client Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"smb-client-provider-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-smb-client-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"target-system-timestamp-precision\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n+                                        \"displayName\": \"Auto Detect\",\n+                                        \"value\": \"auto-detect\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n+                                        \"displayName\": \"Milliseconds\",\n+                                        \"value\": \"millis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n+                                        \"displayName\": \"Seconds\",\n+                                        \"value\": \"seconds\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that only supports precision in minutes.\",\n+                                        \"displayName\": \"Minutes\",\n+                                        \"value\": \"minutes\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true will pass the filename to Tika to aid in detection.\",\n-                                \"displayName\": \"Use Filename In Detection\",\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n+                                \"displayName\": \"Target System Timestamp Precision\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-filename-in-detection\",\n+                                \"name\": \"target-system-timestamp-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.smb.FetchSmb\",\n+                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n+                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of files, the state of the previous listing can be stored in order to list files continuously without duplication.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles are routed to success\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"MIME\",\n-                            \"bzip2\",\n-                            \"compression\",\n-                            \"file\",\n-                            \"gzip\",\n-                            \"identify\",\n-                            \"mime.type\",\n-                            \"zip\"\n+                            \"list\",\n+                            \"samba, smb, cifs, files\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.IdentifyMimeType\",\n-                        \"typeDescription\": \"Attempts to identify the MIME Type used for a FlowFile. If the MIME Type can be identified, an attribute with the name 'mime.type' is added with the value being the MIME Type. If the MIME Type cannot be determined, the value will be set to 'application/octet-stream'. In addition, the attribute 'mime.extension' will be set if a common file extension for the MIME Type is known. If the MIME Type detected is of type text/*, attempts to identify the charset used and an attribute with the name 'mime.charset' is added with the value being the charset.If both Config File and Config Body are not set, the default NiFi MIME Types will be used.\",\n+                        \"type\": \"org.apache.nifi.processors.smb.ListSmb\",\n+                        \"typeDescription\": \"Lists concrete files shared via SMB protocol. Each listed file may result in one flowfile, the metadata being written as flowfile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single flowfile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This Processor sets the FlowFile's mime.type attribute to the detected MIME Type. If unable to detect the MIME Type, the attribute's value will be set to application/octet-stream\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The name of the file that was read from filesystem.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"This Processor sets the FlowFile's mime.extension attribute to the file extension associated with the detected MIME Type. If there is no correlated extension, the attribute's value will be empty\",\n-                                \"name\": \"mime.extension\"\n+                                \"description\": \"The short name of the file that was read from filesystem.\",\n+                                \"name\": \"shortName\"\n                             },\n                             {\n-                                \"description\": \"This Processor sets the FlowFile's mime.charset attribute to the detected charset. If unable to detect the charset or the detected MIME type is not of type text/*, the attribute will not be set\",\n-                                \"name\": \"mime.charset\"\n+                                \"description\": \"The path is set to the relative path of the file's directory on the remote filesystem compared to the Share root directory. For example, for a given remote locationsmb://HOSTNAME:PORT/SHARE/DIRECTORY, and a file is being listed from smb://HOSTNAME:PORT/SHARE/DIRECTORY/sub/folder/file then the path attribute will be set to \\\"DIRECTORY/sub/folder\\\".\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The SMB URL of the share.\",\n+                                \"name\": \"serviceLocation\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file's content changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file was created in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"creationTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file was accessed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"lastAccessTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file's attributes was changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"changeTime\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file in bytes.\",\n+                                \"name\": \"size\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes allocated for the file on the server.\",\n+                                \"name\": \"allocationSize\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-smb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -107506,1546 +107532,1244 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Send request header with a key matching the Dynamic Property Key and a value created by evaluating the Attribute Expression Language set in the value of the Dynamic Property.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Header Name\",\n-                                \"value\": \"Attribute Expression Language\"\n-                            },\n-                            {\n-                                \"description\": \"When the HTTP Method is POST, dynamic properties with the property name in the form of post:form:<NAME>, where the <NAME> will be the form data name, will be used to fill out the multipart form parts.  If send message body is false, the flowfile will not be sent, but any other form data will be.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"post:form:<NAME>\",\n-                                \"value\": \"Attribute Expression Language\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Add Response Headers to Request\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of files to put in each iteration\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Conflict Resolution Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enable adding HTTP response headers as attributes to FlowFiles transferred to the Original relationship.\",\n-                                \"displayName\": \"Response Header Request Attributes Enabled\",\n+                                \"defaultValue\": \"replace\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Add Response Headers to Request\",\n-                                \"required\": false,\n+                                \"name\": \"Conflict Resolution Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Always Output Response\": {\n+                            \"Create Missing Directories\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enable generation and transfer of a FlowFile to the Response relationship regardless of HTTP response received.\",\n-                                \"displayName\": \"Response Generation Required\",\n+                                \"description\": \"If true, then missing destination directories will be created. If false, flowfiles are penalized and sent to failure.\",\n+                                \"displayName\": \"Create Missing Directories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Always Output Response\",\n+                                \"name\": \"Create Missing Directories\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Directory\": {\n+                                \"description\": \"The network folder to which files should be written. This is the remaining relative path after the share: \\\\\\\\hostname\\\\share\\\\[dir1\\\\dir2]. You may use expression language.\",\n+                                \"displayName\": \"Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Attributes to Send\": {\n-                                \"description\": \"Regular expression that defines which FlowFile attributes to send as HTTP headers in the request. If not defined, no attributes are sent as headers. Dynamic properties will be always be sent as headers. The dynamic property name will be the header key and the dynamic property value, interpreted as Expression Language, will be the header value. Attributes and their values are limited to ASCII characters due to the requirement of the HTTP protocol.\",\n-                                \"displayName\": \"Request Header Attributes Pattern\",\n+                            \"Domain\": {\n+                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n+                                \"displayName\": \"Domain\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to Send\",\n+                                \"name\": \"Domain\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Basic Authentication Password\": {\n-                                \"description\": \"The password provided for authentication of HTTP requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n-                                \"displayName\": \"Request Password\",\n+                            \"Hostname\": {\n+                                \"description\": \"The network host to which files should be written.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Basic Authentication Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Basic Authentication Username\": {\n-                                \"description\": \"The username provided for authentication of HTTP requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n-                                \"displayName\": \"Request Username\",\n+                            \"Password\": {\n+                                \"description\": \"The password used for authentication. Required if Username is set.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Basic Authentication Username\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Maximum time to wait for initial socket connection to the HTTP URL.\",\n-                                \"displayName\": \"Socket Connect Timeout\",\n+                            \"Share\": {\n+                                \"description\": \"The network share to which files should be written. This is the \\\"first folder\\\"after the hostname: \\\\\\\\hostname\\\\[share]\\\\dir1\\\\dir2\",\n+                                \"displayName\": \"Share\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"name\": \"Share\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Content-Encoding\": {\n+                            \"Share Access Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Content encoding not applied during transmission\",\n-                                        \"displayName\": \"DISABLED\",\n-                                        \"value\": \"DISABLED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"Gzip content encoding and HTTP Content-Encoding header applied during transmission\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DISABLED\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"read\",\n+                                        \"value\": \"read\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"read, delete\",\n+                                        \"value\": \"read, delete\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"read, write, delete\",\n+                                        \"value\": \"read, write, delete\"\n                                     }\n                                 ],\n-                                \"description\": \"HTTP Content-Encoding applied to request body during transmission. The receiving server must support the selected encoding to avoid request failures.\",\n-                                \"displayName\": \"Request Content-Encoding\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"Indicates which shared access are granted on the file during the write. None is the most restrictive, but the safest setting to prevent corruption.\",\n+                                \"displayName\": \"Share Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Content-Encoding\",\n+                                \"name\": \"Share Access Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Content-Type\": {\n-                                \"defaultValue\": \"${mime.type}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\n-                                    }\n-                                ],\n-                                \"description\": \"HTTP Content-Type Header applied to when sending an HTTP request body for PATCH, POST, or PUT methods. The Content-Type defaults to application/octet-stream when not configured.\",\n-                                \"displayName\": \"Request Content-Type\",\n+                            \"Temporary Suffix\": {\n+                                \"description\": \"A temporary suffix which will be apended to the filename while it's transfering. After the transfer is complete, the suffix will be removed.\",\n+                                \"displayName\": \"Temporary Suffix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Content-Type\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Temporary Suffix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Digest Authentication\": {\n+                            \"Username\": {\n+                                \"description\": \"The username used for authentication. If no username is set then anonymous authentication is attempted.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"enable-dfs\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Request Username\",\n-                                        \"propertyName\": \"Basic Authentication Username\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enable Digest Authentication on HTTP requests with Username and Password credentials as described in RFC 7616.\",\n-                                \"displayName\": \"Request Digest Authentication Enabled\",\n+                                \"description\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n+                                \"displayName\": \"Enable DFS\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Digest Authentication\",\n-                                \"required\": false,\n+                                \"name\": \"enable-dfs\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Follow Redirects\": {\n+                            \"smb-dialect\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n+                                        \"displayName\": \"AUTO\",\n+                                        \"value\": \"AUTO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"True\",\n-                                \"description\": \"Enable following HTTP redirects sent with HTTP 300 series responses as described in RFC 7231 Section 6.4.\",\n-                                \"displayName\": \"Response Redirects Enabled\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Follow Redirects\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"HTTP Method\": {\n-                                \"defaultValue\": \"GET\",\n-                                \"description\": \"HTTP request method (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS). Arbitrary methods are also supported. Methods other than POST, PUT and PATCH will be sent without a message body.\",\n-                                \"displayName\": \"HTTP Method\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"HTTP Method\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Include Date Header\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"SMB 2.0.2\",\n+                                        \"value\": \"SMB_2_0_2\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n+                                        \"displayName\": \"SMB 2.1\",\n+                                        \"value\": \"SMB_2_1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n+                                        \"displayName\": \"SMB 3.0\",\n+                                        \"value\": \"SMB_3_0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.0.2\",\n+                                        \"value\": \"SMB_3_0_2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.1.1\",\n+                                        \"value\": \"SMB_3_1_1\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"True\",\n-                                \"description\": \"Enable sending HTTP Date Header on HTTP requests as described in RFC 7231 Section 7.1.1.2.\",\n-                                \"displayName\": \"Request Date Header Enabled\",\n+                                \"defaultValue\": \"AUTO\",\n+                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n+                                \"displayName\": \"SMB Dialect\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Date Header\",\n+                                \"name\": \"smb-dialect\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Length To Put In Attribute\": {\n-                                \"defaultValue\": \"256\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Response Body Attribute Name\",\n-                                        \"propertyName\": \"Put Response Body In Attribute\"\n-                                    }\n-                                ],\n-                                \"description\": \"Maximum size in bytes applied when writing an HTTP response body to a FlowFile attribute. Attributes exceeding the maximum will be truncated.\",\n-                                \"displayName\": \"Response Body Attribute Size\",\n+                            \"timeout\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"Timeout for read and write operations.\",\n+                                \"displayName\": \"Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Length To Put In Attribute\",\n-                                \"required\": false,\n+                                \"name\": \"timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Penalize on \\\"No Retry\\\"\": {\n+                            \"use-encryption\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enable penalization of request FlowFiles when receiving HTTP response with a status code between 400 and 499.\",\n-                                \"displayName\": \"Request Failure Penalization Enabled\",\n+                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n+                                \"displayName\": \"Use Encryption\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Penalize on \\\"No Retry\\\"\",\n-                                \"required\": false,\n+                                \"name\": \"use-encryption\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The filename to use when writing the FlowFile to the network folder.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.smb.FetchSmb\",\n+                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n+                            \"org.apache.nifi.processors.smb.ListSmb\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Files that have been successfully written to the output network path are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Proxy Host\": {\n-                                \"description\": \"Proxy Host and dependent properties are deprecated in favor of Proxy Configuration Service. Proxy Host can be configured using an IP address or DNS address.\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n+                            {\n+                                \"description\": \"Files that could not be written to the output network path for some reason are transferred to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"samba, smb, cifs, files, put\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.smb.PutSmbFile\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to a samba network location. Use this processor instead of a cifs mounts if share access control is important.Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-azure-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a Request Header in the Elasticsearch requests.\",\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Port\": {\n+                                \"name\": \"The name of a Request Header to add\",\n+                                \"value\": \"The value of the Header\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"api-key\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Proxy Host\",\n-                                        \"propertyName\": \"Proxy Host\"\n+                                        \"dependentValues\": [\n+                                            \"API_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Scheme\",\n+                                        \"propertyName\": \"authorization-scheme\"\n                                     }\n                                 ],\n-                                \"description\": \"Proxy Port and dependent properties are deprecated in favor of Proxy Configuration Service. Port number for the configured Proxy Host address.\",\n-                                \"displayName\": \"Proxy Port\",\n+                                \"description\": \"Encoded API key.\",\n+                                \"displayName\": \"API Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"api-key\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Proxy Type\": {\n-                                \"defaultValue\": \"http\",\n+                            \"api-key-id\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Proxy Host\",\n-                                        \"propertyName\": \"Proxy Host\"\n+                                        \"dependentValues\": [\n+                                            \"API_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Scheme\",\n+                                        \"propertyName\": \"authorization-scheme\"\n                                     }\n                                 ],\n-                                \"description\": \"Proxy Type and dependent properties are deprecated in favor of Proxy Configuration Service. Proxy protocol type is not used\",\n-                                \"displayName\": \"Proxy Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Put Response Body In Attribute\": {\n-                                \"description\": \"FlowFile attribute name used to write an HTTP response body for FlowFiles transferred to the Original relationship.\",\n-                                \"displayName\": \"Response Body Attribute Name\",\n+                                \"description\": \"Unique identifier of the API key.\",\n+                                \"displayName\": \"API Key ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Put Response Body In Attribute\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"api-key-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Read Timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Maximum time to wait for receiving responses from a socket connection to the HTTP URL.\",\n-                                \"displayName\": \"Socket Read Timeout\",\n+                            \"authorization-scheme\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"No authorization scheme.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Mutual TLS with PKI certificate authorization scheme.\",\n+                                        \"displayName\": \"PKI\",\n+                                        \"value\": \"PKI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Basic authorization scheme.\",\n+                                        \"displayName\": \"Basic\",\n+                                        \"value\": \"BASIC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"API key authorization scheme.\",\n+                                        \"displayName\": \"API Key\",\n+                                        \"value\": \"API_KEY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"BASIC\",\n+                                \"description\": \"Authorization Scheme used for optional authentication to Elasticsearch.\",\n+                                \"displayName\": \"Authorization Scheme\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Read Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote URL\": {\n-                                \"description\": \"HTTP remote URL including a scheme of http or https, as well as a hostname or IP address with optional port and path elements. Any encoding of the URL must be done by the user.\",\n-                                \"displayName\": \"HTTP URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote URL\",\n+                                \"name\": \"authorization-scheme\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"SSL Context Service provides trusted certificates and client certificates for TLS communication.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"el-cs-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The charset to use for interpreting the response from Elasticsearch.\",\n+                                \"displayName\": \"Charset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"el-cs-charset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Socket Write Timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Maximum time to wait for write operations while sending requests from a socket connection to the HTTP URL.\",\n-                                \"displayName\": \"Socket Write Timeout\",\n+                            \"el-cs-connect-timeout\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when trying to connect.\",\n+                                \"displayName\": \"Connect timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Socket Write Timeout\",\n+                                \"name\": \"el-cs-connect-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Chunked Encoding\": {\n+                            \"el-cs-enable-compression\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enable sending HTTP requests with the Transfer-Encoding Header set to chunked, and disable sending the Content-Length Header. Transfer-Encoding applies to the body in HTTP/1.1 requests as described in RFC 7230 Section 3.3.1\",\n-                                \"displayName\": \"Request Chunked Transfer-Encoding Enabled\",\n+                                \"description\": \"Whether the REST client should compress requests using gzip content encoding and add the \\\"Accept-Encoding: gzip\\\" header to receive compressed responses\",\n+                                \"displayName\": \"Enable Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Chunked Encoding\",\n+                                \"name\": \"el-cs-enable-compression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Useragent\": {\n-                                \"description\": \"HTTP User-Agent Header applied to requests. RFC 7231 Section 5.5.3 describes recommend formatting.\",\n-                                \"displayName\": \"Request User-Agent\",\n+                            \"el-cs-http-hosts\": {\n+                                \"description\": \"A comma-separated list of HTTP hosts that host Elasticsearch query nodes. Note that the Host is included in requests as a header (typically including domain and port, e.g. elasticsearch:9200).\",\n+                                \"displayName\": \"HTTP Hosts\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Useragent\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"el-cs-http-hosts\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cookie-strategy\": {\n+                            \"el-cs-node-selector\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DISABLED\",\n-                                        \"value\": \"DISABLED\"\n+                                        \"description\": \"Select any Elasticsearch node to handle requests\",\n+                                        \"displayName\": \"Any\",\n+                                        \"value\": \"ANY\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ACCEPT_ALL\",\n-                                        \"value\": \"ACCEPT_ALL\"\n+                                        \"description\": \"Skip dedicated Elasticsearch master nodes for handling request\",\n+                                        \"displayName\": \"Skip Dedicated Masters\",\n+                                        \"value\": \"SKIP_DEDICATED_MASTERS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DISABLED\",\n-                                \"description\": \"Strategy for accepting and persisting HTTP cookies. Accepting cookies enables persistence across multiple requests.\",\n-                                \"displayName\": \"Response Cookie Strategy\",\n+                                \"defaultValue\": \"ANY\",\n+                                \"description\": \"Selects Elasticsearch nodes that can receive requests. Used to keep requests away from dedicated Elasticsearch master nodes\",\n+                                \"displayName\": \"Node Selector\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cookie-strategy\",\n+                                \"name\": \"el-cs-node-selector\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"disable-http2\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n-                                    },\n+                            \"el-cs-password\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Scheme\",\n+                                        \"propertyName\": \"authorization-scheme\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"False\",\n-                                \"description\": \"Disable negotiation of HTTP/2 protocol. HTTP/2 requires TLS. HTTP/1.1 protocol supported is required when HTTP/2 is disabled.\",\n-                                \"displayName\": \"HTTP/2 Disabled\",\n+                                \"description\": \"The password to use with XPack security.\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"el-cs-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"el-cs-path-prefix\": {\n+                                \"description\": \"Sets the path's prefix for every request used by the http client. For example, if this is set to \\\"/my/path\\\", then any client request will become \\\"/my/path/\\\" + endpoint. In essence, every request's endpoint is prefixed by this pathPrefix. The path prefix is useful for when Elasticsearch is behind a proxy that provides a base path or a proxy that requires all paths to start with '/'; it is not intended for other purposes and it should not be supplied in other scenarios\",\n+                                \"displayName\": \"Path Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"disable-http2\",\n-                                \"required\": true,\n+                                \"name\": \"el-cs-path-prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"etag-max-cache-size\": {\n-                                \"defaultValue\": \"10MB\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Response Cache Enabled\",\n-                                        \"propertyName\": \"use-etag\"\n-                                    }\n-                                ],\n-                                \"description\": \"Maximum size of HTTP response cache in bytes. Caching responses considers ETag and other headers.\",\n-                                \"displayName\": \"Response Cache Size\",\n+                            \"el-cs-retry-timeout\": {\n+                                \"defaultValue\": \"60000\",\n+                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when retrying the operation.\",\n+                                \"displayName\": \"Retry timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"etag-max-cache-size\",\n+                                \"name\": \"el-cs-retry-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"flow-file-naming-strategy\": {\n+                            \"el-cs-send-meta-header\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"FlowFile filename attribute will be a random value.\",\n-                                        \"displayName\": \"RANDOM\",\n-                                        \"value\": \"RANDOM\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile filename attribute will be extracted from the remote URL path. The attribute may contain URL encoded characters. If the path doesn't exist, the attribute will be a random value.\",\n-                                        \"displayName\": \"URL_PATH\",\n-                                        \"value\": \"URL_PATH\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"RANDOM\",\n-                                \"description\": \"Determines the strategy used for setting the filename attribute of FlowFiles transferred to the Response relationship.\",\n-                                \"displayName\": \"Response FlowFile Naming Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to send a \\\"X-Elastic-Client-Meta\\\" header that describes the runtime environment. It contains information that is similar to what could be found in User-Agent. Using a separate header allows applications to use User-Agent for their own needs, e.g. to identify application version or other environment information\",\n+                                \"displayName\": \"Send Meta Header\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"flow-file-naming-strategy\",\n+                                \"name\": \"el-cs-send-meta-header\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"form-body-form-name\": {\n-                                \"dependencies\": [\n+                            \"el-cs-sniff-cluster-nodes\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Request Body Enabled\",\n-                                        \"propertyName\": \"send-message-body\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Enable sending HTTP request body formatted using multipart/form-data and using the form name configured.\",\n-                                \"displayName\": \"Request Multipart Form-Data Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"form-body-form-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"idle-timeout\": {\n-                                \"defaultValue\": \"5 mins\",\n-                                \"description\": \"Maximum time to wait before closing idle connections to the HTTP URL.\",\n-                                \"displayName\": \"Socket Idle Timeout\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Periodically sniff for nodes within the Elasticsearch cluster via the Elasticsearch Node Info API. If Elasticsearch security features are enabled (default to \\\"true\\\" for 8.x+), the Elasticsearch user must have the \\\"monitor\\\" or \\\"manage\\\" cluster privilege to use this API.Note that all HTTP Hosts (and those that may be discovered within the cluster using the Sniffer) must use the same protocol, e.g. http or https, and be contactable using the same client settings. Finally the Elasticsearch \\\"network.publish_host\\\" must match one of the \\\"network.bind_host\\\" list entries see https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html for more information\",\n+                                \"displayName\": \"Sniff Cluster Nodes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"idle-timeout\",\n+                                \"name\": \"el-cs-sniff-cluster-nodes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ignore-response-content\": {\n+                            \"el-cs-sniff-failure\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Disable writing HTTP response FlowFiles to Response relationship\",\n-                                \"displayName\": \"Response Body Ignored\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n+                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enable sniffing on failure, meaning that after each failure the Elasticsearch nodes list gets updated straightaway rather than at the following ordinary sniffing round\",\n+                                \"displayName\": \"Sniff on Failure\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ignore-response-content\",\n+                                \"name\": \"el-cs-sniff-failure\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"invokehttp-proxy-password\": {\n+                            \"el-cs-sniffer-failure-delay\": {\n+                                \"defaultValue\": \"1 min\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Proxy Host\",\n-                                        \"propertyName\": \"Proxy Host\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sniff on Failure\",\n+                                        \"propertyName\": \"el-cs-sniff-failure\"\n                                     }\n                                 ],\n-                                \"description\": \"Proxy Password and dependent properties are deprecated in favor of Proxy Configuration Service. Password to set when authenticating with a Proxy server.\",\n-                                \"displayName\": \"Proxy Password\",\n+                                \"description\": \"Delay between an Elasticsearch request failure and updating available Cluster nodes using the Sniffer\",\n+                                \"displayName\": \"Sniffer Failure Delay\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"invokehttp-proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-sniffer-failure-delay\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"invokehttp-proxy-user\": {\n+                            \"el-cs-sniffer-interval\": {\n+                                \"defaultValue\": \"5 mins\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Proxy Host\",\n-                                        \"propertyName\": \"Proxy Host\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n+                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n                                     }\n                                 ],\n-                                \"description\": \"Proxy Username and dependent properties are deprecated in favor of Proxy Configuration Service. Username to set when authenticating with a Proxy server.\",\n-                                \"displayName\": \"Proxy Username\",\n+                                \"description\": \"Interval between Cluster sniffer operations\",\n+                                \"displayName\": \"Sniffer Interval\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"invokehttp-proxy-user\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-sniffer-interval\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-idle-connections\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"Maximum number of idle connections to the HTTP URL.\",\n-                                \"displayName\": \"Socket Idle Connections\",\n+                            \"el-cs-sniffer-request-timeout\": {\n+                                \"defaultValue\": \"1 sec\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n+                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n+                                    }\n+                                ],\n+                                \"description\": \"Cluster sniffer timeout for node info requests\",\n+                                \"displayName\": \"Sniffer Request Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-idle-connections\",\n+                                \"name\": \"el-cs-sniffer-request-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"oauth2-access-token-provider\": {\n-                                \"description\": \"Enables managed retrieval of OAuth2 Bearer Token applied to HTTP requests using the Authorization Header.\",\n-                                \"displayName\": \"Request OAuth2 Access Token Provider\",\n+                            \"el-cs-socket-timeout\": {\n+                                \"defaultValue\": \"60000\",\n+                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when waiting for a response.\",\n+                                \"displayName\": \"Read timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"el-cs-socket-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"el-cs-ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"el-cs-ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"send-message-body\": {\n+                            \"el-cs-strict-deprecation\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enable sending HTTP request body for PATCH, POST, or PUT methods.\",\n-                                \"displayName\": \"Request Body Enabled\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether the REST client should return any response containing at least one warning header as a failure\",\n+                                \"displayName\": \"Strict Deprecation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"send-message-body\",\n-                                \"required\": false,\n+                                \"name\": \"el-cs-strict-deprecation\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"set-form-filename\": {\n+                            \"el-cs-suppress-nulls\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null/empty, will be written out as a null/empty value\",\n+                                        \"displayName\": \"Never Suppress\",\n+                                        \"value\": \"never-suppress\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Request Multipart Form-Data Name\",\n-                                        \"propertyName\": \"form-body-form-name\"\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null/empty, will not be written out\",\n+                                        \"displayName\": \"Always Suppress\",\n+                                        \"value\": \"always-suppress\"\n                                     }\n                                 ],\n-                                \"description\": \"Enable sending the FlowFile filename attribute as the filename parameter in the Content-Disposition Header for multipart/form-data HTTP requests.\",\n-                                \"displayName\": \"Request Multipart Form-Data Filename Enabled\",\n+                                \"defaultValue\": \"always-suppress\",\n+                                \"description\": \"Specifies how the writer should handle null and empty fields (including objects and arrays)\",\n+                                \"displayName\": \"Suppress Null/Empty Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"set-form-filename\",\n-                                \"required\": false,\n+                                \"name\": \"el-cs-suppress-nulls\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-etag\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"el-cs-username\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Scheme\",\n+                                        \"propertyName\": \"authorization-scheme\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enable HTTP response caching described in RFC 7234. Caching responses considers ETag and other headers.\",\n-                                \"displayName\": \"Response Cache Enabled\",\n+                                \"description\": \"The username to use with XPack security.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"el-cs-username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-etag\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n-                                \"name\": \"Original\"\n-                            },\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n-                                \"name\": \"Failure\"\n-                            },\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 500 and 599.\",\n-                                \"name\": \"Retry\"\n-                            },\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 400 an 499.\",\n-                                \"name\": \"No Retry\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n-                                \"name\": \"Response\"\n+                                \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n                             \"client\",\n-                            \"http\",\n-                            \"https\",\n-                            \"rest\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.InvokeHTTP\",\n-                        \"typeDescription\": \"An HTTP client processor which can interact with a configurable HTTP Endpoint. The destination URL and HTTP Method are configurable. When the HTTP Method is PUT, POST or PATCH, the FlowFile contents are included as the body of the request and FlowFile attributes are converted to HTTP headers, optionally, based on configuration properties.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The status code that is returned\",\n-                                \"name\": \"invokehttp.status.code\"\n-                            },\n-                            {\n-                                \"description\": \"The status message that is returned\",\n-                                \"name\": \"invokehttp.status.message\"\n-                            },\n-                            {\n-                                \"description\": \"In the instance where the status code received is not a success (2xx) then the response body will be put to the 'invokehttp.response.body' attribute of the request FlowFile.\",\n-                                \"name\": \"invokehttp.response.body\"\n-                            },\n-                            {\n-                                \"description\": \"The original request URL\",\n-                                \"name\": \"invokehttp.request.url\"\n-                            },\n-                            {\n-                                \"description\": \"Duration (in milliseconds) of the HTTP call to the external endpoint\",\n-                                \"name\": \"invokehttp.request.duration\"\n-                            },\n-                            {\n-                                \"description\": \"The URL that was ultimately requested after any redirects were followed\",\n-                                \"name\": \"invokehttp.response.url\"\n-                            },\n-                            {\n-                                \"description\": \"The transaction ID that is returned after reading the response\",\n-                                \"name\": \"invokehttp.tx.id\"\n-                            },\n-                            {\n-                                \"description\": \"The DN of the remote server\",\n-                                \"name\": \"invokehttp.remote.dn\"\n-                            },\n-                            {\n-                                \"description\": \"The Java exception class raised when the processor fails\",\n-                                \"name\": \"invokehttp.java.exception.class\"\n-                            },\n-                            {\n-                                \"description\": \"The Java exception message raised when the processor fails\",\n-                                \"name\": \"invokehttp.java.exception.message\"\n-                            },\n-                            {\n-                                \"description\": \"If the 'Put Response Body In Attribute' property is set then whatever it is set to will become the attribute key and the value would be the body of the HTTP response.\",\n-                                \"name\": \"user-defined\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientServiceImpl\",\n+                        \"typeDescription\": \"A controller service for accessing an Elasticsearch client. Uses the Elasticsearch REST Client (7.13.4, the last version before client connections verifythe server is Elastic provided, this should allow for connections to compatible alternatives, e.g. AWS OpenSearch)\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Retrieves an object using JSONPath from the result document and places it in the return Record at the specified Record Path.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A JSONPath expression\",\n+                                \"value\": \"A Record Path expression\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Enrichment Record Reader\": {\n-                                \"description\": \"The Record Reader for reading the 'enrichment' FlowFile\",\n-                                \"displayName\": \"Enrichment Record Reader\",\n+                            \"el-lookup-index\": {\n+                                \"description\": \"The name of the index to read from\",\n+                                \"displayName\": \"Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"el-lookup-index\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-lookup-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching)\",\n+                                \"displayName\": \"Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"el-lookup-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An ElasticSearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enrichment Record Reader\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Insertion Record Path\": {\n-                                \"defaultValue\": \"/\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Insert Enrichment Fields\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Join Strategy\",\n-                                        \"propertyName\": \"Join Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies where in the 'original' Record the 'enrichment' Record's fields should be inserted. Note that if the RecordPath does not point to any existing field in the original Record, the enrichment will not be inserted.\",\n-                                \"displayName\": \"Insertion Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Insertion Record Path\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Join Strategy\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The output is a Record that contains two fields: (1) 'original', containing the Record from the original FlowFile and (2) 'enrichment' containing the corresponding Record from the enrichment FlowFile. Records will be correlated based on their index in the FlowFile. If one FlowFile has more Records than the other, a null value will be used.\",\n-                                        \"displayName\": \"Wrapper\",\n-                                        \"value\": \"Wrapper\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"The output is derived by evaluating a SQL SELECT statement that allows for two tables: 'original' and 'enrichment'. This allows for SQL JOIN statements to be used in order to correlate the Records of the two FlowFiles, so the index in which the Record is encountered in the FlowFile does not matter.\",\n-                                        \"displayName\": \"SQL\",\n-                                        \"value\": \"SQL\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     },\n                                     {\n-                                        \"description\": \"The enrichment is joined together with the original FlowFile by placing all fields of the enrichment Record into the corresponding Record from the original FlowFile. Records will be correlated based on their index in the FlowFile.\",\n-                                        \"displayName\": \"Insert Enrichment Fields\",\n-                                        \"value\": \"Insert Enrichment Fields\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Infer from Result\",\n+                                        \"value\": \"infer\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Wrapper\",\n-                                \"description\": \"Specifies how to join the two FlowFiles into a single FlowFile\",\n-                                \"displayName\": \"Join Strategy\",\n+                                \"defaultValue\": \"infer\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Join Strategy\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum number of Bins\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time\",\n-                                \"displayName\": \"Maximum number of Bins\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum number of Bins\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Original Record Reader\": {\n-                                \"description\": \"The Record Reader for reading the 'original' FlowFile\",\n-                                \"displayName\": \"Original Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Original Record Reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for writing the results. If the Record Writer is configured to inherit the schema from the Record, the schema that it will inherit will be the result of merging both the 'original' record schema and the 'enrichment' record schema.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"SQL\": {\n-                                \"defaultValue\": \"SELECT original.*, enrichment.* \\nFROM original \\nLEFT OUTER JOIN enrichment \\nON original.id = enrichment.id\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SQL\"\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Join Strategy\",\n-                                        \"propertyName\": \"Join Strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The SQL SELECT statement to evaluate. Expression Language may be provided, but doing so may result in poorer performance. Because this Processor is dealing with two FlowFiles at a time, it's also important to understand how attributes will be referenced. If both FlowFiles have an attribute with the same name but different values, the Expression Language will resolve to the value provided by the 'enrichment' FlowFile.\",\n-                                \"displayName\": \"SQL\",\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SQL\",\n-                                \"required\": true,\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 min\",\n-                                \"description\": \"Specifies the maximum amount of time to wait for the second FlowFile once the first arrives at the processor, after which point the first FlowFile will be routed to the 'timeout' relationship.\",\n-                                \"displayName\": \"Timeout\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SQL\"\n+                                            \"schema-text-property\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Join Strategy\",\n-                                        \"propertyName\": \"Join Strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n+                            \"schema-version\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SQL\"\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Join Strategy\",\n-                                        \"propertyName\": \"Join Strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ForkEnrichment\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If one of the incoming FlowFiles (i.e., the 'original' FlowFile or the 'enrichment' FlowFile) arrives to this Processor but the other does not arrive within the configured Timeout period, the FlowFile that did arrive is routed to this relationship.\",\n-                                \"name\": \"timeout\"\n-                            },\n-                            {\n-                                \"description\": \"The resultant FlowFile with Records joined together from both the original and enrichment FlowFiles will be routed to this relationship\",\n-                                \"name\": \"joined\"\n-                            },\n-                            {\n-                                \"description\": \"If both the 'original' and 'enrichment' FlowFiles arrive at the processor but there was a failure in joining the records, both of those FlowFiles will be routed to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Both of the incoming FlowFiles ('original' and 'enrichment') will be routed to this Relationship. I.e., this is the 'original' version of both of these FlowFiles.\",\n-                                \"name\": \"original\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"This Processor will load into heap all FlowFiles that are on its incoming queues. While it loads the FlowFiles themselves, and not their content, the FlowFile attributes can be very memory intensive. Additionally, if the Join Strategy is set to SQL, the SQL engine may require buffering the entire contents of the enrichment FlowFile for each concurrent task. See Processor's Additional Details for more details and for steps on how to mitigate these concerns.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"combine\",\n-                            \"enrichment\",\n-                            \"fork\",\n-                            \"join\",\n-                            \"merge\",\n-                            \"record\",\n-                            \"recordpath\",\n-                            \"sql\",\n-                            \"streams\",\n-                            \"wrap\"\n+                            \"elasticsearch\",\n+                            \"enrich\",\n+                            \"lookup\",\n+                            \"record\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.JoinEnrichment\",\n-                        \"typeDescription\": \"Joins together Records from two different FlowFiles where one FlowFile, the 'original' contains arbitrary records and the second FlowFile, the 'enrichment' contains additional data that should be used to enrich the first. See Additional Details for more information on how to configure this processor and the different use cases that it aims to accomplish.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchLookupService\",\n+                        \"typeDescription\": \"Lookup a record from Elasticsearch Server associated with the specified document ID. The coordinates that are passed to the lookup must contain the key 'id'.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Max String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n-                                \"displayName\": \"Max String Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max String Length\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Transform Cache Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Compiling a Jolt Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n-                                \"displayName\": \"Transform Cache Size\",\n+                            \"el-lookup-index\": {\n+                                \"description\": \"The name of the index to read from\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transform Cache Size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"el-lookup-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"jolt-custom-class\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Transformation DSL\",\n-                                        \"propertyName\": \"jolt-transform\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fully Qualified Class Name for Custom Transformation\",\n-                                \"displayName\": \"Custom Transformation Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"jolt-custom-class\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"jolt-custom-modules\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Transformation DSL\",\n-                                        \"propertyName\": \"jolt-transform\"\n-                                    }\n-                                ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules containing custom transformations (that are not included on NiFi's classpath).\",\n-                                \"displayName\": \"Custom Module Directory\",\n+                            \"el-lookup-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching)\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"jolt-custom-modules\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"jolt-spec\": {\n-                                \"description\": \"Jolt Specification for transformation of JSON data. The value for this property may be the text of a Jolt specification or the path to a file containing a Jolt specification. 'Jolt Specification' must be set, or the value is ignored if the Jolt Sort Transformation is selected.\",\n-                                \"displayName\": \"Jolt Specification\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"jolt-spec\",\n+                                \"name\": \"el-lookup-type\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"jolt-transform\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Change the cardinality of input elements to create the output JSON.\",\n-                                        \"displayName\": \"Cardinality\",\n-                                        \"value\": \"jolt-transform-card\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Execute list of Jolt transformations.\",\n-                                        \"displayName\": \"Chain\",\n-                                        \"value\": \"jolt-transform-chain\"\n-                                    },\n-                                    {\n-                                        \"description\": \" Apply default values to the output JSON.\",\n-                                        \"displayName\": \"Default\",\n-                                        \"value\": \"jolt-transform-default\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Writes when key is missing or value is null\",\n-                                        \"displayName\": \"Modify - Default\",\n-                                        \"value\": \"jolt-transform-modify-default\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Writes when key is missing\",\n-                                        \"displayName\": \"Modify - Define\",\n-                                        \"value\": \"jolt-transform-modify-define\"\n-                                    },\n-                                    {\n-                                        \"description\": \" Always overwrite value\",\n-                                        \"displayName\": \"Modify - Overwrite\",\n-                                        \"value\": \"jolt-transform-modify-overwrite\"\n-                                    },\n-                                    {\n-                                        \"description\": \" Remove values from input data to create the output JSON.\",\n-                                        \"displayName\": \"Remove\",\n-                                        \"value\": \"jolt-transform-remove\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Shift input JSON/data to create the output JSON.\",\n-                                        \"displayName\": \"Shift\",\n-                                        \"value\": \"jolt-transform-shift\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Sort input json key values alphabetically. Any specification set is ignored.\",\n-                                        \"displayName\": \"Sort\",\n-                                        \"value\": \"jolt-transform-sort\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Custom Transformation. Requires Custom Transformation Class Name\",\n-                                        \"displayName\": \"Custom\",\n-                                        \"value\": \"jolt-transform-custom\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"jolt-transform-chain\",\n-                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n-                                \"displayName\": \"Jolt Transformation DSL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jolt-transform\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"pretty_print\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Apply pretty print formatting to the output of the Jolt transform\",\n-                                \"displayName\": \"Pretty Print\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An ElasticSearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"pretty_print\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.27.0\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cardinality\",\n-                            \"chainr\",\n-                            \"defaultr\",\n-                            \"jolt\",\n-                            \"json\",\n-                            \"removr\",\n-                            \"shiftr\",\n-                            \"sort\",\n-                            \"transform\"\n+                            \"elasticsearch\",\n+                            \"enrich\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"value\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.JoltTransformJSON\",\n-                        \"typeDescription\": \"Applies a list of Jolt specifications to the flowfile JSON payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the JSON transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Always set to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchStringLookupService\",\n+                        \"typeDescription\": \"Lookup a string value from Elasticsearch Server associated with the specified document ID. The coordinates that are passed to the lookup must contain the key 'id'.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-dropbox-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-dropbox-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"list-db-include-count\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to include the table's row count as a flow file attribute. This affects performance as a database query will be generated for each table in the retrieved list.\",\n-                                \"displayName\": \"Include Count\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-include-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-refresh-interval\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The amount of time to elapse before resetting the processor state, thereby causing all current tables to be listed. During this interval, the processor may continue to run, but tables that have already been listed will not be re-listed. However new/added tables will be listed as the processor runs. A value of zero means the state will never be automatically reset, the user must Clear State manually.\",\n-                                \"displayName\": \"Refresh Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-refresh-interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-tables-catalog\": {\n-                                \"description\": \"The name of a catalog from which to list database tables. The name must match the catalog name as it is stored in the database. If the property is not set, the catalog name will not be used to narrow the search for tables. If the property is set to an empty string, tables without a catalog will be listed.\",\n-                                \"displayName\": \"Catalog\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-catalog\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-tables-db-connection\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"dropbox-credential-service\": {\n+                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n+                                \"displayName\": \"Dropbox Credential Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-db-connection\",\n+                                \"name\": \"dropbox-credential-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"list-db-tables-name-pattern\": {\n-                                \"description\": \"A pattern for matching tables in the database. Within a pattern, \\\"%\\\" means match any substring of 0 or more characters, and \\\"_\\\" means match any one character. The pattern must match the table name as it is stored in the database. If the property is not set, all tables will be retrieved.\",\n-                                \"displayName\": \"Table Name Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-name-pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-tables-schema-pattern\": {\n-                                \"description\": \"A pattern for matching schemas in the database. Within a pattern, \\\"%\\\" means match any substring of 0 or more characters, and \\\"_\\\" means match any one character. The pattern must match the schema name as it is stored in the database. If the property is not set, the schema name will not be used to narrow the search for tables. If the property is set to an empty string, tables without a schema will be listed.\",\n-                                \"displayName\": \"Schema Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-schema-pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-tables-types\": {\n-                                \"defaultValue\": \"TABLE\",\n-                                \"description\": \"A comma-separated list of table types to include. For example, some databases support TABLE and VIEW types. If the property is not set, tables of all types will be returned.\",\n-                                \"displayName\": \"Table Types\",\n+                            \"file\": {\n+                                \"defaultValue\": \"${dropbox.id}\",\n+                                \"description\": \"The Dropbox identifier or path of the Dropbox file to fetch. The 'File' should match the following regular expression pattern: /.*|id:.* . When ListDropbox is used for input, either '${dropbox.id}' (identifying files by Dropbox id) or '${path}/${filename}' (identifying files by path) can be used as 'File' value.\",\n+                                \"displayName\": \"File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-types\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.dropbox.ListDropbox\",\n+                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n+                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of tables, the timestamp of the query is stored. This allows the Processor to not re-list tables the next time that the Processor is run. Specifying the refresh interval in the processor properties will indicate that when the processor detects the interval has elapsed, the state will be reset and tables will be re-listed as a result. This processor is meant to be run on the primary node only.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"list\",\n-                            \"sql\",\n-                            \"table\"\n+                            \"dropbox\",\n+                            \"fetch\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListDatabaseTables\",\n-                        \"typeDescription\": \"Generates a set of flow files, each containing attributes corresponding to metadata about a table from a database connection. Once metadata about a table has been fetched, it will not be fetched again until the Refresh Interval (if set) has elapsed, or until state has been manually cleared.\",\n+                        \"type\": \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n+                        \"typeDescription\": \"Fetches files from Dropbox. Designed to be used in tandem with ListDropbox.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Contains the name of a database table from the connection\",\n-                                \"name\": \"db.table.name\"\n+                                \"description\": \"The error message returned by Dropbox\",\n+                                \"name\": \"error.message\"\n                             },\n                             {\n-                                \"description\": \"Contains the name of the catalog to which the table belongs (may be null)\",\n-                                \"name\": \"db.table.catalog\"\n+                                \"description\": \"The Dropbox identifier of the file\",\n+                                \"name\": \"dropbox.id\"\n                             },\n                             {\n-                                \"description\": \"Contains the name of the schema to which the table belongs (may be null)\",\n-                                \"name\": \"db.table.schema\"\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"Contains the fully-qualifed table name (possibly including catalog, schema, etc.)\",\n-                                \"name\": \"db.table.fullname\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Contains the type of the database table from the connection. Typical types are \\\"TABLE\\\", \\\"VIEW\\\", \\\"SYSTEM TABLE\\\", \\\"GLOBAL TEMPORARY\\\", \\\"LOCAL TEMPORARY\\\", \\\"ALIAS\\\", \\\"SYNONYM\\\"\",\n-                                \"name\": \"db.table.type\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"dropbox.size\"\n                             },\n                             {\n-                                \"description\": \"Contains the name of a database table from the connection\",\n-                                \"name\": \"db.table.remarks\"\n+                                \"description\": \"The server modified time of the file\",\n+                                \"name\": \"dropbox.timestamp\"\n                             },\n                             {\n-                                \"description\": \"Contains the number of rows in the table\",\n-                                \"name\": \"db.table.count\"\n+                                \"description\": \"Revision of the file\",\n+                                \"name\": \"dropbox.revision\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-dropbox-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -109057,330 +108781,72 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Connection Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"dropbox-credential-service\": {\n+                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n+                                \"displayName\": \"Dropbox Credential Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n+                                \"name\": \"dropbox-credential-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"NOTE: This property is used merely for migration from old NiFi version before state management was introduced at version 0.5.0. The stored value in the cache service will be migrated into the state when this processor is started at the first time. The specified Controller Service was used to maintain state about what had been pulled from the remote server so that if a new node begins pulling data, it won't duplicate all of the work that has been done. If not specified, the information was not shared across the cluster. This property did not need to be set for standalone instances of NiFi but was supposed to be configured if NiFi had been running within a cluster.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore Dotted Files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Internal Buffer Size\": {\n-                                \"defaultValue\": \"16KB\",\n-                                \"description\": \"Set the internal buffer size for buffered data streams\",\n-                                \"displayName\": \"Internal Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Internal Buffer Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Path Filter Regex\": {\n-                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n-                                \"displayName\": \"Path Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter Regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"21\",\n-                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Path\": {\n-                                \"defaultValue\": \".\",\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Remote Path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Poll Batch Size\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n-                                \"displayName\": \"Remote Poll Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Poll Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Search Recursively\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Search Recursively\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Transfer Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n                             \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n                                         \"displayName\": \"Tracking Time Window\",\n                                         \"value\": \"window\"\n                                     },\n                                     {\n                                         \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n                                         \"displayName\": \"All Available\",\n                                         \"value\": \"all\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"all\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n                                 \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"et-state-cache\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n                                 \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"et-state-cache\",\n                                 \"required\": false,\n@@ -109390,66 +108856,40 @@\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n                             \"et-time-window\": {\n                                 \"defaultValue\": \"3 hours\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n                                 \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n-                                \"displayName\": \"Follow symlink\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"follow-symlink\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ftp-use-utf8\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n-                                \"displayName\": \"Use UTF-8 Encoding\",\n+                            \"folder\": {\n+                                \"defaultValue\": \"/\",\n+                                \"description\": \"The Dropbox identifier or path of the folder from which to pull list of files. 'Folder' should match the following regular expression pattern: /.*|id:.* . Example for folder identifier: id:odTlUvbpIEAAAAAAAAAGGQ. Example for folder path: /Team1/Task1.\",\n+                                \"displayName\": \"Folder\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ftp-use-utf8\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"folder\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n@@ -109458,36 +108898,47 @@\n                                     },\n                                     {\n                                         \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n                                         \"displayName\": \"Tracking Entities\",\n                                         \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n                                         \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n                                         \"displayName\": \"Time Window\",\n                                         \"value\": \"time-window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"timestamps\",\n                                 \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n                                 \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n+                            \"min-age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age a file must be in order to be considered; any files newer than this will be ignored.\",\n+                                \"displayName\": \"Minimum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"min-age\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n                             \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n@@ -109510,56 +108961,45 @@\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"target-system-timestamp-precision\": {\n+                            \"recursive-search\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n-                                        \"displayName\": \"Auto Detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n-                                        \"displayName\": \"Milliseconds\",\n-                                        \"value\": \"millis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n-                                        \"displayName\": \"Seconds\",\n-                                        \"value\": \"seconds\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n-                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether to list files from subfolders of the Dropbox folder.\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"target-system-timestamp-precision\",\n+                                \"name\": \"recursive-search\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchFTP\",\n-                            \"org.apache.nifi.processors.standard.GetFTP\",\n-                            \"org.apache.nifi.processors.standard.PutFTP\"\n+                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n+                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node will not duplicate the data that was listed by the previous Primary Node.\",\n+                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'.\",\n                             \"scopes\": [\n                                 \"CLUSTER\"\n                             ]\n                         },\n                         \"supportedRelationships\": [\n                             {\n                                 \"description\": \"All FlowFiles that are received are routed to success\",\n@@ -109572,1371 +109012,1476 @@\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"files\",\n-                            \"ftp\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"list\",\n-                            \"remote\",\n-                            \"source\"\n+                            \"dropbox\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListFTP\",\n-                        \"typeDescription\": \"Performs a listing of the files residing on an FTP server. For each file that is found on the remote server, a new FlowFile will be created with the filename attribute set to the name of the file on the remote server. This can then be used in conjunction with FetchFTP in order to fetch those files.\",\n+                        \"type\": \"org.apache.nifi.processors.dropbox.ListDropbox\",\n+                        \"typeDescription\": \"Retrieves a listing of files from Dropbox (shortcuts are ignored). Each listed file may result in one FlowFile, the metadata being written as FlowFile attributes. When the 'Record Writer' property is set, the entire result is written as records to a single FlowFile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The hostname of the FTP Server\",\n-                                \"name\": \"ftp.remote.host\"\n+                                \"description\": \"The Dropbox identifier of the file\",\n+                                \"name\": \"dropbox.id\"\n                             },\n                             {\n-                                \"description\": \"The port that was connected to on the FTP Server\",\n-                                \"name\": \"ftp.remote.port\"\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The username of the user that performed the FTP Listing\",\n-                                \"name\": \"ftp.listing.user\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The numeric owner id of the source file\",\n-                                \"name\": \"file.owner\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"dropbox.size\"\n                             },\n                             {\n-                                \"description\": \"The numeric group id of the source file\",\n-                                \"name\": \"file.group\"\n+                                \"description\": \"The server modified time of the file\",\n+                                \"name\": \"dropbox.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\n+                                \"description\": \"Revision of the file\",\n+                                \"name\": \"dropbox.revision\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-dropbox-processors-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"chunked-upload-size\": {\n+                                \"defaultValue\": \"8 MB\",\n+                                \"description\": \"Defines the size of a chunk. Used when a FlowFile's size exceeds 'Chunked Upload Threshold' and content is uploaded in smaller chunks. It is recommended to specify chunked upload size smaller than 'Chunked Upload Threshold' and as multiples of 4 MB. Maximum allowed value is 150 MB.\",\n+                                \"displayName\": \"Chunked Upload Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"chunked-upload-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"chunked-upload-threshold\": {\n+                                \"defaultValue\": \"150 MB\",\n+                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks. Maximum allowed value is 150 MB.\",\n+                                \"displayName\": \"Chunked Upload Threshold\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"chunked-upload-threshold\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"conflict-resolution-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Handle file conflict as failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Ignore conflict, do not change the original file.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Replace existing file in case of conflict.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Dropbox folder.\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"conflict-resolution-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dropbox-credential-service\": {\n+                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n+                                \"displayName\": \"Dropbox Credential Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dropbox-credential-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The full name of the file to upload.\",\n+                                \"displayName\": \"Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"folder\": {\n+                                \"defaultValue\": \"/\",\n+                                \"description\": \"The path of the Dropbox folder to upload files to. The folder will be created if it does not exist yet.\",\n+                                \"displayName\": \"Folder\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"folder\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Uses the FlowFile's filename as the filename for the Dropbox object.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n+                            \"org.apache.nifi.processors.dropbox.ListDropbox\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Files that have been successfully written to Dropbox are transferred to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The number of bytes in the source file\",\n-                                \"name\": \"file.size\"\n+                                \"description\": \"Files that could not be written to Dropbox for some reason are transferred to this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"dropbox\",\n+                            \"put\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.dropbox.PutDropbox\",\n+                        \"typeDescription\": \"Puts content to a Dropbox folder.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The error message returned by Dropbox\",\n+                                \"name\": \"error.message\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of when the file in the filesystem waslast modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.lastModifiedTime\"\n+                                \"description\": \"The Dropbox identifier of the file\",\n+                                \"name\": \"dropbox.id\"\n                             },\n                             {\n-                                \"description\": \"The name of the file on the FTP Server\",\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file\",\n                                 \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The fully qualified name of the directory on the FTP Server from which the file was pulled\",\n-                                \"name\": \"path\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"dropbox.size\"\n+                            },\n+                            {\n+                                \"description\": \"The server modified time of the file\",\n+                                \"name\": \"dropbox.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"Revision of the file\",\n+                                \"name\": \"dropbox.revision\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jms-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"The properties that are set following Java Beans convention where a property name is derived from the 'set*' method of the vendor specific ConnectionFactory's implementation. For example, 'com.ibm.mq.jms.MQConnectionFactory.setChannel(String)' would imply 'channel' property and 'com.ibm.mq.jms.MQConnectionFactory.setTransportType(int)' would imply 'transportType' property.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Connection Factory configuration property.\",\n+                                \"value\": \"The value of a given Connection Factory configuration property.\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Client Library Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"JMS SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"broker\": {\n+                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n+                                \"displayName\": \"JMS Broker URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"broker\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cf\": {\n+                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n+                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cf\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cflib\": {\n+                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n+                                \"displayName\": \"JMS Client Libraries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cflib\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-jms-cf-service-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.jms.processors.ConsumeJMS\",\n+                            \"org.apache.nifi.jms.processors.PublishJMS\"\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"integration\",\n+                            \"jms\",\n+                            \"messaging\",\n+                            \"publish\",\n+                            \"queue\",\n+                            \"subscribe\",\n+                            \"topic\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n+                        \"typeDescription\": \"Provides a generic service to create vendor specific javax.jms.ConnectionFactory implementations. The Connection Factory can be served once this service is configured successfully.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"In order to perform a JNDI Lookup, an Initial Context must be established. When this is done, an Environment can be established for the context. Any dynamic/user-defined property that is added to this Controller Service will be added as an Environment configuration/variable to this Context.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a JNDI Initial Context environment variable.\",\n+                                \"value\": \"The value of the JNDI Initial Context environment variable.\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"connection.factory.name\": {\n+                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n+                                \"displayName\": \"JNDI Name of the Connection Factory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"connection.factory.name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"java.naming.factory.initial\": {\n+                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n+                                \"displayName\": \"JNDI Initial Context Factory Class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"java.naming.factory.initial\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"java.naming.provider.url\": {\n+                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n+                                \"displayName\": \"JNDI Provider URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"java.naming.provider.url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"java.naming.security.credentials\": {\n+                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n+                                \"displayName\": \"JNDI Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"java.naming.security.credentials\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"java.naming.security.principal\": {\n+                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n+                                \"displayName\": \"JNDI Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"java.naming.security.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"naming.factory.libraries\": {\n+                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n+                                \"displayName\": \"JNDI / JMS Client Libraries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"naming.factory.libraries\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-jms-cf-service-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                \"version\": \"1.27.0\"\n                             }\n-                        ]\n-                    },\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n+                            \"org.apache.nifi.jms.processors.ConsumeJMS\",\n+                            \"org.apache.nifi.jms.processors.PublishJMS\"\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"integration\",\n+                            \"jms\",\n+                            \"jndi\",\n+                            \"messaging\",\n+                            \"publish\",\n+                            \"queue\",\n+                            \"subscribe\",\n+                            \"topic\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.jms.cf.JndiJmsConnectionFactoryProvider\",\n+                        \"typeDescription\": \"Provides a service to lookup an existing JMS ConnectionFactory using the Java Naming and Directory Interface (JNDI).\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Additional configuration property for the Connection Factory. It can be used when the Connection Factory is being configured via the 'JNDI *' or the 'JMS *'properties of the processor. For more information, see the Additional Details page.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Connection Factory configuration property.\",\n+                                \"value\": \"The value of a given Connection Factory configuration property.\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Client Library Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"File Filter\": {\n-                                \"defaultValue\": \"[^\\\\.].*\",\n-                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n-                                \"displayName\": \"File Filter\",\n+                            \"Acknowledgement Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically acknowledges a client's receipt of a message, regardless if NiFi session has been commited. Can result in data loss in the event where NiFi abruptly stopped before session was commited.\",\n+                                        \"displayName\": \"AUTO_ACKNOWLEDGE (1)\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"(DEFAULT) Manually acknowledges a client's receipt of a message after NiFi Session was commited, thus ensuring no data loss\",\n+                                        \"displayName\": \"CLIENT_ACKNOWLEDGE (2)\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This acknowledgment mode instructs the session to lazily acknowledge the delivery of messages. May result in both data duplication and data loss while achieving the best throughput.\",\n+                                        \"displayName\": \"DUPS_OK_ACKNOWLEDGE (3)\",\n+                                        \"value\": \"3\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"The JMS Acknowledgement Mode. Using Auto Acknowledge can cause messages to be lost on restart of NiFi but may provide better performance than Client Acknowledge.\",\n+                                \"displayName\": \"Acknowledgement Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n+                                \"name\": \"Acknowledgement Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Hidden Files\": {\n+                            \"Connection Client ID\": {\n+                                \"description\": \"The client id to be set on the connection, if set. For durable non shared consumer this is mandatory, for all others it is optional, typically with shared consumers it is undesirable to be set. Please see JMS spec for further details\",\n+                                \"displayName\": \"Connection Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Connection Client ID\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Factory Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain Connection Factory. Alternatively, the 'JNDI *' or the 'JMS *' properties can also be be used to configure the Connection Factory.\",\n+                                \"displayName\": \"Connection Factory Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Factory Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Destination Name\": {\n+                                \"description\": \"The name of the JMS Destination. Usually provided by the administrator (e.g., 'topic://myTopic' or 'myTopic').\",\n+                                \"displayName\": \"Destination Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Destination Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Destination Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"QUEUE\",\n+                                        \"value\": \"QUEUE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"TOPIC\",\n+                                        \"value\": \"TOPIC\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n-                                \"displayName\": \"Ignore Hidden Files\",\n+                                \"defaultValue\": \"QUEUE\",\n+                                \"description\": \"The type of the JMS Destination. Could be one of 'QUEUE' or 'TOPIC'. Usually provided by the administrator. Defaults to 'QUEUE'\",\n+                                \"displayName\": \"Destination Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Hidden Files\",\n+                                \"name\": \"Destination Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Include File Attributes\": {\n+                            \"Durable subscription\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to include information such as the file's Last Modified Time and Owner as FlowFile Attributes. Depending on the File System being used, gathering this information can be expensive and as a result should be disabled. This is especially true of remote file shares.\",\n-                                \"displayName\": \"Include File Attributes\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include File Attributes\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Input Directory\": {\n-                                \"description\": \"The input directory from which files to pull files\",\n-                                \"displayName\": \"Input Directory\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If destination is Topic if present then make it the consumer durable. @see https://docs.oracle.com/javaee/7/api/javax/jms/Session.html#createDurableConsumer-javax.jms.Topic-java.lang.String-\",\n+                                \"displayName\": \"Durable Subscription\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Input Directory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Input Directory Location\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Input Directory is located on a local disk. State will be stored locally on each node in the cluster.\",\n-                                        \"displayName\": \"Local\",\n-                                        \"value\": \"Local\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Input Directory is located on a remote system. State will be stored across the cluster so that the listing can be performed on Primary Node Only and another node can pick up where the last node left off, if the Primary Node changes\",\n-                                        \"displayName\": \"Remote\",\n-                                        \"value\": \"Remote\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Local\",\n-                                \"description\": \"Specifies where the Input Directory is located. This is used to determine whether state should be stored locally or across the cluster.\",\n-                                \"displayName\": \"Input Directory Location\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Input Directory Location\",\n-                                \"required\": true,\n+                                \"name\": \"Durable subscription\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"Error Queue Name\": {\n+                                \"description\": \"The name of a JMS Queue where - if set - unprocessed messages will be routed. Usually provided by the administrator (e.g., 'queue://myErrorQueue' or 'myErrorQueue').Only applicable if 'Destination Type' is set to 'QUEUE'\",\n+                                \"displayName\": \"Error Queue Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Error Queue Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"Message Selector\": {\n+                                \"description\": \"The JMS Message Selector to filter the messages that the processor will receive\",\n+                                \"displayName\": \"Message Selector\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Message Selector\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"JMS SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Path Filter\": {\n-                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n-                                \"displayName\": \"Path Filter\",\n+                            \"Session Cache size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"This property is deprecated and no longer has any effect on the Processor. It will be removed in a later version.\",\n+                                \"displayName\": \"Session Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter\",\n+                                \"name\": \"Session Cache size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Recurse Subdirectories\": {\n+                            \"Shared subscription\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subdirectories of the directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If destination is Topic if present then make it the consumer shared. @see https://docs.oracle.com/javaee/7/api/javax/jms/Session.html#createSharedConsumer-javax.jms.Topic-java.lang.String-\",\n+                                \"displayName\": \"Shared Subscription\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Recurse Subdirectories\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Shared subscription\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Subscription Name\": {\n+                                \"description\": \"The name of the subscription to use if destination is Topic and is shared or durable.\",\n+                                \"displayName\": \"Subscription Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Subscription Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"1 sec\",\n+                                \"description\": \"How long to wait to consume a message from the remote broker before giving up.\",\n+                                \"displayName\": \"Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                            \"User Name\": {\n+                                \"description\": \"User Name used for authentication and authorization.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"User Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-node-identifier\": {\n-                                \"defaultValue\": \"${hostname()}\",\n-                                \"description\": \"The configured value will be appended to the cache key so that listing state can be tracked per NiFi node rather than cluster wide when tracking state is scoped to LOCAL. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Node Identifier\",\n+                            \"broker\": {\n+                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n+                                \"displayName\": \"JMS Broker URI\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-node-identifier\",\n+                                \"name\": \"broker\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"cf\": {\n+                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n+                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cf\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"cflib\": {\n+                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n+                                \"displayName\": \"JMS Client Libraries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n+                                \"name\": \"cflib\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The name of the character set to use to construct or interpret TextMessages\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-listing-time\": {\n-                                \"defaultValue\": \"3 mins\",\n-                                \"description\": \"The maximum amount of time that listing any single directory is expected to take. If the listing for the directory specified by the 'Input Directory' property, or the listing of any subdirectory (if 'Recurse' is set to true) takes longer than this amount of time, a warning bulletin will be generated for each directory listing that exceeds this amount of time.\",\n-                                \"displayName\": \"Max Directory Listing Time\",\n+                            \"connection.factory.name\": {\n+                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n+                                \"displayName\": \"JNDI Name of the Connection Factory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max-listing-time\",\n+                                \"name\": \"connection.factory.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-operation-time\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"The maximum amount of time that any single disk operation is expected to take. If any disk operation takes longer than this amount of time, a warning bulletin will be generated for each operation that exceeds this amount of time.\",\n-                                \"displayName\": \"Max Disk Operation Time\",\n+                            \"java.naming.factory.initial\": {\n+                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n+                                \"displayName\": \"JNDI Initial Context Factory Class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max-operation-time\",\n+                                \"name\": \"java.naming.factory.initial\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-performance-metrics\": {\n-                                \"defaultValue\": \"100000\",\n-                                \"description\": \"If the 'Track Performance' property is set to 'true', this property indicates the maximum number of files whose performance metrics should be held onto. A smaller value for this property will result in less heap utilization, while a larger value may provide more accurate insights into how the disk access operations are performing\",\n-                                \"displayName\": \"Maximum Number of Files to Track\",\n+                            \"java.naming.provider.url\": {\n+                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n+                                \"displayName\": \"JNDI Provider URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max-performance-metrics\",\n-                                \"required\": true,\n+                                \"name\": \"java.naming.provider.url\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"java.naming.security.credentials\": {\n+                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n+                                \"displayName\": \"JNDI Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"java.naming.security.credentials\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"target-system-timestamp-precision\": {\n+                            \"java.naming.security.principal\": {\n+                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n+                                \"displayName\": \"JNDI Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"java.naming.security.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"naming.factory.libraries\": {\n+                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n+                                \"displayName\": \"JNDI / JMS Client Libraries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"naming.factory.libraries\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"output-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n-                                        \"displayName\": \"Auto Detect\",\n-                                        \"value\": \"auto-detect\"\n+                                        \"description\": \"Write only the message to the FlowFile record.\",\n+                                        \"displayName\": \"Use Content as Value\",\n+                                        \"value\": \"USE_VALUE\"\n                                     },\n                                     {\n-                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n-                                        \"displayName\": \"Milliseconds\",\n-                                        \"value\": \"millis\"\n+                                        \"description\": \"Write the additional attributes into the FlowFile record on a separate leaf. (See processor usage for more information.)\",\n+                                        \"displayName\": \"Use Wrapper\",\n+                                        \"value\": \"USE_WRAPPER\"\n                                     },\n                                     {\n-                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n-                                        \"displayName\": \"Seconds\",\n-                                        \"value\": \"seconds\"\n-                                    },\n+                                        \"description\": \"Write the additional attributes into the FlowFile record prefixed with \\\"_\\\". (See processor usage for more information.)\",\n+                                        \"displayName\": \"Use Appender\",\n+                                        \"value\": \"USE_APPENDER\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"USE_VALUE\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n-                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"description\": \"The format used to output the JMS message into a FlowFile record.\",\n+                                \"displayName\": \"Output Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"target-system-timestamp-precision\",\n+                                \"name\": \"output-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"track-performance\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for parsing received JMS Messages into Records.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not the Processor should track the performance of disk access operations. If true, all accesses to disk will be recorded, including the file being accessed, the information being obtained, and how long it takes. This is then logged periodically at a DEBUG level. While the amount of data will be capped, this option may still consume a significant amount of heap (controlled by the 'Maximum Number of Files to Track' property), but it can be very useful for troubleshooting purposes if performance is poor is degraded.\",\n-                                \"displayName\": \"Track Performance\",\n+                                \"description\": \"The Record Writer to use for serializing Records before writing them to a FlowFile.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"track-performance\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchFile\",\n-                            \"org.apache.nifi.processors.standard.GetFile\",\n-                            \"org.apache.nifi.processors.standard.PutFile\"\n+                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n+                            \"org.apache.nifi.jms.processors.PublishJMS\"\n                         ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. Whether the state is stored with a Local or Cluster scope depends on the value of the <Input Directory Location> property.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\",\n-                                \"LOCAL\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"All FlowFiles that are received from the JMS Destination are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a message cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"file\",\n-                            \"filesystem\",\n+                            \"consume\",\n                             \"get\",\n-                            \"ingest\",\n-                            \"list\",\n-                            \"source\"\n+                            \"jms\",\n+                            \"message\",\n+                            \"receive\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListFile\",\n-                        \"typeDescription\": \"Retrieves a listing of files from the input directory. For each file listed, creates a FlowFile that represents the file so that it can be fetched in conjunction with FetchFile. This Processor is designed to run on Primary Node only in a cluster when 'Input Directory Location' is set to 'Remote'. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all the data. When 'Input Directory Location' is 'Local', the 'Execution' mode can be anything, and synchronization won't happen. Unlike GetFile, this Processor does not delete any data from the local filesystem.\",\n+                        \"type\": \"org.apache.nifi.jms.processors.ConsumeJMS\",\n+                        \"typeDescription\": \"Consumes JMS Message of type BytesMessage, TextMessage, ObjectMessage, MapMessage or StreamMessage transforming its content to a FlowFile and transitioning it to 'success' relationship. JMS attributes such as headers and properties will be copied as FlowFile attributes. MapMessages will be transformed into JSONs and then into byte arrays. The other types will have their raw contents as byte array transferred into the flowfile.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file that was read from filesystem.\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The JMSDeliveryMode from the message header.\",\n+                                \"name\": \"jms_deliveryMode\"\n                             },\n                             {\n-                                \"description\": \"The path is set to the relative path of the file's directory on filesystem compared to the Input Directory property. For example, if Input Directory is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"/\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"abc/1/2/3/\\\".\",\n-                                \"name\": \"path\"\n+                                \"description\": \"The JMSExpiration from the message header.\",\n+                                \"name\": \"jms_expiration\"\n                             },\n                             {\n-                                \"description\": \"The absolute.path is set to the absolute path of the file's directory on filesystem. For example, if the Input Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"/tmp/\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"/tmp/abc/1/2/3/\\\".\",\n-                                \"name\": \"absolute.path\"\n+                                \"description\": \"The JMSPriority from the message header.\",\n+                                \"name\": \"jms_priority\"\n                             },\n                             {\n-                                \"description\": \"The user that owns the file in filesystem\",\n-                                \"name\": \"file.owner\"\n+                                \"description\": \"The JMSRedelivered from the message header.\",\n+                                \"name\": \"jms_redelivered\"\n                             },\n                             {\n-                                \"description\": \"The group that owns the file in filesystem\",\n-                                \"name\": \"file.group\"\n+                                \"description\": \"The JMSTimestamp from the message header.\",\n+                                \"name\": \"jms_timestamp\"\n                             },\n                             {\n-                                \"description\": \"The number of bytes in the file in filesystem\",\n-                                \"name\": \"file.size\"\n+                                \"description\": \"The JMSCorrelationID from the message header.\",\n+                                \"name\": \"jms_correlationId\"\n                             },\n                             {\n-                                \"description\": \"The permissions for the file in filesystem. This is formatted as 3 characters for the owner, 3 for the group, and 3 for other users. For example rw-rw-r--\",\n-                                \"name\": \"file.permissions\"\n+                                \"description\": \"The JMSMessageID from the message header.\",\n+                                \"name\": \"jms_messageId\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of when the file in filesystem was last modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.lastModifiedTime\"\n+                                \"description\": \"The JMSType from the message header.\",\n+                                \"name\": \"jms_type\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of when the file in filesystem was last accessed as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.lastAccessTime\"\n+                                \"description\": \"The JMSReplyTo from the message header.\",\n+                                \"name\": \"jms_replyTo\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of when the file in filesystem was created as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.creationTime\"\n+                                \"description\": \"The JMSDestination from the message header.\",\n+                                \"name\": \"jms_destination\"\n+                            },\n+                            {\n+                                \"description\": \"The JMS message type, can be TextMessage, BytesMessage, ObjectMessage, MapMessage or StreamMessage).\",\n+                                \"name\": \"jms.messagetype\"\n+                            },\n+                            {\n+                                \"description\": \"Each message property is written to an attribute.\",\n+                                \"name\": \"other attributes\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Additional configuration property for the Connection Factory. It can be used when the Connection Factory is being configured via the 'JNDI *' or the 'JMS *'properties of the processor. For more information, see the Additional Details page.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Connection Factory configuration property.\",\n+                                \"value\": \"The value of a given Connection Factory configuration property.\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Client Library Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Ciphers Allowed\": {\n-                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n-                                \"displayName\": \"Ciphers Allowed\",\n+                            \"Connection Client ID\": {\n+                                \"description\": \"The client id to be set on the connection, if set. For durable non shared consumer this is mandatory, for all others it is optional, typically with shared consumers it is undesirable to be set. Please see JMS spec for further details\",\n+                                \"displayName\": \"Connection Client ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Ciphers Allowed\",\n+                                \"name\": \"Connection Client ID\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"Connection Factory Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain Connection Factory. Alternatively, the 'JNDI *' or the 'JMS *' properties can also be be used to configure the Connection Factory.\",\n+                                \"displayName\": \"Connection Factory Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"name\": \"Connection Factory Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Destination Name\": {\n+                                \"description\": \"The name of the JMS Destination. Usually provided by the administrator (e.g., 'topic://myTopic' or 'myTopic').\",\n+                                \"displayName\": \"Destination Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Destination Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"Destination Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"QUEUE\",\n+                                        \"value\": \"QUEUE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TOPIC\",\n+                                        \"value\": \"TOPIC\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"QUEUE\",\n+                                \"description\": \"The type of the JMS Destination. Could be one of 'QUEUE' or 'TOPIC'. Usually provided by the administrator. Defaults to 'QUEUE'\",\n+                                \"displayName\": \"Destination Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n+                                \"name\": \"Destination Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"NOTE: This property is used merely for migration from old NiFi version before state management was introduced at version 0.5.0. The stored value in the cache service will be migrated into the state when this processor is started at the first time. The specified Controller Service was used to maintain state about what had been pulled from the remote server so that if a new node begins pulling data, it won't duplicate all of the work that has been done. If not specified, the information was not shared across the cluster. This property did not need to be set for standalone instances of NiFi but was supposed to be configured if NiFi had been running within a cluster.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"JMS SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Host Key File\": {\n-                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n-                                \"displayName\": \"Host Key File\",\n+                            \"Session Cache size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"This property is deprecated and no longer has any effect on the Processor. It will be removed in a later version.\",\n+                                \"displayName\": \"Session Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Host Key File\",\n+                                \"name\": \"Session Cache size\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n+                            \"User Name\": {\n+                                \"description\": \"User Name used for authentication and authorization.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n+                                \"name\": \"User Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Dotted Files\": {\n+                            \"allow-illegal-chars-in-jms-header-names\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether illegal characters in header names should be sent to the JMS broker. Usually hyphens and full-stops.\",\n+                                \"displayName\": \"Allow Illegal Characters in Header Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n+                                \"name\": \"allow-illegal-chars-in-jms-header-names\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Key Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n-                                \"displayName\": \"Key Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Key Exchange Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n-                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Exchange Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"attributes-to-send-as-jms-headers-regex\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be sent as JMS Headers\",\n+                                \"displayName\": \"Attributes to Send as JMS Headers (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n-                                \"required\": false,\n+                                \"name\": \"attributes-to-send-as-jms-headers-regex\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"broker\": {\n+                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n+                                \"displayName\": \"JMS Broker URI\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"broker\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Authentication Codes Allowed\": {\n-                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n-                                \"displayName\": \"Message Authentication Codes Allowed\",\n+                            \"cf\": {\n+                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n+                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"name\": \"cf\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Path Filter Regex\": {\n-                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n-                                \"displayName\": \"Path Filter Regex\",\n+                            \"cflib\": {\n+                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n+                                \"displayName\": \"JMS Client Libraries\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter Regex\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cflib\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"22\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\n+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The name of the character set to use to construct or interpret TextMessages\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Private Key Passphrase\": {\n-                                \"description\": \"Password for the private key\",\n-                                \"displayName\": \"Private Key Passphrase\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Passphrase\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Private Key Path\": {\n-                                \"description\": \"The fully qualified path to the Private Key file\",\n-                                \"displayName\": \"Private Key Path\",\n+                            \"connection.factory.name\": {\n+                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n+                                \"displayName\": \"JNDI Name of the Connection Factory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Path\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"connection.factory.name\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n+                            \"java.naming.factory.initial\": {\n+                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n+                                \"displayName\": \"JNDI Initial Context Factory Class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n+                                \"name\": \"java.naming.factory.initial\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n+                            \"java.naming.provider.url\": {\n+                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n+                                \"displayName\": \"JNDI Provider URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n+                                \"name\": \"java.naming.provider.url\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                            \"java.naming.security.credentials\": {\n+                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n+                                \"displayName\": \"JNDI Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n+                                \"name\": \"java.naming.security.credentials\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Remote Path\": {\n-                                \"defaultValue\": \".\",\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n+                            \"java.naming.security.principal\": {\n+                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n+                                \"displayName\": \"JNDI Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Remote Path\",\n+                                \"name\": \"java.naming.security.principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Poll Batch Size\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n-                                \"displayName\": \"Remote Poll Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Poll Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Search Recursively\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Search Recursively\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Send Keep Alive On Timeout\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n-                                \"displayName\": \"Send Keep Alive On Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Keep Alive On Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Strict Host Key Checking\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Strict Host Key Checking\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Use Compression\": {\n+                            \"message-body-type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"bytes\",\n+                                        \"value\": \"bytes\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                                \"defaultValue\": \"bytes\",\n+                                \"description\": \"The type of JMS message body to construct.\",\n+                                \"displayName\": \"Message Body Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"message-body-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"naming.factory.libraries\": {\n+                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n+                                \"displayName\": \"JNDI / JMS Client Libraries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n+                                \"name\": \"naming.factory.libraries\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n-                                \"displayName\": \"Follow symlink\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"follow-symlink\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"listing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n-                                        \"displayName\": \"Time Window\",\n-                                        \"value\": \"time-window\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for parsing the incoming FlowFile into Records.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n                             \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Writer to use for serializing Records before publishing them as an JMS Message.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-writer\",\n-                                \"required\": false,\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"target-system-timestamp-precision\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n-                                        \"displayName\": \"Auto Detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n-                                        \"displayName\": \"Milliseconds\",\n-                                        \"value\": \"millis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n-                                        \"displayName\": \"Seconds\",\n-                                        \"value\": \"seconds\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n-                                \"displayName\": \"Target System Timestamp Precision\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"target-system-timestamp-precision\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchSFTP\",\n-                            \"org.apache.nifi.processors.standard.GetSFTP\",\n-                            \"org.apache.nifi.processors.standard.PutSFTP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node will not duplicate the data that was listed by the previous Primary Node.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"files\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"list\",\n-                            \"remote\",\n-                            \"sftp\",\n-                            \"source\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListSFTP\",\n-                        \"typeDescription\": \"Performs a listing of the files residing on an SFTP server. For each file that is found on the remote server, a new FlowFile will be created with the filename attribute set to the name of the file on the remote server. This can then be used in conjunction with FetchSFTP in order to fetch those files.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"description\": \"The hostname of the SFTP Server\",\n-                                \"name\": \"sftp.remote.host\"\n+                                \"description\": \"This attribute becomes the JMSDeliveryMode message header. Must be an integer.\",\n+                                \"name\": \"jms_deliveryMode\"\n                             },\n                             {\n-                                \"description\": \"The port that was connected to on the SFTP Server\",\n-                                \"name\": \"sftp.remote.port\"\n+                                \"description\": \"This attribute becomes the JMSExpiration message header. Must be an integer.\",\n+                                \"name\": \"jms_expiration\"\n                             },\n                             {\n-                                \"description\": \"The username of the user that performed the SFTP Listing\",\n-                                \"name\": \"sftp.listing.user\"\n+                                \"description\": \"This attribute becomes the JMSPriority message header. Must be an integer.\",\n+                                \"name\": \"jms_priority\"\n                             },\n                             {\n-                                \"description\": \"The numeric owner id of the source file\",\n-                                \"name\": \"file.owner\"\n+                                \"description\": \"This attribute becomes the JMSRedelivered message header.\",\n+                                \"name\": \"jms_redelivered\"\n                             },\n                             {\n-                                \"description\": \"The numeric group id of the source file\",\n-                                \"name\": \"file.group\"\n+                                \"description\": \"This attribute becomes the JMSTimestamp message header. Must be a long.\",\n+                                \"name\": \"jms_timestamp\"\n                             },\n                             {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\n+                                \"description\": \"This attribute becomes the JMSCorrelationID message header.\",\n+                                \"name\": \"jms_correlationId\"\n                             },\n                             {\n-                                \"description\": \"The number of bytes in the source file\",\n-                                \"name\": \"file.size\"\n+                                \"description\": \"This attribute becomes the JMSType message header. Must be an integer.\",\n+                                \"name\": \"jms_type\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of when the file in the filesystem waslast modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.lastModifiedTime\"\n+                                \"description\": \"This attribute becomes the JMSReplyTo message header. Must be an integer.\",\n+                                \"name\": \"jms_replyTo\"\n                             },\n                             {\n-                                \"description\": \"The name of the file on the SFTP Server\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"This attribute becomes the JMSDestination message header. Must be an integer.\",\n+                                \"name\": \"jms_destination\"\n                             },\n                             {\n-                                \"description\": \"The fully qualified name of the directory on the SFTP Server from which the file was pulled\",\n-                                \"name\": \"path\"\n+                                \"description\": \"All other attributes that do not start with jms_ are added as message properties.\",\n+                                \"name\": \"other attributes\"\n                             },\n                             {\n-                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"bind-address\": {\n-                                \"description\": \"The address the FTP server should be bound to. If not set (or set to 0.0.0.0), the server binds to all available addresses (i.e. all network interfaces of the host machine).\",\n-                                \"displayName\": \"Bind Address\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bind-address\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"listening-port\": {\n-                                \"defaultValue\": \"2221\",\n-                                \"description\": \"The Port to listen on for incoming connections. On Linux, root privileges are required to use port numbers below 1024.\",\n-                                \"displayName\": \"Listening Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"listening-port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"password\": {\n-                                \"description\": \"If the Username is set, then a password must also be specified. The password provided by the client trying to log in to the FTP server will be checked against this password.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"Specifies the SSL Context Service that can be used to create secure connections. If an SSL Context Service is selected, then a keystore file must also be specified in the SSL Context Service. Without a keystore file, the processor cannot be started successfully.Specifying a truststore file is optional. If a truststore file is specified, client authentication is required (the client needs to send a certificate to the server).Regardless of the selected TLS protocol, the highest available protocol is used for the connection. For example if NiFi is running on Java 11 and TLSv1.2 is selected in the controller service as the preferred TLS Protocol, TLSv1.3 will be used (regardless of TLSv1.2 being selected) because Java 11 supports TLSv1.3.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"username\": {\n-                                \"description\": \"The name of the user that is allowed to log in to the FTP server. If a username is provided, a password must also be provided. If no username is specified, anonymous connections will be permitted.\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"description\": \"When an attribute will be added as a message property, a second attribute of the same name but with an extra `.type` at the end will cause the message property to be sent using that strong type. For example, attribute `delay` with value `12000` and another attribute `delay.type` with value `integer` will cause a JMS message property `delay` to be sent as an Integer rather than a String. Supported types are boolean, byte, short, integer, long, float, double, and string (which is the default).\",\n+                                \"name\": \"other attributes .type\"\n                             }\n-                        },\n+                        ],\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n+                            \"org.apache.nifi.jms.processors.ConsumeJMS\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Relationship for successfully received files.\",\n+                                \"description\": \"All FlowFiles that are sent to the JMS destination are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be sent to JMS destination are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"FTP\",\n-                            \"FTPS\",\n-                            \"ingest\",\n-                            \"listen\"\n+                            \"jms\",\n+                            \"message\",\n+                            \"publish\",\n+                            \"put\",\n+                            \"send\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenFTP\",\n-                        \"typeDescription\": \"Starts an FTP server that listens on the specified port and transforms incoming files into FlowFiles. The URI of the service will be ftp://{hostname}:{port}. The default port is 2221.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file received via the FTP/FTPS connection.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path pointing to the file's target directory. E.g.: file.txt is uploaded to /Folder1/SubFolder, then the value of the path attribute will be \\\"/Folder1/SubFolder/\\\" (note that it ends with a separator character).\",\n-                                \"name\": \"path\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.jms.processors.PublishJMS\",\n+                        \"typeDescription\": \"Creates a JMS Message from the contents of a FlowFile and sends it to a JMS Destination (queue or topic) as JMS BytesMessage or TextMessage. FlowFile attributes will be added as JMS headers and/or properties to the outgoing JMS message.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-snmp-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -110945,306 +110490,421 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Authorized DN Pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A Regular Expression to apply against the Subject's Distinguished Name of incoming connections. If the Pattern does not match the Subject DN, the the processor will respond with a status of HTTP 403 Forbidden.\",\n-                                \"displayName\": \"Authorized Subject DN Pattern\",\n+                            \"snmp-authentication-passphrase\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n+                                \"displayName\": \"SNMP Authentication Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Authorized DN Pattern\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Base Path\": {\n-                                \"defaultValue\": \"contentListener\",\n-                                \"description\": \"Base path for incoming connections\",\n-                                \"displayName\": \"Base Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Base Path\",\n+                                \"name\": \"snmp-authentication-passphrase\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"HTTP Headers to receive as Attributes (Regex)\": {\n-                                \"description\": \"Specifies the Regular Expression that determines the names of HTTP Headers that should be passed along as FlowFile attributes\",\n-                                \"displayName\": \"HTTP Headers to receive as Attributes (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Headers to receive as Attributes (Regex)\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"HTTP Protocols\": {\n+                            \"snmp-authentication-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"HTTP/1.1\",\n-                                        \"displayName\": \"http/1.1\",\n-                                        \"value\": \"HTTP_1_1\"\n+                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n                                     },\n                                     {\n-                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n-                                        \"displayName\": \"h2 http/1.1\",\n-                                        \"value\": \"H2_HTTP_1_1\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n+                                        \"displayName\": \"SHA\",\n+                                        \"value\": \"SHA\"\n                                     },\n                                     {\n-                                        \"description\": \"HTTP/2\",\n-                                        \"displayName\": \"h2\",\n-                                        \"value\": \"H2\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA224\",\n+                                        \"value\": \"HMAC128SHA224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"HMAC192SHA256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"HMAC256SHA384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"HMAC384SHA512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"HTTP_1_1\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n                                     }\n                                 ],\n-                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n-                                \"displayName\": \"HTTP Protocols\",\n+                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n+                                \"displayName\": \"SNMP Authentication Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Protocols\",\n+                                \"name\": \"snmp-authentication-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Listening Port\": {\n-                                \"description\": \"The Port to listen on for incoming connections\",\n-                                \"displayName\": \"Listening Port\",\n+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n+                                \"displayName\": \"SNMP Community\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Listening Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-community\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"snmp-hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Hostname or network address of the SNMP Agent.\",\n+                                \"displayName\": \"SNMP Agent Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"snmp-hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Data to Receive per Second\": {\n-                                \"description\": \"The maximum amount of data to receive per second; this allows the bandwidth to be throttled to a specified data rate; if not specified, the data rate is not throttled\",\n-                                \"displayName\": \"Max Data to Receive per Second\",\n+                            \"snmp-oid\": {\n+                                \"description\": \"Each OID (object identifier) identifies a variable that can be read or set via SNMP. This value is not taken into account for an input flowfile and will be omitted. Can be set to emptystring when the OIDs are provided through flowfile.\",\n+                                \"displayName\": \"OID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Data to Receive per Second\",\n+                                \"name\": \"snmp-oid\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Unconfirmed Flowfile Time\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"The maximum amount of time to wait for a FlowFile to be confirmed before it is removed from the cache\",\n-                                \"displayName\": \"Max Unconfirmed Flowfile Time\",\n+                            \"snmp-port\": {\n+                                \"defaultValue\": \"161\",\n+                                \"description\": \"Port of the SNMP Agent.\",\n+                                \"displayName\": \"SNMP Agent Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Unconfirmed Flowfile Time\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"snmp-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Return Code\": {\n-                                \"defaultValue\": \"200\",\n-                                \"description\": \"The HTTP return code returned after every HTTP call\",\n-                                \"displayName\": \"Return Code\",\n+                            \"snmp-private-protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"DES\",\n+                                        \"value\": \"DES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"3DES\",\n+                                        \"value\": \"3DES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES128\",\n+                                        \"value\": \"AES128\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES192\",\n+                                        \"value\": \"AES192\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES256\",\n+                                        \"value\": \"AES256\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n+                                \"displayName\": \"SNMP Privacy Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Return Code\",\n-                                \"required\": false,\n+                                \"name\": \"snmp-private-protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"SSL Context Service enables support for HTTPS\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"snmp-private-protocol-passphrase\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n+                                \"displayName\": \"SNMP Privacy Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"snmp-private-protocol-passphrase\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"authorized-issuer-dn-pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A Regular Expression to apply against the Issuer's Distinguished Name of incoming connections. If the Pattern does not match the Issuer DN, the processor will respond with a status of HTTP 403 Forbidden.\",\n-                                \"displayName\": \"Authorized Issuer DN Pattern\",\n+                            \"snmp-retries\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Number of Retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorized-issuer-dn-pattern\",\n+                                \"name\": \"snmp-retries\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"client-authentication\": {\n+                            \"snmp-security-level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Inferred based on SSL Context Service properties. The presence of Trust Store properties implies REQUIRED, otherwise NONE is configured.\",\n-                                        \"displayName\": \"AUTO\",\n-                                        \"value\": \"AUTO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Requests the client certificate on handshake and validates if present but does not require it\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"Requests the client certificate on handshake and rejects the connection if it is not present and valid\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"Does not request the client certificate on handshake\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AUTO\",\n+                                \"defaultValue\": \"noAuthNoPriv\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     }\n                                 ],\n-                                \"description\": \"Client Authentication policy for TLS connections. Required when SSL Context Service configured.\",\n-                                \"displayName\": \"Client Authentication\",\n+                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n+                                \"displayName\": \"SNMP Security Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-authentication\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"health-check-port\": {\n-                                \"description\": \"The port to listen on for incoming health check requests. If set, it must be different from the Listening Port. Configure this port if the processor is set to use two-way SSL and a load balancer that does not support client authentication for health check requests is used. Only /<base_path>/healthcheck service is available via this port and only GET and HEAD requests are supported. If the processor is set not to use SSL, SSL will not be used on this port, either. If the processor is set to use one-way SSL, one-way SSL will be used on this port. If the processor is set to use two-way SSL, one-way SSL will be used on this port (client authentication not required).\",\n-                                \"displayName\": \"Listening Port for Health Check Requests\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"health-check-port\",\n-                                \"required\": false,\n+                                \"name\": \"snmp-security-level\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-thread-pool-size\": {\n-                                \"defaultValue\": \"200\",\n-                                \"description\": \"The maximum number of threads to be used by the embedded Jetty server. The value can be set between 8 and 1000. The value of this property affects the performance of the flows and the operating system, therefore the default value should only be changed in justified cases. A value that is less than the default value may be suitable if only a small number of HTTP clients connect to the server. A greater value may be suitable if a large number of HTTP clients are expected to make requests to the server simultaneously.\",\n-                                \"displayName\": \"Maximum Thread Pool Size\",\n+                            \"snmp-security-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"User name used for SNMP v3 Authentication.\",\n+                                \"displayName\": \"SNMP Security Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-thread-pool-size\",\n+                                \"name\": \"snmp-security-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"multipart-read-buffer-size\": {\n-                                \"defaultValue\": \"512 KB\",\n-                                \"description\": \"The threshold size, at which the contents of an incoming file would be written to disk. Only applies for requests with Content-Type: multipart/form-data. It is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space.\",\n-                                \"displayName\": \"Multipart Read Buffer Size\",\n+                            \"snmp-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"A manager-to-agent request to retrieve the value of a variable. A response with the current value returned.\",\n+                                        \"displayName\": \"GET\",\n+                                        \"value\": \"GET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A manager-to-agent request to retrieve the value of multiple variables. Snmp WALK also traverses all subnodes under the specified OID.\",\n+                                        \"displayName\": \"WALK\",\n+                                        \"value\": \"WALK\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GET\",\n+                                \"description\": \"SNMP strategy to use (SNMP Get or SNMP Walk)\",\n+                                \"displayName\": \"SNMP Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"multipart-read-buffer-size\",\n+                                \"name\": \"snmp-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"multipart-request-max-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The max size of the request. Only applies for requests with Content-Type: multipart/form-data, and is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space\",\n-                                \"displayName\": \"Multipart Request Max Size\",\n+                            \"snmp-textual-oid\": {\n+                                \"description\": \"The textual form of the numeric OID to request. This property is user defined, not processed and appended to the outgoing flowfile.\",\n+                                \"displayName\": \"Textual OID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"multipart-request-max-size\",\n-                                \"required\": true,\n+                                \"name\": \"snmp-textual-oid\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"snmp-timeout\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Timeout (ms)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"snmp-timeout\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n+                            \"snmp-version\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SNMP version 3 with improved security\",\n+                                        \"displayName\": \"v3\",\n+                                        \"value\": \"SNMPv3\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\n+                                \"defaultValue\": \"SNMPv1\",\n+                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n+                                \"displayName\": \"SNMP Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"snmp-version\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Relationship for successfully received FlowFiles\",\n+                                \"description\": \"All FlowFiles that are received from the SNMP agent are routed to this relationship.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"http\",\n-                            \"https\",\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"rest\"\n+                            \"get\",\n+                            \"oid\",\n+                            \"snmp\",\n+                            \"walk\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenHTTP\",\n-                        \"typeDescription\": \"Starts an HTTP Server and listens on a given base path to transform incoming requests into FlowFiles. The default URI of the Service will be http://{hostname}:{port}/contentListener. Only HEAD and POST requests are supported. GET, PUT, DELETE, OPTIONS and TRACE will result in an error and the HTTP response status code 405; CONNECT will also result in an error and the HTTP response status code 400. GET is supported on <service_URI>/healthcheck. If the service is available, it returns \\\"200 OK\\\" with the content \\\"OK\\\". The health check functionality can be configured to be accessible via a different port. For details see the documentation of the \\\"Listening Port for health check requests\\\" property.A Record Reader and Record Writer property can be enabled on the processor to process incoming requests as records. Record processing is not allowed for multipart requests and request in FlowFileV3 format (minifi).\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.snmp.processors.GetSNMP\",\n+                        \"typeDescription\": \"Retrieves information from SNMP Agent with SNMP Get request and outputs a FlowFile with information in attributes and without any content\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Response variable binding: OID (e.g. 1.3.6.1.4.1.343) and its value.\",\n+                                \"name\": \"snmp$<OID>\"\n+                            },\n+                            {\n+                                \"description\": \"Denotes the variable binding in which the error occured.\",\n+                                \"name\": \"snmp$errorIndex\"\n+                            },\n+                            {\n+                                \"description\": \"The snmp4j error status of the PDU.\",\n+                                \"name\": \"snmp$errorStatus\"\n+                            },\n+                            {\n+                                \"description\": \"The description of error status.\",\n+                                \"name\": \"snmp$errorStatusText\"\n+                            },\n+                            {\n+                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n+                                \"name\": \"snmp$nonRepeaters\"\n+                            },\n+                            {\n+                                \"description\": \"The request ID associated with the PDU.\",\n+                                \"name\": \"snmp$requestID\"\n+                            },\n+                            {\n+                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n+                                \"name\": \"snmp$type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the PDU type.\",\n+                                \"name\": \"snmp$typeString\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute will exist if and only if the strategy is GET and will be equal to the value given in Textual Oid property.\",\n+                                \"name\": \"snmp$textualOid\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -111256,213 +110916,279 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the received data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n+                                \"displayName\": \"SNMP Community\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"snmp-community\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"snmp-manager-port\": {\n+                                \"description\": \"The port where the SNMP Manager listens to the incoming traps.\",\n+                                \"displayName\": \"SNMP Manager Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-manager-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client Auth\": {\n+                            \"snmp-security-level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Local Network Interface\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Batch Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n-                                \"displayName\": \"Max Batch Size\",\n+                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n+                                \"displayName\": \"SNMP Security Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Batch Size\",\n+                                \"name\": \"snmp-security-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Number of TCP Connections\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"The maximum number of worker threads available for servicing TCP connections.\",\n-                                \"displayName\": \"Max Number of Worker Threads\",\n+                            \"snmp-usm-security-names\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"usm-security-names\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"USM Users Source\",\n+                                        \"propertyName\": \"snmp-usm-users-source\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"noAuthNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"Security names listed separated by commas in SNMPv3. Check Usage for more details.\",\n+                                \"displayName\": \"SNMP Users Security Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Number of TCP Connections\",\n-                                \"required\": true,\n+                                \"name\": \"snmp-usm-security-names\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor during these surges.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\n+                            \"snmp-usm-users-file-path\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"usm-json-file-path\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"USM Users Source\",\n+                                        \"propertyName\": \"snmp-usm-users-source\"\n+                                    }\n+                                ],\n+                                \"description\": \"The path of the json file containing the user credentials for SNMPv3. Check Usage for more details.\",\n+                                \"displayName\": \"USM Users JSON File Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n-                                \"required\": true,\n+                                \"name\": \"snmp-usm-users-file-path\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                            \"snmp-usm-users-json-content\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"usm-json-content\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"USM Users Source\",\n+                                        \"propertyName\": \"snmp-usm-users-source\"\n+                                    }\n+                                ],\n+                                \"description\": \"The JSON containing the user credentials for SNMPv3. Check Usage for more details.\",\n+                                \"displayName\": \"USM Users JSON content\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n-                                \"required\": true,\n+                                \"name\": \"snmp-usm-users-json-content\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Delimiter\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n-                                \"displayName\": \"Batching Message Delimiter\",\n+                            \"snmp-usm-users-source\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The JSON containing the USM users\",\n+                                        \"displayName\": \"Json Content\",\n+                                        \"value\": \"usm-json-content\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The path of the JSON file containing the USM users\",\n+                                        \"displayName\": \"Json File Path\",\n+                                        \"value\": \"usm-json-file-path\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In case of noAuthNoPriv security level - the list of security names separated by commas\",\n+                                        \"displayName\": \"Security Names\",\n+                                        \"value\": \"usm-security-names\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"The ways to provide USM User data\",\n+                                \"displayName\": \"USM Users Source\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Delimiter\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"snmp-usm-users-source\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n-                                \"displayName\": \"Receive Buffer Size\",\n+                            \"snmp-version\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SNMP version 3 with improved security\",\n+                                        \"displayName\": \"v3\",\n+                                        \"value\": \"SNMPv3\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SNMPv1\",\n+                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n+                                \"displayName\": \"SNMP Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n+                                \"name\": \"snmp-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"description\": \"All FlowFiles that are received from the SNMP agent are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n                             \"listen\",\n-                            \"logs\",\n-                            \"relp\",\n-                            \"tcp\"\n+                            \"snmp\",\n+                            \"trap\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenRELP\",\n-                        \"typeDescription\": \"Listens for RELP messages being sent to a given port over TCP. Each message will be acknowledged after successfully writing the message to a FlowFile. Each FlowFile will contain data portion of one or more RELP frames. In the case where the RELP frames contain syslog messages, the output of this processor can be sent to a ParseSyslog processor for further processing.\",\n+                        \"type\": \"org.apache.nifi.snmp.processors.ListenTrapSNMP\",\n+                        \"typeDescription\": \"Receives information from SNMP Agent and outputs a FlowFile with information in attributes and without any content\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The command of the RELP frames.\",\n-                                \"name\": \"relp.command\"\n-                            },\n-                            {\n-                                \"description\": \"The sending host of the messages.\",\n-                                \"name\": \"relp.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The sending port the messages were received over.\",\n-                                \"name\": \"relp.port\"\n-                            },\n-                            {\n-                                \"description\": \"The transaction number of the message. Only included if <Batch Size> is 1.\",\n-                                \"name\": \"relp.txnr\"\n-                            },\n-                            {\n-                                \"description\": \"The mime.type of the content which is text/plain\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"Attributes retrieved from the SNMP response. It may include: snmp$errorIndex, snmp$errorStatus, snmp$errorStatusText, snmp$nonRepeaters, snmp$requestID, snmp$type, snmp$variableBindings\",\n+                                \"name\": \"snmp$*\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -111471,361 +111197,483 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the Syslog messages. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"snmp-authentication-passphrase\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n+                                \"displayName\": \"SNMP Authentication Passphrase\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-authentication-passphrase\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Client Auth\": {\n+                            \"snmp-authentication-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n+                                        \"displayName\": \"SHA\",\n+                                        \"value\": \"SHA\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA224\",\n+                                        \"value\": \"HMAC128SHA224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"HMAC192SHA256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"HMAC256SHA384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"HMAC384SHA512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n                                     }\n                                 ],\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n+                                \"displayName\": \"SNMP Authentication Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n-                                \"required\": false,\n+                                \"name\": \"snmp-authentication-protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n+                                \"displayName\": \"SNMP Community\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Local Network Interface\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-community\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Max Batch Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of Syslog events to add to a single FlowFile. If multiple events are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n-                                \"displayName\": \"Max Batch Size\",\n+                            \"snmp-private-protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"DES\",\n+                                        \"value\": \"DES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"3DES\",\n+                                        \"value\": \"3DES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES128\",\n+                                        \"value\": \"AES128\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES192\",\n+                                        \"value\": \"AES192\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES256\",\n+                                        \"value\": \"AES256\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n+                                \"displayName\": \"SNMP Privacy Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Batch Size\",\n+                                \"name\": \"snmp-private-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Number of TCP Connections\": {\n-                                \"defaultValue\": \"2\",\n+                            \"snmp-private-protocol-passphrase\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"TCP\"\n+                                            \"authPriv\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum number of concurrent connections to accept Syslog messages in TCP mode.\",\n-                                \"displayName\": \"Max Number of TCP Connections\",\n+                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n+                                \"displayName\": \"SNMP Privacy Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Number of TCP Connections\",\n+                                \"name\": \"snmp-private-protocol-passphrase\",\n                                 \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"snmp-retries\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Number of Retries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-retries\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\n+                            \"snmp-security-level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n+                                \"displayName\": \"SNMP Security Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n+                                \"name\": \"snmp-security-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n+                            \"snmp-security-name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"TCP\"\n+                                            \"SNMPv3\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                                \"description\": \"User name used for SNMP v3 Authentication.\",\n+                                \"displayName\": \"SNMP Security Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"name\": \"snmp-security-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Delimiter\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"description\": \"Specifies the delimiter to place between Syslog messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n-                                \"displayName\": \"Message Delimiter\",\n+                            \"snmp-timeout\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Timeout (ms)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Delimiter\",\n-                                \"required\": true,\n+                                \"name\": \"snmp-timeout\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Parse Messages\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"snmp-trap-agent-address\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates if the processor should parse the Syslog messages. If set to false, each outgoing FlowFile will only contain the sender, protocol, and port, and no additional attributes.\",\n-                                \"displayName\": \"Parse Messages\",\n+                                \"description\": \"The address where the SNMP Manager sends the trap.\",\n+                                \"displayName\": \"SNMP Trap Agent Address\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Parse Messages\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-agent-address\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port for Syslog communication. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Port\",\n+                            \"snmp-trap-enterprise-oid\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enterprise is the vendor identification (OID) for the network management sub-system that generated the trap.\",\n+                                \"displayName\": \"Enterprise OID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-enterprise-oid\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Protocol\": {\n+                            \"snmp-trap-generic-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TCP\",\n-                                        \"value\": \"TCP\"\n+                                        \"description\": \"A coldStart trap signifies that the sending protocol entity is reinitializing itself such that the agent's configuration or the protocol entity implementation may be altered\",\n+                                        \"displayName\": \"Cold Start\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UDP\",\n-                                        \"value\": \"UDP\"\n+                                        \"description\": \"A warmStart trap signifies that the sending protocol entity is reinitializing itself such that neither the agent configuration nor the protocol entity implementation is altered.\",\n+                                        \"displayName\": \"Warm Start\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A linkDown trap signifies that the sending protocol entity recognizes a failure in one of the communication links represented in the agent's configuration.\",\n+                                        \"displayName\": \"Link Down\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A linkUp trap signifies that the sending protocol entity recognizes that one of the communication links represented in the agent's configuration has come up.\",\n+                                        \"displayName\": \"Link Up\",\n+                                        \"value\": \"3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"An authenticationFailure trap signifies that the sending protocol entity is the addressee of a protocol message that is not properly authenticated. While implementations of the SNMP must be capable of generating this trap, they must also be capable of suppressing the emission of such traps via an implementation- specific mechanism.\",\n+                                        \"displayName\": \"Authentication Failure\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"An egpNeighborLoss trap signifies that an EGP neighbor for whom the sending protocol entity was an EGP peer has been marked down and the peer relationship no longer obtains\",\n+                                        \"displayName\": \"EGP Neighborloss\",\n+                                        \"value\": \"5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"An enterpriseSpecific trap signifies that a particular enterprise-specific trap has occurred which can be defined in the Specific Trap Type field.\",\n+                                        \"displayName\": \"Enterprise Specific\",\n+                                        \"value\": \"6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provide the Generic Trap Type with the \\\"generic-trap-type\\\" flowfile attribute.\",\n+                                        \"displayName\": \"With \\\"generic-trap-type\\\" FlowFile Attribute\",\n+                                        \"value\": \"generic-trap-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UDP\",\n-                                \"description\": \"The protocol for Syslog communication.\",\n-                                \"displayName\": \"Protocol\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"Generic trap type is an integer in the range of 0 to 6. See processor usage for details.\",\n+                                \"displayName\": \"Generic Trap Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protocol\",\n+                                \"name\": \"snmp-trap-generic-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive Syslog messages. Adjust this value appropriately based on the expected size of the incoming Syslog messages. When UDP is selected each buffer will hold one Syslog message. When TCP is selected messages are read from an incoming connection until the buffer is full, or the connection is closed. \",\n-                                \"displayName\": \"Receive Buffer Size\",\n+                            \"snmp-trap-manager-host\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The host of the SNMP Manager where the trap is sent.\",\n+                                \"displayName\": \"SNMP Manager Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-manager-host\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n+                            \"snmp-trap-manager-port\": {\n+                                \"description\": \"The port of the SNMP Manager where the trap is sent.\",\n+                                \"displayName\": \"SNMP Manager Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-manager-port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-trap-oid-value\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"TCP\"\n+                                            \"SNMPv3\",\n+                                            \"SNMPv2c\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     }\n                                 ],\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, syslog messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                                \"description\": \"The value of the trap OID.\",\n+                                \"displayName\": \"Trap OID Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-oid-value\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"socket-keep-alive\": {\n-                                \"allowableValues\": [\n+                            \"snmp-trap-specific-type\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"dependentValues\": [\n+                                            \"6\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Generic Trap Type\",\n+                                        \"propertyName\": \"snmp-trap-generic-type\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                \"description\": \"Specific trap type is a number that further specifies the nature of the event that generated the trap in the case of traps of generic type 6 (enterpriseSpecific). The interpretation of this code is vendor-specific.\",\n+                                \"displayName\": \"Specific Trap Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-specific-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-version\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"TCP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SNMP version 3 with improved security\",\n+                                        \"displayName\": \"v3\",\n+                                        \"value\": \"SNMPv3\"\n                                     }\n                                 ],\n-                                \"description\": \"Whether or not to have TCP socket keep alive turned on. Timing details depend on operating system properties.\",\n-                                \"displayName\": \"Socket Keep Alive\",\n+                                \"defaultValue\": \"SNMPv1\",\n+                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n+                                \"displayName\": \"SNMP Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"socket-keep-alive\",\n+                                \"name\": \"snmp-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n-                            \"org.apache.nifi.processors.standard.PutSyslog\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Syslog messages that match one of the expected formats will be sent out this relationship as a FlowFile per message.\",\n+                                \"description\": \"All FlowFiles that have been successfully used to perform SNMP Set are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Syslog messages that do not match one of the expected formats will be sent out this relationship as a FlowFile per message.\",\n-                                \"name\": \"invalid\"\n+                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"listen\",\n-                            \"logs\",\n-                            \"syslog\",\n-                            \"tcp\",\n-                            \"udp\"\n+                            \"send\",\n+                            \"snmp\",\n+                            \"trap\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenSyslog\",\n-                        \"typeDescription\": \"Listens for Syslog messages being sent to a given port over TCP or UDP. Incoming messages are checked against regular expressions for RFC5424 and RFC3164 formatted messages. The format of each message is: (<PRIORITY>)(VERSION )(TIMESTAMP) (HOSTNAME) (BODY) where version is optional. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\". If an incoming messages matches one of these patterns, the message will be parsed and the individual pieces will be placed in FlowFile attributes, with the original message in the content of the FlowFile. If an incoming message does not match one of these patterns it will not be parsed and the syslog.valid attribute will be set to false with the original message in the content of the FlowFile. Valid messages will be transferred on the success relationship, and invalid messages will be transferred on the invalid relationship.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The priority of the Syslog message.\",\n-                                \"name\": \"syslog.priority\"\n-                            },\n-                            {\n-                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.severity\"\n-                            },\n-                            {\n-                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.facility\"\n-                            },\n-                            {\n-                                \"description\": \"The optional version from the Syslog message.\",\n-                                \"name\": \"syslog.version\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the Syslog message.\",\n-                                \"name\": \"syslog.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname or IP address of the Syslog message.\",\n-                                \"name\": \"syslog.hostname\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n-                                \"name\": \"syslog.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n-                                \"name\": \"syslog.body\"\n-                            },\n-                            {\n-                                \"description\": \"An indicator of whether this message matched the expected formats. If this value is false, the other attributes will be empty and only the original message will be available in the content.\",\n-                                \"name\": \"syslog.valid\"\n-                            },\n-                            {\n-                                \"description\": \"The protocol over which the Syslog message was received.\",\n-                                \"name\": \"syslog.protocol\"\n-                            },\n-                            {\n-                                \"description\": \"The port over which the Syslog message was received.\",\n-                                \"name\": \"syslog.port\"\n-                            },\n-                            {\n-                                \"description\": \"The mime.type of the FlowFile which will be text/plain for Syslog messages.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.snmp.processors.SendTrapSNMP\",\n+                        \"typeDescription\": \"Sends information to SNMP Manager.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -111834,1520 +111682,2127 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the received data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"snmp-authentication-passphrase\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n+                                \"displayName\": \"SNMP Authentication Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"snmp-authentication-passphrase\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Client Auth\": {\n+                            \"snmp-authentication-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n+                                        \"displayName\": \"SHA\",\n+                                        \"value\": \"SHA\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA224\",\n+                                        \"value\": \"HMAC128SHA224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"HMAC192SHA256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"HMAC256SHA384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"HMAC384SHA512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n+                                \"displayName\": \"SNMP Authentication Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Local Network Interface\",\n-                                \"required\": false,\n+                                \"name\": \"snmp-authentication-protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Batch Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n-                                \"displayName\": \"Max Batch Size\",\n+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n+                                \"displayName\": \"SNMP Community\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Batch Size\",\n+                                \"name\": \"snmp-community\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Max Number of TCP Connections\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"The maximum number of worker threads available for servicing TCP connections.\",\n-                                \"displayName\": \"Max Number of Worker Threads\",\n+                            \"snmp-hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Hostname or network address of the SNMP Agent.\",\n+                                \"displayName\": \"SNMP Agent Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Number of TCP Connections\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"snmp-hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor during these surges.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\n+                            \"snmp-port\": {\n+                                \"defaultValue\": \"161\",\n+                                \"description\": \"Port of the SNMP Agent.\",\n+                                \"displayName\": \"SNMP Agent Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"snmp-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                            \"snmp-private-protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"DES\",\n+                                        \"value\": \"DES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"3DES\",\n+                                        \"value\": \"3DES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES128\",\n+                                        \"value\": \"AES128\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES192\",\n+                                        \"value\": \"AES192\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES256\",\n+                                        \"value\": \"AES256\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n+                                \"displayName\": \"SNMP Privacy Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"name\": \"snmp-private-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Delimiter\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n-                                \"displayName\": \"Batching Message Delimiter\",\n+                            \"snmp-private-protocol-passphrase\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n+                                \"displayName\": \"SNMP Privacy Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Delimiter\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"snmp-private-protocol-passphrase\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n-                                \"displayName\": \"Receive Buffer Size\",\n+                            \"snmp-retries\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Number of Retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n-                                \"required\": true,\n+                                \"name\": \"snmp-retries\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"snmp-security-level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n+                                \"displayName\": \"SNMP Security Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"snmp-security-level\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"idle-timeout\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The amount of time a client's connection will remain open if no data is received. The default of 0 seconds will leave connections open until they are closed by the client.\",\n-                                \"displayName\": \"Idle Connection Timeout\",\n+                            \"snmp-security-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"User name used for SNMP v3 Authentication.\",\n+                                \"displayName\": \"SNMP Security Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"idle-timeout\",\n+                                \"name\": \"snmp-security-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-receiving-threads\": {\n-                                \"description\": \"This property is deprecated and no longer used.\",\n-                                \"displayName\": \"Max Number of Receiving Message Handler Threads\",\n+                            \"snmp-timeout\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Timeout (ms)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-receiving-threads\",\n+                                \"name\": \"snmp-timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"pool-receive-buffers\": {\n+                            \"snmp-version\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SNMP version 3 with improved security\",\n+                                        \"displayName\": \"v3\",\n+                                        \"value\": \"SNMPv3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"True\",\n-                                \"description\": \"Enable or disable pooling of buffers that the processor uses for handling bytes received on socket connections. The framework allocates buffers as needed during processing.\",\n-                                \"displayName\": \"Pool Receive Buffers\",\n+                                \"defaultValue\": \"SNMPv1\",\n+                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n+                                \"displayName\": \"SNMP Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"pool-receive-buffers\",\n+                                \"name\": \"snmp-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"description\": \"All FlowFiles that have been successfully used to perform SNMP Set are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that failed during the SNMP Set care routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"listen\",\n-                            \"ssl\",\n-                            \"tcp\",\n-                            \"tls\"\n+                            \"oid\",\n+                            \"set\",\n+                            \"snmp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenTCP\",\n-                        \"typeDescription\": \"Listens for incoming TCP connections and reads data from each connection using a line separator as the message demarcator. The default behavior is for each message to produce a single FlowFile, however this can be controlled by increasing the Batch Size to a larger value for higher throughput. The Receive Buffer Size must be set as large as the largest messages expected to be received, meaning if every 100kb there is a line separator, then the Receive Buffer Size must be greater than 100kb. The processor can be configured to use an SSL Context Service to only allow secure connections. When connected clients present certificates for mutual TLS authentication, the Distinguished Names of the client certificate's issuer and subject are added to the outgoing FlowFiles as attributes. The processor does not perform authorization based on Distinguished Name values, but since these values are attached to the outgoing FlowFiles, authorization can be implemented based on these attributes.\",\n+                        \"type\": \"org.apache.nifi.snmp.processors.SetSNMP\",\n+                        \"typeDescription\": \"Based on incoming FlowFile attributes, the processor will execute SNMP Set requests. When finding attributes with the name snmp$<OID>, the processor will attempt to set the value of the attribute to the corresponding OID given in the attribute name.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The sending host of the messages.\",\n-                                \"name\": \"tcp.sender\"\n+                                \"description\": \"Response variable binding: OID (e.g. 1.3.6.1.4.1.343) and its value.\",\n+                                \"name\": \"snmp$<OID>\"\n                             },\n                             {\n-                                \"description\": \"The sending port the messages were received.\",\n-                                \"name\": \"tcp.port\"\n+                                \"description\": \"Denotes the variable binding in which the error occured.\",\n+                                \"name\": \"snmp$errorIndex\"\n                             },\n                             {\n-                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the Certificate Authority that issued the client's certificate is attached to the FlowFile.\",\n-                                \"name\": \"client.certificate.issuer.dn\"\n+                                \"description\": \"The snmp4j error status of the PDU.\",\n+                                \"name\": \"snmp$errorStatus\"\n                             },\n                             {\n-                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the client certificate's owner (subject) is attached to the FlowFile.\",\n-                                \"name\": \"client.certificate.subject.dn\"\n+                                \"description\": \"The description of error status.\",\n+                                \"name\": \"snmp$errorStatusText\"\n+                            },\n+                            {\n+                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n+                                \"name\": \"snmp$nonRepeaters\"\n+                            },\n+                            {\n+                                \"description\": \"The request ID associated with the PDU.\",\n+                                \"name\": \"snmp$requestID\"\n+                            },\n+                            {\n+                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n+                                \"name\": \"snmp$type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the PDU type.\",\n+                                \"name\": \"snmp$typeString\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-pgp-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-pgp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"key-password\": {\n+                                \"description\": \"Password used for decrypting Private Keys\",\n+                                \"displayName\": \"Key Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"keyring\": {\n+                                \"description\": \"PGP Keyring or Secret Key encoded in ASCII Armor\",\n+                                \"displayName\": \"Keyring\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"keyring\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"keyring-file\": {\n+                                \"description\": \"File path to PGP Keyring or Secret Key encoded in binary or ASCII Armor\",\n+                                \"displayName\": \"Keyring File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"keyring-file\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n                         },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"Key\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"Private\",\n+                            \"RFC 4880\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.pgp.service.standard.StandardPGPPrivateKeyService\",\n+                        \"typeDescription\": \"PGP Private Key Service provides Private Keys loaded from files or properties\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n+                            \"keyring\": {\n+                                \"description\": \"PGP Keyring or Public Key encoded in ASCII Armor\",\n+                                \"displayName\": \"Keyring\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"keyring\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"keyring-file\": {\n+                                \"description\": \"File path to PGP Keyring or Public Key encoded in binary or ASCII Armor\",\n+                                \"displayName\": \"Keyring File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Local Network Interface\",\n+                                \"name\": \"keyring-file\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"Key\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"Private\",\n+                            \"RFC 4880\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.pgp.service.standard.StandardPGPPublicKeyService\",\n+                        \"typeDescription\": \"PGP Public Key Service providing Public Keys loaded from files\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-azure-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"credential-configuration-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Uses default credential chain. It first checks environment variables, before trying managed identity.\",\n+                                        \"displayName\": \"Default Credential\",\n+                                        \"value\": \"default-credential\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n+                                        \"displayName\": \"Managed Identity\",\n+                                        \"value\": \"managed-identity\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"default-credential\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Credential Configuration Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"credential-configuration-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"client-auth\": {\n+                            \"managed-identity-client-id\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"managed-identity\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credential Configuration Strategy\",\n+                                        \"propertyName\": \"credential-configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n+                                \"displayName\": \"Managed Identity Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"managed-identity-client-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.AzureCredentialsService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"credentials\",\n+                            \"provider\",\n+                            \"security\",\n+                            \"session\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.StandardAzureCredentialsControllerService\",\n+                        \"typeDescription\": \"Provide credentials to use with an Azure client.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"azure-cosmos-db-consistency-level\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"displayName\": \"STRONG\",\n+                                        \"value\": \"STRONG\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"displayName\": \"BOUNDED_STALENESS\",\n+                                        \"value\": \"BOUNDED_STALENESS\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"SESSION\",\n+                                        \"value\": \"SESSION\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CONSISTENT_PREFIX\",\n+                                        \"value\": \"CONSISTENT_PREFIX\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EVENTUAL\",\n+                                        \"value\": \"EVENTUAL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"SESSION\",\n+                                \"description\": \"Choose from five consistency levels on the consistency spectrum. Refer to Cosmos DB documentation for their differences\",\n+                                \"displayName\": \"Cosmos DB Consistency Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-auth\",\n+                                \"name\": \"azure-cosmos-db-consistency-level\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-number-tcp-connections\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"The maximum number of concurrent TCP connections to accept. In cases where clients are keeping a connection open, the concurrent tasks for the processor should be adjusted to match the Max Number of TCP Connections allowed, so that there is a task processing each connection.\",\n-                                \"displayName\": \"Max Number of TCP Connections\",\n+                            \"azure-cosmos-db-key\": {\n+                                \"description\": \"Cosmos DB Access Key from Azure Portal (Settings->Keys). Choose a read-write key to enable database or container creation at run time\",\n+                                \"displayName\": \"Cosmos DB Access Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-number-tcp-connections\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"azure-cosmos-db-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"max-size-socket-buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                            \"azure-cosmos-db-uri\": {\n+                                \"description\": \"Cosmos DB URI, typically in the form of https://{databaseaccount}.documents.azure.com:443/ Note this host URL is for Cosmos DB with Core SQL API from Azure Portal (Overview->URI)\",\n+                                \"displayName\": \"Cosmos DB URI\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-size-socket-buffer\",\n+                                \"name\": \"azure-cosmos-db-uri\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"cosmos\",\n+                            \"document\",\n+                            \"service\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.cosmos.document.AzureCosmosDBClientService\",\n+                        \"typeDescription\": \"Provides a controller service that configures a connection to Cosmos DB (Core SQL API)  and provides access to that connection to other Cosmos DB-related components.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Authentication Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Azure Event Hub shared access key\",\n+                                        \"displayName\": \"Shared Access Key\",\n+                                        \"value\": \"SHARED_ACCESS_KEY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Default Azure Credential will read credentials from standard environment variables and will also attempt to read Managed Identity credentials when running in Microsoft Azure environments\",\n+                                        \"displayName\": \"Default Azure Credential\",\n+                                        \"value\": \"DEFAULT_AZURE_CREDENTIAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DEFAULT_AZURE_CREDENTIAL\",\n+                                \"description\": \"Strategy for authenticating to Azure Event Hubs\",\n+                                \"displayName\": \"Authentication Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Authentication Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\n+                            \"Event Hub Name\": {\n+                                \"description\": \"Provides the Event Hub Name for connections\",\n+                                \"displayName\": \"Event Hub Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"read-timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait before timing out when reading from a connection.\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"Event Hub Namespace\": {\n+                                \"description\": \"Provides provides the host for connecting to Azure Event Hubs\",\n+                                \"displayName\": \"Event Hub Namespace\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"read-timeout\",\n+                                \"name\": \"Event Hub Namespace\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"reader-error-handling-strategy\": {\n+                            \"Partition Key\": {\n+                                \"description\": \"A hint for Azure Event Hub message broker how to distribute messages across one or more partitions\",\n+                                \"displayName\": \"Partition Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Partition Key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Service Bus Endpoint\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Transfers any records already received and closes the connection.\",\n-                                        \"displayName\": \"Transfer\",\n-                                        \"value\": \"Transfer\"\n+                                        \"description\": \"Default Service Bus Endpoint\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n                                     },\n                                     {\n-                                        \"description\": \"Discards any records already received and closes the connection.\",\n-                                        \"displayName\": \"Discard\",\n-                                        \"value\": \"Discard\"\n+                                        \"description\": \"China Service Bus Endpoint\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Germany Service Bus Endpoint\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n+                                    },\n+                                    {\n+                                        \"description\": \"United States Government Endpoint\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Transfer\",\n-                                \"description\": \"Indicates how to deal with an error while reading the next record from a connection, when previous records have already been read from the connection.\",\n-                                \"displayName\": \"Read Error Strategy\",\n+                                \"defaultValue\": \".servicebus.windows.net\",\n+                                \"description\": \"Provides the domain for connecting to Azure Event Hubs\",\n+                                \"displayName\": \"Service Bus Endpoint\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reader-error-handling-strategy\",\n+                                \"name\": \"Service Bus Endpoint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-batch-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum number of records to write to a single FlowFile.\",\n-                                \"displayName\": \"Record Batch Size\",\n+                            \"Shared Access Policy\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SHARED_ACCESS_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"Authentication Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The name of the shared access policy. This policy must have Send claims\",\n+                                \"displayName\": \"Shared Access Policy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-batch-size\",\n-                                \"required\": true,\n+                                \"name\": \"Shared Access Policy\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Shared Access Policy Key\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SHARED_ACCESS_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"Authentication Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The primary or secondary key of the shared access policy\",\n+                                \"displayName\": \"Shared Access Policy Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"Shared Access Policy Key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Transport Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n+                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n+                                        \"value\": \"AmqpWebSockets\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Amqp\",\n+                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n+                                \"displayName\": \"Transport Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transport Type\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before writing to a FlowFile\",\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"record-sink-record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"record\",\n+                            \"sink\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.eventhub.AzureEventHubRecordSink\",\n+                        \"typeDescription\": \"Format and send Records to Azure Event Hubs\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"managed-identity-client-id\": {\n+                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n+                                \"displayName\": \"Managed Identity Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"managed-identity-client-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"service-principal-client-id\": {\n+                                \"description\": \"Client ID (or Application ID) of the Client/Application having the Service Principal. The property is required when Service Principal authentication is used.\",\n+                                \"displayName\": \"Service Principal Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-client-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"service-principal-client-secret\": {\n+                                \"description\": \"Password of the Client/Application. The property is required when Service Principal authentication is used.\",\n+                                \"displayName\": \"Service Principal Client Secret\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-client-secret\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"service-principal-tenant-id\": {\n+                                \"description\": \"Tenant ID of the Azure Active Directory hosting the Service Principal. The property is required when Service Principal authentication is used.\",\n+                                \"displayName\": \"Service Principal Tenant ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-tenant-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-name\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-endpoint-suffix\": {\n+                                \"defaultValue\": \"dfs.core.windows.net\",\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n+                                \"displayName\": \"Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-use-managed-identity\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n+                                \"displayName\": \"Use Azure Managed Identity\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-use-managed-identity\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"listen\",\n-                            \"record\",\n-                            \"ssl\",\n-                            \"tcp\",\n-                            \"tls\"\n+                            \"adls\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenTCPRecord\",\n-                        \"typeDescription\": \"Listens for incoming TCP connections and reads data from each connection using a configured record reader, and writes the records to a flow file using a configured record writer. The type of record reader selected will determine how clients are expected to send data. For example, when using a Grok reader to read logs, a client can keep an open connection and continuously stream data, but when using an JSON reader, the client cannot send an array of JSON documents and then send another array on the same connection, as the reader would be in a bad state at that point. Records will be read from the connection in blocking mode, and will timeout according to the Read Timeout specified in the processor. If the read times out, or if any other error is encountered when reading, the connection will be closed, and any records read up to that point will be handled according to the configured Read Error Strategy (Discard or Transfer). In cases where clients are keeping a connection open, the concurrent tasks for the processor should be adjusted to match the Max Number of TCP Connections allowed, so that there is a task processing each connection. The processor can be configured to use an SSL Context Service to only allow secure connections. When connected clients present certificates for mutual TLS authentication, the Distinguished Names of the client certificate's issuer and subject are added to the outgoing FlowFiles as attributes. The processor does not perform authorization based on Distinguished Name values, but since these values are attached to the outgoing FlowFiles, authorization can be implemented based on these attributes.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The host that sent the data.\",\n-                                \"name\": \"tcp.sender\"\n-                            },\n+                        \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsControllerService\",\n+                        \"typeDescription\": \"Defines credentials for ADLS processors.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"dynamicProperties\": [\n                             {\n-                                \"description\": \"The port that the processor accepted the connection on.\",\n-                                \"name\": \"tcp.port\"\n-                            },\n+                                \"description\": \"If 'adls.credentials.name' attribute contains the name of the dynamic property, then the ADLSCredentialsService (registered in the value) will be selected.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name to register ADLSCredentialsService\",\n+                                \"value\": \"The ADLSCredentialsService\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The number of records written to the flow file.\",\n-                                \"name\": \"record.count\"\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"adls\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsControllerServiceLookup\",\n+                        \"typeDescription\": \"Provides an ADLSCredentialsService that can be used to dynamically select another ADLSCredentialsService. This service requires an attribute named 'adls.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'adls.credentials.name' will be used to select the ADLSCredentialsService that has been registered with that name. This will allow multiple ADLSCredentialsServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'adls.credentials.name' attribute.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"The mime-type of the writer used to write the records to the flow file.\",\n-                                \"name\": \"mime.type\"\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-name\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the Certificate Authority that issued the client's certificate is attached to the FlowFile.\",\n-                                \"name\": \"client.certificate.issuer.dn\"\n+                            \"storage-endpoint-suffix\": {\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the client certificate's owner (subject) is attached to the FlowFile.\",\n-                                \"name\": \"client.certificate.subject.dn\"\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                \"version\": \"1.27.0\"\n                             }\n-                        ]\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService\",\n+                        \"typeDescription\": \"Defines credentials for Azure Storage processors. Uses Account Name with Account Key or Account Name with SAS Token.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If 'azure.storage.credentials.name' attribute contains the name of the dynamic property, then the AzureStorageCredentialsService (registered in the value) will be selected.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name to register AzureStorageCredentialsService\",\n+                                \"value\": \"The AzureStorageCredentialsService\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerServiceLookup\",\n+                        \"typeDescription\": \"Provides an AzureStorageCredentialsService that can be used to dynamically select another AzureStorageCredentialsService. This service requires an attribute named 'azure.storage.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'azure.storage.credentials.name' will be used to select the AzureStorageCredentialsService that has been registered with that name. This will allow multiple AzureStorageCredentialsServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'azure.storage.credentials.name' attribute.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If 'azure.storage.credentials.name' attribute contains the name of the dynamic property, then the AzureStorageCredentialsService_v12 (registered in the value) will be selected.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name to register AzureStorageCredentialsService_v12\",\n+                                \"value\": \"The AzureStorageCredentialsService_v12\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerServiceLookup_v12\",\n+                        \"typeDescription\": \"Provides an AzureStorageCredentialsService_v12 that can be used to dynamically select another AzureStorageCredentialsService_v12. This service requires an attribute named 'azure.storage.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'azure.storage.credentials.name' will be used to select the AzureStorageCredentialsService_v12 that has been registered with that name. This will allow multiple AzureStorageCredentialsServices_v12 to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'azure.storage.credentials.name' attribute.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the received data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"credentials-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The primary or secondary Account Key of the storage account that provides full access to the resources in the account\",\n+                                        \"displayName\": \"Account Key\",\n+                                        \"value\": \"ACCOUNT_KEY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SAS (Shared Access Signature) Token generated for accessing resources in the storage account\",\n+                                        \"displayName\": \"SAS Token\",\n+                                        \"value\": \"SAS_TOKEN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n+                                        \"displayName\": \"Managed Identity\",\n+                                        \"value\": \"MANAGED_IDENTITY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Azure Active Directory Service Principal with Client Id / Client Secret of a registered application\",\n+                                        \"displayName\": \"Service Principal\",\n+                                        \"value\": \"SERVICE_PRINCIPAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SAS_TOKEN\",\n+                                \"description\": \"Credentials type to be used for authenticating to Azure\",\n+                                \"displayName\": \"Credentials Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"credentials-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"managed-identity-client-id\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"MANAGED_IDENTITY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n+                                \"displayName\": \"Managed Identity Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"managed-identity-client-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SERVICE_PRINCIPAL\",\n+                                            \"MANAGED_IDENTITY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Local Network Interface\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Max Batch Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n-                                \"displayName\": \"Max Batch Size\",\n+                            \"service-principal-client-id\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SERVICE_PRINCIPAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Client ID (or Application ID) of the Client/Application having the Service Principal. The property is required when Service Principal authentication is used.\",\n+                                \"displayName\": \"Service Principal Client ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Batch Size\",\n+                                \"name\": \"service-principal-client-id\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\n+                            \"service-principal-client-secret\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SERVICE_PRINCIPAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password of the Client/Application. The property is required when Service Principal authentication is used.\",\n+                                \"displayName\": \"Service Principal Client Secret\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n+                                \"name\": \"service-principal-client-secret\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                            \"service-principal-tenant-id\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SERVICE_PRINCIPAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Tenant ID of the Azure Active Directory hosting the Service Principal. The property is required when Service Principal authentication is used.\",\n+                                \"displayName\": \"Service Principal Tenant ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"name\": \"service-principal-tenant-id\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Message Delimiter\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n-                                \"displayName\": \"Batching Message Delimiter\",\n+                            \"storage-account-key\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"ACCOUNT_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies.\",\n+                                \"displayName\": \"Account Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Delimiter\",\n+                                \"name\": \"storage-account-key\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name.\",\n+                                \"displayName\": \"Storage Account Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-account-name\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n-                                \"displayName\": \"Receive Buffer Size\",\n+                            \"storage-endpoint-suffix\": {\n+                                \"defaultValue\": \"blob.core.windows.net\",\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n+                                \"displayName\": \"Endpoint Suffix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n+                                \"name\": \"storage-endpoint-suffix\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Sending Host\": {\n-                                \"description\": \"IP, or name, of a remote host. Only Datagrams from the specified Sending Host Port and this host will be accepted. Improves Performance. May be a system property or an environment variable.\",\n-                                \"displayName\": \"Sending Host\",\n+                            \"storage-sas-token\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SAS_TOKEN\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key.\",\n+                                \"displayName\": \"SAS Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Sending Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Sending Host Port\": {\n-                                \"description\": \"Port being used by remote host to send Datagrams. Only Datagrams from the specified Sending Host and this port will be accepted. Improves Performance. May be a system property or an environment variable.\",\n-                                \"displayName\": \"Sending Host Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService_v12\",\n+                        \"typeDescription\": \"Provides credentials for Azure Storage processors using Azure Storage client library v12.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"azurite-uri\": {\n+                                \"description\": \"URI to connect to Azure Storage Emulator (Azurite)\",\n+                                \"displayName\": \"Storage Emulator URI\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Sending Host Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azurite-uri\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"source\",\n-                            \"udp\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"credentials\",\n+                            \"emulator\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenUDP\",\n-                        \"typeDescription\": \"Listens for Datagram Packets on a given port. The default behavior produces a FlowFile per datagram, however for higher throughput the Max Batch Size property may be increased to specify the number of datagrams to batch together in a single FlowFile. This processor can be restricted to listening for datagrams from  a specific remote host and port by specifying the Sending Host and Sending Host Port properties, otherwise it will listen for datagrams from all hosts and ports.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The sending host of the messages.\",\n-                                \"name\": \"udp.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The sending port the messages were received.\",\n-                                \"name\": \"udp.port\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageEmulatorCredentialsControllerService\",\n+                        \"typeDescription\": \"Defines credentials for Azure Storage processors that connects to Azurite emulator.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the received data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"azure-cosmos-db-conflict-handling-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Conflicting records will not be inserted, and FlowFile will not be routed to failure\",\n+                                        \"displayName\": \"Ignore\",\n+                                        \"value\": \"IGNORE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Conflicting records will be upserted, and FlowFile will not be routed to failure\",\n+                                        \"displayName\": \"Upsert\",\n+                                        \"value\": \"UPSERT\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"IGNORE\",\n+                                \"description\": \"Choose whether to ignore or upsert when conflict error occurs during insertion\",\n+                                \"displayName\": \"Cosmos DB Conflict Handling Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n+                                \"name\": \"azure-cosmos-db-conflict-handling-strategy\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n+                            \"azure-cosmos-db-connection-service\": {\n+                                \"description\": \"If configured, the controller service used to obtain the connection string and access key\",\n+                                \"displayName\": \"Cosmos DB Connection Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Local Network Interface\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-connection-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\n+                            \"azure-cosmos-db-consistency-level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"STRONG\",\n+                                        \"value\": \"STRONG\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BOUNDED_STALENESS\",\n+                                        \"value\": \"BOUNDED_STALENESS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SESSION\",\n+                                        \"value\": \"SESSION\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CONSISTENT_PREFIX\",\n+                                        \"value\": \"CONSISTENT_PREFIX\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EVENTUAL\",\n+                                        \"value\": \"EVENTUAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SESSION\",\n+                                \"description\": \"Choose from five consistency levels on the consistency spectrum. Refer to Cosmos DB documentation for their differences\",\n+                                \"displayName\": \"Cosmos DB Consistency Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n-                                \"required\": true,\n+                                \"name\": \"azure-cosmos-db-consistency-level\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                            \"azure-cosmos-db-container-id\": {\n+                                \"description\": \"The unique identifier for the container\",\n+                                \"displayName\": \"Cosmos DB Container ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"name\": \"azure-cosmos-db-container-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\n+                            \"azure-cosmos-db-key\": {\n+                                \"description\": \"Cosmos DB Access Key from Azure Portal (Settings->Keys). Choose a read-write key to enable database or container creation at run time\",\n+                                \"displayName\": \"Cosmos DB Access Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n-                                \"displayName\": \"Receive Buffer Size\",\n+                            \"azure-cosmos-db-name\": {\n+                                \"description\": \"The database name or id. This is used as the namespace for document collections or containers\",\n+                                \"displayName\": \"Cosmos DB Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n+                                \"name\": \"azure-cosmos-db-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"batch-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum number of datagrams to write as records to a single FlowFile. The Batch Size will only be reached when data is coming in more frequently than the Poll Timeout.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"azure-cosmos-db-partition-key\": {\n+                                \"description\": \"The partition key used to distribute data among servers\",\n+                                \"displayName\": \"Cosmos DB Partition Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch-size\",\n+                                \"name\": \"azure-cosmos-db-partition-key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"poll-timeout\": {\n-                                \"defaultValue\": \"50 ms\",\n-                                \"description\": \"The amount of time to wait when polling the internal queue for more datagrams. If no datagrams are found after waiting for the configured timeout, then the processor will emit whatever records have been obtained up to that point.\",\n-                                \"displayName\": \"Poll Timeout\",\n+                            \"azure-cosmos-db-uri\": {\n+                                \"description\": \"Cosmos DB URI, typically in the form of https://{databaseaccount}.documents.azure.com:443/ Note this host URL is for Cosmos DB with Core SQL API from Azure Portal (Overview->URI)\",\n+                                \"displayName\": \"Cosmos DB URI\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"poll-timeout\",\n-                                \"required\": true,\n+                                \"name\": \"azure-cosmos-db-uri\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"insert-batch-size\": {\n+                                \"defaultValue\": \"20\",\n+                                \"description\": \"The number of records to group together for one single insert operation against Cosmos DB\",\n+                                \"displayName\": \"Insert Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"insert-batch-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for reading the content of incoming datagrams.\",\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n                                 \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before writing to a flow file.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"sending-host\": {\n-                                \"description\": \"IP, or name, of a remote host. Only Datagrams from the specified Sending Host Port and this host will be accepted. Improves Performance. May be a system property or an environment variable.\",\n-                                \"displayName\": \"Sending Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sending-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sending-host-port\": {\n-                                \"description\": \"Port being used by remote host to send Datagrams. Only Datagrams from the specified Sending Host and this port will be accepted. Improves Performance. May be a system property or an environment variable.\",\n-                                \"displayName\": \"Sending Host Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sending-host-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"description\": \"All FlowFiles that are written to Cosmos DB are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a datagram cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n+                                \"description\": \"All FlowFiles that cannot be written to Cosmos DB are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"record\",\n-                            \"source\",\n-                            \"udp\"\n+                            \"azure\",\n+                            \"cosmos\",\n+                            \"insert\",\n+                            \"put\",\n+                            \"record\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenUDPRecord\",\n-                        \"typeDescription\": \"Listens for Datagram Packets on a given port and reads the content of each datagram using the configured Record Reader. Each record will then be written to a flow file using the configured Record Writer. This processor can be restricted to listening for datagrams from  a specific remote host and port by specifying the Sending Host and Sending Host Port properties, otherwise it will listen for datagrams from all hosts and ports.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The sending host of the messages.\",\n-                                \"name\": \"udp.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The sending port the messages were received.\",\n-                                \"name\": \"udp.port\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records written to the flow file.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The mime-type of the writer used to write the records to the flow file.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.azure.cosmos.document.PutAzureCosmosDBRecord\",\n+                        \"typeDescription\": \"This processor is a record-aware processor for inserting data into Cosmos DB with Core SQL API. It uses a configured record reader and schema to read an incoming record set from the body of a Flowfile and then inserts those records into a configured Cosmos DB Container.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attributes to Ignore\": {\n-                                \"description\": \"A comma-separated list of Attributes to ignore. If not specified, no attributes will be ignored unless `Attributes to Ignore by Regular Expression` is modified. There's an OR relationship between the two properties.\",\n-                                \"displayName\": \"Attributes to Ignore\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to Ignore\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Attributes to Log\": {\n-                                \"description\": \"A comma-separated list of Attributes to Log. If not specified, all attributes will be logged unless `Attributes to Log by Regular Expression` is modified. There's an AND relationship between the two properties.\",\n-                                \"displayName\": \"Attributes to Log\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to Log\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Log FlowFile Properties\": {\n+                            \"Service Bus Endpoint\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Servicebus endpoint for general use\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Servicebus endpoint for China\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Servicebus endpoint for Germany\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Servicebus endpoint for US Government\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not to log FlowFile \\\"properties\\\", such as Entry Date, Lineage Start Date, and content size\",\n-                                \"displayName\": \"Log FlowFile Properties\",\n+                                \"defaultValue\": \".servicebus.windows.net\",\n+                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n+                                \"displayName\": \"Service Bus Endpoint\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log FlowFile Properties\",\n+                                \"name\": \"Service Bus Endpoint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Level\": {\n+                            \"Transport Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"trace\",\n-                                        \"value\": \"trace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"debug\",\n-                                        \"value\": \"debug\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"info\",\n-                                        \"value\": \"info\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"warn\",\n-                                        \"value\": \"warn\"\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"error\",\n-                                        \"value\": \"error\"\n+                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n+                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n+                                        \"value\": \"AmqpWebSockets\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"info\",\n-                                \"description\": \"The Log Level to use when logging the Attributes\",\n-                                \"displayName\": \"Log Level\",\n+                                \"defaultValue\": \"Amqp\",\n+                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n+                                \"displayName\": \"Transport Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log Level\",\n+                                \"name\": \"Transport Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Payload\": {\n+                            \"checkpoint-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Use Azure Blob Storage to store partition ownership and checkpoint information\",\n+                                        \"displayName\": \"Azure Blob Storage\",\n+                                        \"value\": \"AZURE_BLOB_STORAGE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Use component state to store partition ownership and checkpoint information\",\n+                                        \"displayName\": \"Component State\",\n+                                        \"value\": \"COMPONENT_STATE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the FlowFile's payload will be logged, in addition to its attributes; otherwise, just the Attributes will be logged.\",\n-                                \"displayName\": \"Log Payload\",\n+                                \"defaultValue\": \"AZURE_BLOB_STORAGE\",\n+                                \"description\": \"Specifies which strategy to use for storing and retrieving partition ownership and checkpoint information for each partition.\",\n+                                \"displayName\": \"Checkpoint Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log Payload\",\n+                                \"name\": \"checkpoint-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log prefix\": {\n-                                \"description\": \"Log prefix appended to the log lines. It helps to distinguish the output of multiple LogAttribute processors.\",\n-                                \"displayName\": \"Log prefix\",\n+                            \"event-hub-batch-size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The number of messages to process within a NiFi session. This parameter affects throughput and consistency. NiFi commits its session and Event Hubs checkpoints after processing this number of messages. If NiFi session is committed, but fails to create an Event Hubs checkpoint, then it is possible that the same messages will be received again. The higher number, the higher throughput, but possibly less consistent.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Log prefix\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"event-hub-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-consumer-group\": {\n+                                \"defaultValue\": \"$Default\",\n+                                \"description\": \"The name of the consumer group to use.\",\n+                                \"displayName\": \"Consumer Group\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"event-hub-consumer-group\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-consumer-hostname\": {\n+                                \"description\": \"DEPRECATED: This property is no longer used.\",\n+                                \"displayName\": \"Consumer Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"event-hub-consumer-hostname\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Format\": {\n+                            \"event-hub-initial-offset\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Each FlowFile attribute will be logged using a single line for the attribute name and another line for the attribute value. This format is often most advantageous when looking at the attributes of a single FlowFile.\",\n-                                        \"displayName\": \"Line per Attribute\",\n-                                        \"value\": \"Line per Attribute\"\n+                                        \"description\": \"Read from the oldest message retained in the stream.\",\n+                                        \"displayName\": \"Start of stream\",\n+                                        \"value\": \"start-of-stream\"\n                                     },\n                                     {\n-                                        \"description\": \"All FlowFile attribute names and values will be logged on a single line. This format is often most advantageous when comparing logs from multiple FlowFiles.\",\n-                                        \"displayName\": \"Single Line\",\n-                                        \"value\": \"Single Line\"\n+                                        \"description\": \"Ignore old retained messages even if exist, start reading new ones from now.\",\n+                                        \"displayName\": \"End of stream\",\n+                                        \"value\": \"end-of-stream\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Line per Attribute\",\n-                                \"description\": \"Specifies the format to use for logging FlowFile attributes\",\n-                                \"displayName\": \"Output Format\",\n+                                \"defaultValue\": \"end-of-stream\",\n+                                \"description\": \"Specify where to start receiving messages if offset is not yet stored in the checkpoint store.\",\n+                                \"displayName\": \"Initial Offset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Format\",\n+                                \"name\": \"event-hub-initial-offset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attributes-to-ignore-regex\": {\n-                                \"description\": \"A regular expression indicating the Attributes to Ignore. If not specified, no attributes will be ignored unless `Attributes to Ignore` is modified. There's an OR relationship between the two properties.\",\n-                                \"displayName\": \"Attributes to Ignore by Regular Expression\",\n+                            \"event-hub-message-receive-timeout\": {\n+                                \"defaultValue\": \"1 min\",\n+                                \"description\": \"The amount of time this consumer should wait to receive the Batch Size before returning.\",\n+                                \"displayName\": \"Message Receive Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attributes-to-ignore-regex\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"event-hub-message-receive-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attributes-to-log-regex\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A regular expression indicating the Attributes to Log. If not specified, all attributes will be logged unless `Attributes to Log` is modified. There's an AND relationship between the two properties.\",\n-                                \"displayName\": \"Attributes to Log by Regular Expression\",\n+                            \"event-hub-name\": {\n+                                \"description\": \"The name of the event hub to pull messages from.\",\n+                                \"displayName\": \"Event Hub Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attributes-to-log-regex\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"event-hub-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The name of the CharacterSet to use\",\n-                                \"displayName\": \"Character Set\",\n+                            \"event-hub-namespace\": {\n+                                \"description\": \"The namespace that the Azure Event Hubs is assigned to. This is generally equal to <Event Hub Names>-ns.\",\n+                                \"displayName\": \"Event Hub Namespace\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"character-set\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"event-hub-namespace\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"logging\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.LogAttribute\",\n-                        \"typeDescription\": \"Emits attributes of the FlowFile at the specified log level\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"log-level\": {\n-                                \"defaultValue\": \"info\",\n-                                \"description\": \"The Log Level to use when logging the message: [trace, debug, info, warn, error]\",\n-                                \"displayName\": \"Log Level\",\n+                            },\n+                            \"event-hub-prefetch-count\": {\n+                                \"defaultValue\": \"300\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Prefetch Count\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"log-level\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"event-hub-prefetch-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"log-message\": {\n-                                \"description\": \"The log message to emit\",\n-                                \"displayName\": \"Log message\",\n+                            \"event-hub-shared-access-policy-name\": {\n+                                \"description\": \"The name of the shared access policy. This policy must have Listen claims.\",\n+                                \"displayName\": \"Shared Access Policy Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"log-message\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"event-hub-shared-access-policy-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"log-prefix\": {\n-                                \"description\": \"Log prefix appended to the log lines. It helps to distinguish the output of multiple LogMessage processors.\",\n-                                \"displayName\": \"Log prefix\",\n+                            \"event-hub-shared-access-policy-primary-key\": {\n+                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n+                                \"displayName\": \"Shared Access Policy Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"log-prefix\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"event-hub-shared-access-policy-primary-key\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"logging\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.LogMessage\",\n-                        \"typeDescription\": \"Emits a log message at the specified log level\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds a FlowFile attribute specified by the dynamic property's key with the value found in the lookup service using the the dynamic property's value\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of the attribute to add to the FlowFile\",\n-                                \"value\": \"The name of the key or property to retrieve from the lookup service\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"include-empty-values\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                                \"sensitive\": true\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"AmqpWebSockets\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transport Type\",\n+                                        \"propertyName\": \"Transport Type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Include null or blank values for keys that are null or blank\",\n-                                \"displayName\": \"Include Empty Values\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-empty-values\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"lookup-service\": {\n-                                \"description\": \"The lookup service to use for attribute lookups\",\n-                                \"displayName\": \"Lookup Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles with failing lookups are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles with missing lookups are routed to this relationship\",\n-                                \"name\": \"unmatched\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles with matching lookups are routed to this relationship\",\n-                                \"name\": \"matched\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"attributes\",\n-                            \"cache\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"lookup\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.LookupAttribute\",\n-                        \"typeDescription\": \"Lookup attributes from a lookup service\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"A RecordPath that points to the field whose value will be looked up in the configured Lookup Service\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Value To Lookup\",\n-                                \"value\": \"Valid Record Path\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"lookup-service\": {\n-                                \"description\": \"The Lookup Service to use in order to lookup a value in each Record\",\n-                                \"displayName\": \"Lookup Service\",\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-service\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"record-path-lookup-miss-result-cache-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies how many lookup values/records should be cached.Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"record-path-lookup-miss-result-cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n                             \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"description\": \"The Record Reader to use for reading received messages. The event hub name can be referred by Expression Language '${eventhub.name}' to access a schema.\",\n                                 \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"record-update-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The \\\"Result RecordPath\\\" property will be ignored and the lookup service must be a single simple key lookup service. Every dynamic property value should be a record path. For each dynamic property, the value contained in the field corresponding to the record path will be used as the key in the Lookup Service and the value returned by the Lookup Service will be used to replace the existing value. It is possible to configure multiple dynamic properties to replace multiple values in one execution. This strategy only supports simple types replacements (strings, integers, etc).\",\n-                                        \"displayName\": \"Replace Existing Values\",\n-                                        \"value\": \"replace-existing-values\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The \\\"Result RecordPath\\\" property will be used to determine which part of the record should be updated with the value returned by the Lookup Service\",\n-                                        \"displayName\": \"Use Property\",\n-                                        \"value\": \"use-property\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"use-property\",\n-                                \"description\": \"This property defines the strategy to use when updating the record with the value returned by the Lookup Service.\",\n-                                \"displayName\": \"Record Update Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-update-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n                             \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile. The event hub name can be referred by Expression Language '${eventhub.name}' to access a schema. If not specified, each message will create a FlowFile.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"result-contents\": {\n-                                \"allowableValues\": [\n+                            \"storage-account-key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"The entire Record that is retrieved from the Lookup Service will be inserted into the destination path.\",\n-                                        \"displayName\": \"Insert Entire Record\",\n-                                        \"value\": \"insert-entire-record\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"AZURE_BLOB_STORAGE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n+                                        \"propertyName\": \"checkpoint-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Azure Storage account key to store event hub consumer group state.\",\n+                                \"displayName\": \"Storage Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"All of the fields in the Record that is retrieved from the Lookup Service will be inserted into the destination path.\",\n-                                        \"displayName\": \"Insert Record Fields\",\n-                                        \"value\": \"record-fields\"\n+                                        \"dependentValues\": [\n+                                            \"AZURE_BLOB_STORAGE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n+                                        \"propertyName\": \"checkpoint-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"insert-entire-record\",\n-                                \"description\": \"When a result is obtained that contains a Record, this property determines whether the Record itself is inserted at the configured path or if the contents of the Record (i.e., the sub-fields) will be inserted at the configured path.\",\n-                                \"displayName\": \"Record Result Contents\",\n+                                \"description\": \"Name of the Azure Storage account to store event hub consumer group state.\",\n+                                \"displayName\": \"Storage Account Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"result-contents\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"storage-account-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"result-record-path\": {\n-                                \"description\": \"A RecordPath that points to the field whose value should be updated with whatever value is returned from the Lookup Service. If not specified, the value that is returned from the Lookup Service will be ignored, except for determining whether the FlowFile should be routed to the 'matched' or 'unmatched' Relationship.\",\n-                                \"displayName\": \"Result RecordPath\",\n+                            \"storage-container-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AZURE_BLOB_STORAGE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n+                                        \"propertyName\": \"checkpoint-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Name of the Azure Storage container to store the event hub consumer group state. If not specified, event hub name is used.\",\n+                                \"displayName\": \"Storage Container Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"result-record-path\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"storage-container-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"routing-strategy\": {\n+                            \"storage-sas-token\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AZURE_BLOB_STORAGE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n+                                        \"propertyName\": \"checkpoint-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Azure Storage SAS token to store Event Hub consumer group state. Always starts with a ? character.\",\n+                                \"displayName\": \"Storage SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"use-managed-identity\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Records will be routed to a 'success' Relationship regardless of whether or not there is a match in the configured Lookup Service\",\n-                                        \"displayName\": \"Route to 'success'\",\n-                                        \"value\": \"route-to-success\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Records will be routed to either a 'matched' or an 'unmatched' Relationship depending on whether or not there was a match in the configured Lookup Service. A single input FlowFile may result in two different output FlowFiles.\",\n-                                        \"displayName\": \"Route to 'matched' or 'unmatched'\",\n-                                        \"value\": \"route-to-matched-unmatched\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"route-to-success\",\n-                                \"description\": \"Specifies how to route records after a Lookup has completed\",\n-                                \"displayName\": \"Routing Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n+                                \"displayName\": \"Use Azure Managed Identity\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"routing-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"use-managed-identity\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.lookup.SimpleKeyValueLookupService\",\n-                            \"org.apache.nifi.lookup.db.DatabaseRecordLookupService\",\n-                            \"org.apache.nifi.lookup.maxmind.IPLookupService\",\n-                            \"org.apache.nifi.processors.standard.ConvertRecord\",\n-                            \"org.apache.nifi.processors.standard.SplitRecord\"\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Local state is used to store the client id. Cluster state is used to store partition ownership and checkpoint information when component state is configured as the checkpointing strategy.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All records will be sent to this Relationship if configured to do so, unless a failure occurs\",\n+                                \"description\": \"FlowFiles received from Event Hub.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile cannot be enriched, the unchanged FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"If a message from event hub cannot be parsed using the configured Record Reader or failed to be written by the configured Record Writer, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"convert\",\n-                            \"csv\",\n-                            \"database\",\n-                            \"db\",\n-                            \"enrichment\",\n-                            \"filter\",\n-                            \"json\",\n-                            \"logs\",\n-                            \"lookup\",\n-                            \"record\",\n-                            \"route\"\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"eventhub\",\n+                            \"events\",\n+                            \"microsoft\",\n+                            \"streaming\",\n+                            \"streams\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.LookupRecord\",\n-                        \"typeDescription\": \"Extracts one or more fields from a Record and looks up a value for those fields in a LookupService. If a result is returned by the LookupService, that result is optionally added to the Record. In this case, the processor functions as an Enrichment processor. Regardless, the Record is then routed to either the 'matched' relationship or 'unmatched' relationship (if the 'Routing Strategy' property is configured to do so), indicating whether or not a result was returned by the LookupService, allowing the processor to also function as a Routing processor. The \\\"coordinates\\\" to use for looking up a value in the Lookup Service are defined by adding a user-defined property. Each property that is added will have an entry added to a Map, where the name of the property becomes the Map Key and the value returned by the RecordPath becomes the value for that key. If multiple values are returned by the RecordPath, then the Record will be routed to the 'unmatched' relationship (or 'success', depending on the 'Routing Strategy' property's configuration). If one or more fields match the Result RecordPath, all fields that match will be updated. If there is no match in the configured LookupService, then no fields will be updated. I.e., it will not overwrite an existing value in the Record with a null value. Please note, however, that if the results returned by the LookupService are not accounted for in your schema (specifically, the schema that is configured for your Record Writer) then the fields will not be written out to the FlowFile.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.eventhub.ConsumeAzureEventHub\",\n+                        \"typeDescription\": \"Receives messages from Microsoft Azure Event Hubs with checkpointing to ensure consistent event processing. Checkpoint tracking avoids consuming a message multiple times and enables reliable resumption of processing in the event of intermittent network failures. Checkpoint tracking requires external storage and provides the preferred approach to consuming messages from Azure Event Hubs. In clustered environment, ConsumeAzureEventHub processor instances form a consumer group and the messages are distributed among the cluster nodes (each message is processed on one cluster node only).\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The time (in milliseconds since epoch, UTC) at which the message was enqueued in the event hub\",\n+                                \"name\": \"eventhub.enqueued.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The offset into the partition at which the message was stored\",\n+                                \"name\": \"eventhub.offset\"\n+                            },\n+                            {\n+                                \"description\": \"The sequence number associated with the message\",\n+                                \"name\": \"eventhub.sequence\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the event hub from which the message was pulled\",\n+                                \"name\": \"eventhub.name\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the partition from which the message was pulled\",\n+                                \"name\": \"eventhub.partition\"\n+                            },\n+                            {\n+                                \"description\": \"The application properties of this message. IE: 'application' would be 'eventhub.property.application'\",\n+                                \"name\": \"eventhub.property.*\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -113356,637 +113811,277 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attribute Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any attribute that is not the same on all FlowFiles in a bin will be dropped. Those that are the same across all FlowFiles will be retained.\",\n-                                        \"displayName\": \"Keep Only Common Attributes\",\n-                                        \"value\": \"Keep Only Common Attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Any attribute that has the same value for all FlowFiles in a bin, or has no value for a FlowFile, will be kept. For example, if a bin consists of 3 FlowFiles and 2 of them have a value of 'hello' for the 'greeting' attribute and the third FlowFile has no 'greeting' attribute then the outbound FlowFile will get a 'greeting' attribute with the value 'hello'.\",\n-                                        \"displayName\": \"Keep All Unique Attributes\",\n-                                        \"value\": \"Keep All Unique Attributes\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Keep Only Common Attributes\",\n-                                \"description\": \"Determines which FlowFile attributes should be added to the bundle. If 'Keep All Unique Attributes' is selected, any attribute on any FlowFile that gets bundled will be kept unless its value conflicts with the value from another FlowFile. If 'Keep Only Common Attributes' is selected, only the attributes that exist on all FlowFiles in the bundle, with the same value, will be preserved.\",\n-                                \"displayName\": \"Attribute Strategy\",\n+                            \"Event Hub Consumer Group\": {\n+                                \"defaultValue\": \"$Default\",\n+                                \"description\": \"The name of the consumer group to use when pulling events\",\n+                                \"displayName\": \"Consumer Group\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attribute Strategy\",\n+                                \"name\": \"Event Hub Consumer Group\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Compression Level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"0\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"3\",\n-                                        \"value\": \"3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"4\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"5\",\n-                                        \"value\": \"5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"6\",\n-                                        \"value\": \"6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"7\",\n-                                        \"value\": \"7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"8\",\n-                                        \"value\": \"8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"9\",\n-                                        \"value\": \"9\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"ZIP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the compression level to use when using the Zip Merge Format; if not using the Zip Merge Format, this value is ignored\",\n-                                \"displayName\": \"Compression Level\",\n+                            \"Event Hub Message Enqueue Time\": {\n+                                \"description\": \"A timestamp (ISO-8601 Instant) formatted as YYYY-MM-DDThhmmss.sssZ (2016-01-01T01:01:01.000Z) from which messages should have been enqueued in the Event Hub to start reading from\",\n+                                \"displayName\": \"Message Enqueue Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Correlation Attribute Name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"If specified, like FlowFiles will be binned together, where 'like FlowFiles' means FlowFiles that have the same value for this Attribute. If not specified, FlowFiles are bundled by the order in which they are pulled from the queue.\",\n-                                \"displayName\": \"Correlation Attribute Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Correlation Attribute Name\",\n+                                \"name\": \"Event Hub Message Enqueue Time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Delimiter Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"No Header, Footer, or Demarcator will be used\",\n-                                        \"displayName\": \"Do Not Use Delimiters\",\n-                                        \"value\": \"Do Not Use Delimiters\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The values of Header, Footer, and Demarcator will be retrieved from the contents of a file\",\n-                                        \"displayName\": \"Filename\",\n-                                        \"value\": \"Filename\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The values of Header, Footer, and Demarcator will be specified as property values\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Do Not Use Delimiters\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Determines if Header, Footer, and Demarcator should point to files containing the respective content, or if the values of the properties should be used as the content.\",\n-                                \"displayName\": \"Delimiter Strategy\",\n+                            \"Event Hub Name\": {\n+                                \"description\": \"Name of Azure Event Hubs source\",\n+                                \"displayName\": \"Event Hub Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Delimiter Strategy\",\n+                                \"name\": \"Event Hub Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Demarcator File\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Filename\",\n-                                            \"Text\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n-                                        \"propertyName\": \"Delimiter Strategy\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Filename or text specifying the demarcator to use. If not specified, no demarcator is supplied.\",\n-                                \"displayName\": \"Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Demarcator File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Footer File\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Filename\",\n-                                            \"Text\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n-                                        \"propertyName\": \"Delimiter Strategy\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Filename or text specifying the footer to use. If not specified, no footer is supplied.\",\n-                                \"displayName\": \"Footer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Footer File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Header File\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Filename\",\n-                                            \"Text\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n-                                        \"propertyName\": \"Delimiter Strategy\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Filename or text specifying the header to use. If not specified, no header is supplied.\",\n-                                \"displayName\": \"Header\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Header File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Keep Path\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"ZIP\",\n-                                            \"TAR\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"If using the Zip or Tar Merge Format, specifies whether or not the FlowFiles' paths should be included in their entry names.\",\n-                                \"displayName\": \"Keep Path\",\n+                            \"Event Hub Namespace\": {\n+                                \"description\": \"Namespace of Azure Event Hubs prefixed to Service Bus Endpoint domain\",\n+                                \"displayName\": \"Event Hub Namespace\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Path\",\n+                                \"name\": \"Event Hub Namespace\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Bin Age\": {\n-                                \"description\": \"The maximum age of a Bin that will trigger a Bin to be complete. Expected format is <duration> <time unit> where <duration> is a positive integer and time unit is one of seconds, minutes, hours\",\n-                                \"displayName\": \"Max Bin Age\",\n+                            \"Number of Event Hub Partitions\": {\n+                                \"description\": \"This property is deprecated and no longer used.\",\n+                                \"displayName\": \"Number of Event Hub Partitions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Bin Age\",\n+                                \"name\": \"Number of Event Hub Partitions\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Group Size\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum size for the bundle. If not specified, there is no maximum.\",\n-                                \"displayName\": \"Maximum Group Size\",\n+                            \"Partition Receiver Timeout (millseconds)\": {\n+                                \"description\": \"The amount of time in milliseconds a Partition Receiver should wait to receive the Fetch Size before returning. The default is 60000\",\n+                                \"displayName\": \"Partition Receiver Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Group Size\",\n+                                \"name\": \"Partition Receiver Timeout (millseconds)\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Number of Entries\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum number of files to include in a bundle\",\n-                                \"displayName\": \"Maximum Number of Entries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Number of Entries\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum number of Bins\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time\",\n-                                \"displayName\": \"Maximum number of Bins\",\n+                            \"Partition Recivier Fetch Size\": {\n+                                \"description\": \"The number of events that a receiver should fetch from an Event Hubs partition before returning. The default is 100\",\n+                                \"displayName\": \"Partition Receiver Fetch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum number of Bins\",\n-                                \"required\": true,\n+                                \"name\": \"Partition Recivier Fetch Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Merge Format\": {\n+                            \"Service Bus Endpoint\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A bin of FlowFiles will be combined into a single TAR file. The FlowFiles' <path> attribute will be used to create a directory in the TAR file if the <Keep Paths> property is set to true; otherwise, all FlowFiles will be added at the root of the TAR file. If a FlowFile has an attribute named <tar.permissions> that is 3 characters, each between 0-7, that attribute will be used as the TAR entry's 'mode'.\",\n-                                        \"displayName\": \"TAR\",\n-                                        \"value\": \"TAR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A bin of FlowFiles will be combined into a single ZIP file. The FlowFiles' <path> attribute will be used to create a directory in the ZIP file if the <Keep Paths> property is set to true; otherwise, all FlowFiles will be added at the root of the ZIP file. The <Compression Level> property indicates the ZIP compression to use.\",\n-                                        \"displayName\": \"ZIP\",\n-                                        \"value\": \"ZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 3 FlowFile Stream\",\n-                                        \"displayName\": \"FlowFile Stream, v3\",\n-                                        \"value\": \"FlowFile Stream, v3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 2 FlowFile Stream\",\n-                                        \"displayName\": \"FlowFile Stream, v2\",\n-                                        \"value\": \"FlowFile Stream, v2\"\n+                                        \"description\": \"Servicebus endpoint for general use\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n                                     },\n                                     {\n-                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 1 FlowFile Package\",\n-                                        \"displayName\": \"FlowFile Tar, v1\",\n-                                        \"value\": \"FlowFile Tar, v1\"\n+                                        \"description\": \"Servicebus endpoint for China\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n                                     },\n                                     {\n-                                        \"description\": \"The contents of all FlowFiles will be concatenated together into a single FlowFile\",\n-                                        \"displayName\": \"Binary Concatenation\",\n-                                        \"value\": \"Binary Concatenation\"\n+                                        \"description\": \"Servicebus endpoint for Germany\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n                                     },\n                                     {\n-                                        \"description\": \"The Avro contents of all FlowFiles will be concatenated together into a single FlowFile\",\n-                                        \"displayName\": \"Avro\",\n-                                        \"value\": \"Avro\"\n+                                        \"description\": \"Servicebus endpoint for US Government\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Binary Concatenation\",\n-                                \"description\": \"Determines the format that will be used to merge the content.\",\n-                                \"displayName\": \"Merge Format\",\n+                                \"defaultValue\": \".servicebus.windows.net\",\n+                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n+                                \"displayName\": \"Service Bus Endpoint\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Merge Format\",\n+                                \"name\": \"Service Bus Endpoint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Merge Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Generates 'bins' of FlowFiles and fills each bin as full as possible. FlowFiles are placed into a bin based on their size and optionally their attributes (if the <Correlation Attribute> property is set)\",\n-                                        \"displayName\": \"Bin-Packing Algorithm\",\n-                                        \"value\": \"Bin-Packing Algorithm\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Combines fragments that are associated by attributes back into a single cohesive FlowFile. If using this strategy, all FlowFiles must have the attributes <fragment.identifier>, <fragment.count>, and <fragment.index> or alternatively (for backward compatibility purposes) <segment.identifier>, <segment.count>, and <segment.index>. All FlowFiles with the same value for \\\"fragment.identifier\\\" will be grouped together. All FlowFiles in this group must have the same value for the \\\"fragment.count\\\" attribute. All FlowFiles in this group must have a unique value for the \\\"fragment.index\\\" attribute between 0 and the value of the \\\"fragment.count\\\" attribute.\",\n-                                        \"displayName\": \"Defragment\",\n-                                        \"value\": \"Defragment\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Bin-Packing Algorithm\",\n-                                \"description\": \"Specifies the algorithm used to merge content. The 'Defragment' algorithm combines fragments that are associated by attributes back into a single cohesive FlowFile. The 'Bin-Packing Algorithm' generates a FlowFile populated by arbitrarily chosen FlowFiles\",\n-                                \"displayName\": \"Merge Strategy\",\n+                            \"Shared Access Policy Name\": {\n+                                \"description\": \"The name of the shared access policy. This policy must have Listen claims.\",\n+                                \"displayName\": \"Shared Access Policy Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Merge Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Shared Access Policy Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum Group Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The minimum size for the bundle\",\n-                                \"displayName\": \"Minimum Group Size\",\n+                            \"Shared Access Policy Primary Key\": {\n+                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n+                                \"displayName\": \"Shared Access Policy Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum Group Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Shared Access Policy Primary Key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Minimum Number of Entries\": {\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n+                            \"Transport Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n+                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n+                                        \"value\": \"AmqpWebSockets\"\n                                     }\n                                 ],\n-                                \"description\": \"The minimum number of files to include in a bundle\",\n-                                \"displayName\": \"Minimum Number of Entries\",\n+                                \"defaultValue\": \"Amqp\",\n+                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n+                                \"displayName\": \"Transport Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum Number of Entries\",\n+                                \"name\": \"Transport Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Tar Modified Time\": {\n-                                \"defaultValue\": \"${file.lastModifiedTime}\",\n+                            \"proxy-configuration-service\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"TAR\"\n+                                            \"AmqpWebSockets\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n+                                        \"propertyDisplayName\": \"Transport Type\",\n+                                        \"propertyName\": \"Transport Type\"\n                                     }\n                                 ],\n-                                \"description\": \"If using the Tar Merge Format, specifies if the Tar entry should store the modified timestamp either by expression (e.g. ${file.lastModifiedTime} or static value, both of which must match the ISO8601 format 'yyyy-MM-dd'T'HH:mm:ssZ'.\",\n-                                \"displayName\": \"Tar Modified Time\",\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Tar Modified Time\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"mergecontent-metadata-strategy\": {\n+                            \"use-managed-identity\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), the metadata for the first FlowFile in the bin will be set on the output FlowFile.\",\n-                                        \"displayName\": \"Use First Metadata\",\n-                                        \"value\": \"Use First Metadata\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), any FlowFile whose metadata values match those of the first FlowFile, any additional metadata will be dropped but the FlowFile will be merged. Any FlowFile whose metadata values do not match those of the first FlowFile in the bin will not be merged.\",\n-                                        \"displayName\": \"Keep Only Common Metadata\",\n-                                        \"value\": \"Keep Only Common Metadata\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), any FlowFile whose metadata values do not match those of the first FlowFile in the bin will not be merged.\",\n-                                        \"displayName\": \"Do Not Merge Uncommon Metadata\",\n-                                        \"value\": \"Do Not Merge Uncommon Metadata\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Ignores (does not transfer, compare, etc.) any metadata from a FlowFile whose content supports embedded metadata.\",\n-                                        \"displayName\": \"Ignore Metadata\",\n-                                        \"value\": \"Ignore Metadata\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Do Not Merge Uncommon Metadata\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Avro\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"For FlowFiles whose input format supports metadata (Avro, e.g.), this property determines which metadata should be added to the bundle. If 'Use First Metadata' is selected, the metadata keys/values from the first FlowFile to be bundled will be used. If 'Keep Only Common Metadata' is selected, only the metadata that exists on all FlowFiles in the bundle, with the same value, will be preserved. If 'Ignore Metadata' is selected, no metadata is transferred to the outgoing bundled FlowFile. If 'Do Not Merge Uncommon Metadata' is selected, any FlowFile whose metadata values do not match those of the first bundled FlowFile will not be merged.\",\n-                                \"displayName\": \"Metadata Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n+                                \"displayName\": \"Use Azure Managed Identity\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mergecontent-metadata-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"use-managed-identity\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates the order in which the fragments should be assembled. This attribute must be present on all FlowFiles when using the Defragment Merge Strategy and must be a unique (i.e., unique across all FlowFiles that have the same value for the \\\"fragment.identifier\\\" attribute) integer between 0 and the value of the fragment.count attribute. If two or more FlowFiles have the same value for the \\\"fragment.identifier\\\" attribute and the same value for the \\\"fragment.index\\\" attribute, the first FlowFile processed will be accepted and subsequent FlowFiles will not be accepted into the Bin.\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates how many FlowFiles should be expected in the given bundle. At least one FlowFile must have this attribute in the bundle. If multiple FlowFiles contain the \\\"fragment.count\\\" attribute in a given bundle, all must have the same value.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute will be used for the filename of the completed merged FlowFile.\",\n-                                \"name\": \"segment.original.filename\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Format> property is set to TAR. The value of this attribute must be 3 characters; each character must be in the range 0 to 7 (inclusive) and indicates the file permissions that should be used for the FlowFile's TAR entry. If this attribute is missing or has an invalid value, the default value of 644 will be used\",\n-                                \"name\": \"tar.permissions\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeRecord\",\n-                            \"org.apache.nifi.processors.standard.SegmentContent\"\n+                            \"org.apache.nifi.processors.azure.eventhub.ConsumeAzureEventHub\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the bundle cannot be created, all FlowFiles that would have been used to created the bundle will be transferred to failure\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The FlowFiles that were used to create the bundle\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"The FlowFile containing the merged content\",\n-                                \"name\": \"merged\"\n+                                \"description\": \"Any FlowFile that is successfully received from the event hub will be transferred to this Relationship.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"While content is not stored in memory, the FlowFiles' attributes are. The configuration of MergeContent (maximum bin size, maximum group size, maximum bin age, max number of entries) will influence how much memory is used. If merging together many small FlowFiles, a two-stage approach may be necessary in order to avoid excessive use of memory.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"archive\",\n-                            \"concatenation\",\n-                            \"content\",\n-                            \"correlation\",\n-                            \"flowfile-stream\",\n-                            \"flowfile-stream-v3\",\n-                            \"merge\",\n-                            \"stream\",\n-                            \"tar\",\n-                            \"zip\"\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"eventhub\",\n+                            \"events\",\n+                            \"microsoft\",\n+                            \"streaming\",\n+                            \"streams\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.MergeContent\",\n-                        \"typeDescription\": \"Merges a Group of FlowFiles together based on a user-defined strategy and packages them into a single FlowFile. It is recommended that the Processor be configured with only a single incoming connection, as Group of FlowFiles will not be created from FlowFiles in different connections. This processor updates the mime.type attribute as appropriate. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.eventhub.GetAzureEventHub\",\n+                        \"typeDescription\": \"Receives messages from Microsoft Azure Event Hubs without reliable checkpoint tracking. In clustered environment, GetAzureEventHub processor instances work independently and all cluster nodes process all messages (unless running the processor in Primary Only mode). ConsumeAzureEventHub offers the recommended approach to receiving messages from Azure Event Hubs. This processor creates a thread pool for connections to Azure Event Hubs.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"When more than 1 file is merged, the filename comes from the segment.original.filename attribute. If that attribute does not exist in the source FlowFiles, then the filename is set to the number of nanoseconds matching system time. Then a filename extension may be applied:if Merge Format is TAR, then the filename will be appended with .tar, if Merge Format is ZIP, then the filename will be appended with .zip, if Merge Format is FlowFileStream, then the filename will be appended with .pkg\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The time (in milliseconds since epoch, UTC) at which the message was enqueued in the event hub\",\n+                                \"name\": \"eventhub.enqueued.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The number of FlowFiles that were merged into this bundle\",\n-                                \"name\": \"merge.count\"\n+                                \"description\": \"The offset into the partition at which the message was stored\",\n+                                \"name\": \"eventhub.offset\"\n                             },\n                             {\n-                                \"description\": \"The age of the bin, in milliseconds, when it was merged and output. Effectively this is the greatest amount of time that any FlowFile in this bundle remained waiting in this processor before it was output\",\n-                                \"name\": \"merge.bin.age\"\n+                                \"description\": \"The Azure sequence number associated with the message\",\n+                                \"name\": \"eventhub.sequence\"\n                             },\n                             {\n-                                \"description\": \"UUID of the merged flow file that will be added to the original flow files attributes.\",\n-                                \"name\": \"merge.uuid\"\n+                                \"description\": \"The name of the event hub from which the message was pulled\",\n+                                \"name\": \"eventhub.name\"\n                             },\n                             {\n-                                \"description\": \"This processor allows for several thresholds to be configured for merging FlowFiles. This attribute indicates which of the Thresholds resulted in the FlowFiles being merged. For an explanation of each of the possible values and their meanings, see the Processor's Usage / documentation and see the 'Additional Details' page.\",\n-                                \"name\": \"merge.reason\"\n+                                \"description\": \"The name of the event hub partition from which the message was pulled\",\n+                                \"name\": \"eventhub.partition\"\n+                            },\n+                            {\n+                                \"description\": \"The application properties of this message. IE: 'application' would be 'eventhub.property.application'\",\n+                                \"name\": \"eventhub.property.*\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -113998,348 +114093,413 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attribute Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any attribute that is not the same on all FlowFiles in a bin will be dropped. Those that are the same across all FlowFiles will be retained.\",\n-                                        \"displayName\": \"Keep Only Common Attributes\",\n-                                        \"value\": \"Keep Only Common Attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Any attribute that has the same value for all FlowFiles in a bin, or has no value for a FlowFile, will be kept. For example, if a bin consists of 3 FlowFiles and 2 of them have a value of 'hello' for the 'greeting' attribute and the third FlowFile has no 'greeting' attribute then the outbound FlowFile will get a 'greeting' attribute with the value 'hello'.\",\n-                                        \"displayName\": \"Keep All Unique Attributes\",\n-                                        \"value\": \"Keep All Unique Attributes\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Keep Only Common Attributes\",\n-                                \"description\": \"Determines which FlowFile attributes should be added to the bundle. If 'Keep All Unique Attributes' is selected, any attribute on any FlowFile that gets bundled will be kept unless its value conflicts with the value from another FlowFile. If 'Keep Only Common Attributes' is selected, only the attributes that exist on all FlowFiles in the bundle, with the same value, will be preserved.\",\n-                                \"displayName\": \"Attribute Strategy\",\n+                            \"Event Hub Name\": {\n+                                \"description\": \"Name of Azure Event Hubs destination\",\n+                                \"displayName\": \"Event Hub Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attribute Strategy\",\n+                                \"name\": \"Event Hub Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"correlation-attribute-name\": {\n-                                \"description\": \"If specified, two FlowFiles will be binned together only if they have the same value for this Attribute. If not specified, FlowFiles are bundled by the order in which they are pulled from the queue.\",\n-                                \"displayName\": \"Correlation Attribute Name\",\n+                            \"Event Hub Namespace\": {\n+                                \"description\": \"Namespace of Azure Event Hubs prefixed to Service Bus Endpoint domain\",\n+                                \"displayName\": \"Event Hub Namespace\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"correlation-attribute-name\",\n-                                \"required\": false,\n+                                \"name\": \"Event Hub Namespace\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-bin-age\": {\n-                                \"description\": \"The maximum age of a Bin that will trigger a Bin to be complete. Expected format is <duration> <time unit> where <duration> is a positive integer and time unit is one of seconds, minutes, hours\",\n-                                \"displayName\": \"Max Bin Age\",\n+                            \"Service Bus Endpoint\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Servicebus endpoint for general use\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Servicebus endpoint for China\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Servicebus endpoint for Germany\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Servicebus endpoint for US Government\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \".servicebus.windows.net\",\n+                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n+                                \"displayName\": \"Service Bus Endpoint\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-bin-age\",\n-                                \"required\": false,\n+                                \"name\": \"Service Bus Endpoint\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-bin-size\": {\n-                                \"description\": \"The maximum size for the bundle. If not specified, there is no maximum. This is a 'soft limit' in that if a FlowFile is added to a bin, all records in that FlowFile will be added, so this limit may be exceeded by up to the number of bytes in last input FlowFile.\",\n-                                \"displayName\": \"Maximum Bin Size\",\n+                            \"Shared Access Policy Name\": {\n+                                \"description\": \"The name of the shared access policy. This policy must have Send claims.\",\n+                                \"displayName\": \"Shared Access Policy Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-bin-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-records\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum number of Records to include in a bin. This is a 'soft limit' in that if a FlowFIle is added to a bin, all records in that FlowFile will be added, so this limit may be exceeded by up to the number of records in the last input FlowFile.\",\n-                                \"displayName\": \"Maximum Number of Records\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max-records\",\n+                                \"name\": \"Shared Access Policy Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max.bin.count\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time. This number should not be smaller than the maximum number of concurrent threads for this Processor, or the bins that are created will often consist only of a single incoming FlowFile.\",\n-                                \"displayName\": \"Maximum Number of Bins\",\n+                            \"Shared Access Policy Primary Key\": {\n+                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n+                                \"displayName\": \"Shared Access Policy Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.bin.count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Shared Access Policy Primary Key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"merge-strategy\": {\n+                            \"Transport Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generates 'bins' of FlowFiles and fills each bin as full as possible. FlowFiles are placed into a bin based on their size and optionally their attributes (if the <Correlation Attribute> property is set)\",\n-                                        \"displayName\": \"Bin-Packing Algorithm\",\n-                                        \"value\": \"Bin-Packing Algorithm\"\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n                                     },\n                                     {\n-                                        \"description\": \"Combines fragments that are associated by attributes back into a single cohesive FlowFile. If using this strategy, all FlowFiles must have the attributes <fragment.identifier> and <fragment.count>. All FlowFiles with the same value for \\\"fragment.identifier\\\" will be grouped together. All FlowFiles in this group must have the same value for the \\\"fragment.count\\\" attribute. The ordering of the Records that are output is not guaranteed.\",\n-                                        \"displayName\": \"Defragment\",\n-                                        \"value\": \"Defragment\"\n+                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n+                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n+                                        \"value\": \"AmqpWebSockets\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Bin-Packing Algorithm\",\n-                                \"description\": \"Specifies the algorithm used to merge records. The 'Defragment' algorithm combines fragments that are associated by attributes back into a single cohesive FlowFile. The 'Bin-Packing Algorithm' generates a FlowFile populated by arbitrarily chosen FlowFiles\",\n-                                \"displayName\": \"Merge Strategy\",\n+                                \"defaultValue\": \"Amqp\",\n+                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n+                                \"displayName\": \"Transport Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"merge-strategy\",\n+                                \"name\": \"Transport Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-bin-size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size of for the bin\",\n-                                \"displayName\": \"Minimum Bin Size\",\n+                            \"max-batch-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Maximum number of FlowFiles processed for each Processor invocation\",\n+                                \"displayName\": \"Maximum Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-bin-size\",\n+                                \"name\": \"max-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-records\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The minimum number of records to include in a bin\",\n-                                \"displayName\": \"Minimum Number of Records\",\n+                            \"partitioning-key-attribute-name\": {\n+                                \"description\": \"If specified, the value from argument named by this field will be used as a partitioning key to be used by event hub.\",\n+                                \"displayName\": \"Partitioning Key Attribute Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"min-records\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"partitioning-key-attribute-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"proxy-configuration-service\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AmqpWebSockets\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transport Type\",\n+                                        \"propertyName\": \"Transport Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"use-managed-identity\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n+                                \"displayName\": \"Use Azure Managed Identity\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"use-managed-identity\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute indicates how many FlowFiles should be expected in the given bundle.\",\n-                                \"name\": \"fragment.count\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\",\n-                            \"org.apache.nifi.processors.standard.PartitionRecord\",\n-                            \"org.apache.nifi.processors.standard.SplitRecord\"\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the bundle cannot be created, all FlowFiles that would have been used to created the bundle will be transferred to failure\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The FlowFiles that were used to create the bundle\",\n-                                \"name\": \"original\"\n+                                \"description\": \"Any FlowFile that is successfully sent to the event hubs will be transferred to this Relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The FlowFile containing the merged records\",\n-                                \"name\": \"merged\"\n+                                \"description\": \"Any FlowFile that could not be sent to the event hub will be transferred to this Relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The Processor buffers FlowFile contents in memory before sending\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"content\",\n-                            \"correlation\",\n-                            \"event\",\n-                            \"merge\",\n-                            \"record\",\n-                            \"stream\"\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"eventhub\",\n+                            \"events\",\n+                            \"microsoft\",\n+                            \"streaming\",\n+                            \"streams\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.MergeRecord\",\n-                        \"typeDescription\": \"This Processor merges together multiple record-oriented FlowFiles into a single FlowFile that contains all of the Records of the input FlowFiles. This Processor works by creating 'bins' and then adding FlowFiles to these bins until they are full. Once a bin is full, all of the FlowFiles will be combined into a single output FlowFile, and that FlowFile will be routed to the 'merged' Relationship. A bin will consist of potentially many 'like FlowFiles'. In order for two FlowFiles to be considered 'like FlowFiles', they must have the same Schema (as identified by the Record Reader) and, if the <Correlation Attribute Name> property is set, the same value for the specified attribute. See Processor Usage and Additional Details for more information. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The merged FlowFile will have a 'record.count' attribute indicating the number of records that were written to the FlowFile.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type indicated by the Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of FlowFiles that were merged into this bundle\",\n-                                \"name\": \"merge.count\"\n-                            },\n-                            {\n-                                \"description\": \"The age of the bin, in milliseconds, when it was merged and output. Effectively this is the greatest amount of time that any FlowFile in this bundle remained waiting in this processor before it was output\",\n-                                \"name\": \"merge.bin.age\"\n-                            },\n-                            {\n-                                \"description\": \"UUID of the merged FlowFile that will be added to the original FlowFiles attributes\",\n-                                \"name\": \"merge.uuid\"\n-                            },\n-                            {\n-                                \"description\": \"Any Attribute that the configured Record Writer returns will be added to the FlowFile.\",\n-                                \"name\": \"<Attributes from Record Writer>\"\n-                            }\n-                        ]\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.eventhub.PutAzureEventHub\",\n+                        \"typeDescription\": \"Send FlowFile contents to Azure Event Hubs\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\"\n+                        ],\n+                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"End Offset\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"Number of bytes removed at the end of the file.\",\n-                                \"displayName\": \"End Offset\",\n+                            \"blob\": {\n+                                \"defaultValue\": \"${azure.blobname}\",\n+                                \"description\": \"The filename of the blob\",\n+                                \"displayName\": \"Blob\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"End Offset\",\n+                                \"name\": \"blob\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remove All Content\": {\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"delete-snapshots-option\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Delete the blob only.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Delete the blob and its snapshots.\",\n+                                        \"displayName\": \"Include Snapshots\",\n+                                        \"value\": \"INCLUDE_SNAPSHOTS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Delete only the blob's snapshots.\",\n+                                        \"displayName\": \"Delete Snapshots Only\",\n+                                        \"value\": \"DELETE_SNAPSHOTS_ONLY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Remove all content from the FlowFile superseding Start Offset and End Offset properties.\",\n-                                \"displayName\": \"Remove All Content\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the snapshot deletion options to be used when deleting a blob.\",\n+                                \"displayName\": \"Delete Snapshots Option\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remove All Content\",\n+                                \"name\": \"delete-snapshots-option\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Start Offset\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"Number of bytes removed at the beginning of the file.\",\n-                                \"displayName\": \"Start Offset\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Start Offset\",\n-                                \"required\": true,\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Storage Account Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-name\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n+                                \"displayName\": \"Storage Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"storage-endpoint-suffix\": {\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Processed flowfiles.\",\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"binary\",\n-                            \"discard\",\n-                            \"keep\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ModifyBytes\",\n-                        \"typeDescription\": \"Discard byte range at the start and end or all content of a binary file.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n+                        \"typeDescription\": \"Deletes the provided blob from Azure Storage\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -114351,394 +114511,297 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Activity Restored Message\": {\n-                                \"defaultValue\": \"Activity restored at time: ${now():format('yyyy/MM/dd HH:mm:ss')} after being inactive for ${inactivityDurationMillis:toNumber():divide(60000)} minutes\",\n-                                \"description\": \"The message that will be the content of FlowFiles that are sent to 'activity.restored' relationship\",\n-                                \"displayName\": \"Activity Restored Message\",\n+                            \"blob-name\": {\n+                                \"defaultValue\": \"${azure.blobname}\",\n+                                \"description\": \"The full name of the blob\",\n+                                \"displayName\": \"Blob Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Activity Restored Message\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Continually Send Messages\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will send inactivity indicator continually every Threshold Duration amount of time until activity is restored; if false, will send an indicator only when the flow first becomes inactive\",\n-                                \"displayName\": \"Continually Send Messages\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Continually Send Messages\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Copy Attributes\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will copy all flow file attributes from the flow file that resumed activity to the newly created indicator flow file\",\n-                                \"displayName\": \"Copy Attributes\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Copy Attributes\",\n+                                \"name\": \"blob-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Inactivity Message\": {\n-                                \"defaultValue\": \"Lacking activity as of time: ${now():format('yyyy/MM/dd HH:mm:ss')}; flow has been inactive for ${inactivityDurationMillis:toNumber():divide(60000)} minutes\",\n-                                \"description\": \"The message that will be the content of FlowFiles that are sent to the 'inactive' relationship\",\n-                                \"displayName\": \"Inactivity Message\",\n+                            \"container-name\": {\n+                                \"defaultValue\": \"${azure.container}\",\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Inactivity Message\",\n+                                \"name\": \"container-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Monitoring Scope\": {\n+                            \"delete-snapshots-option\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"node\",\n-                                        \"value\": \"node\"\n+                                        \"description\": \"Delete the blob only.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"cluster\",\n-                                        \"value\": \"cluster\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"node\",\n-                                \"description\": \"Specify how to determine activeness of the flow. 'node' means that activeness is examined at individual node separately. It can be useful if DFM expects each node should receive flow files in a distributed manner. With 'cluster', it defines the flow is active while at least one node receives flow files actively. If NiFi is running as standalone mode, this should be set as 'node', if it's 'cluster', NiFi logs a warning message and act as 'node' scope.\",\n-                                \"displayName\": \"Monitoring Scope\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Monitoring Scope\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Reporting Node\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"all\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"Delete the blob and its snapshots.\",\n+                                        \"displayName\": \"Include Snapshots\",\n+                                        \"value\": \"INCLUDE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"primary\",\n-                                        \"value\": \"primary\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"cluster\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Monitoring Scope\",\n-                                        \"propertyName\": \"Monitoring Scope\"\n+                                        \"description\": \"Delete only the blob's snapshots.\",\n+                                        \"displayName\": \"Delete Snapshots Only\",\n+                                        \"value\": \"ONLY\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify which node should send notification flow-files to inactive and activity.restored relationships. With 'all', every node in this cluster send notification flow-files. 'primary' means flow-files will be sent only from a primary node. If NiFi is running as standalone mode, this should be set as 'all', even if it's 'primary', NiFi act as 'all'.\",\n-                                \"displayName\": \"Reporting Node\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the snapshot deletion options to be used when deleting a blob.\",\n+                                \"displayName\": \"Delete Snapshots Option\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reporting Node\",\n+                                \"name\": \"delete-snapshots-option\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Reset State on Restart\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When the processor gets started or restarted, if set to true, the initial state will always be active. Otherwise, the last reported flow state will be preserved.\",\n-                                \"displayName\": \"Reset State on Restart\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reset State on Restart\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Threshold Duration\": {\n-                                \"defaultValue\": \"5 min\",\n-                                \"description\": \"Determines how much time must elapse before considering the flow to be inactive\",\n-                                \"displayName\": \"Threshold Duration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Threshold Duration\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Wait for Activity\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"When the processor gets started or restarted, if set to true, only send an inactive indicator if there had been activity beforehand. Otherwise send an inactive indicator even if there had not been activity beforehand.\",\n-                                \"displayName\": \"Wait for Activity\",\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n+                                \"displayName\": \"Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Wait for Activity\",\n+                                \"name\": \"storage-credentials-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"stateful\": {\n-                            \"description\": \"MonitorActivity stores the last timestamp at each node as state, so that it can examine activity at cluster wide. If 'Copy Attribute' is set to true, then flow file attributes are also persisted. In local scope, it stores last known activity timestamp if the flow is inactive.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\",\n-                                \"LOCAL\"\n-                            ]\n-                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"This relationship is used to transfer an Inactivity indicator when no FlowFiles are routed to 'success' for Threshold Duration amount of time\",\n-                                \"name\": \"inactive\"\n-                            },\n-                            {\n-                                \"description\": \"All incoming FlowFiles are routed to success\",\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"This relationship is used to transfer an Activity Restored indicator when FlowFiles are routing to 'success' following a period of inactivity\",\n-                                \"name\": \"activity.restored\"\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"active\",\n-                            \"activity\",\n-                            \"detection\",\n-                            \"flow\",\n-                            \"inactive\",\n-                            \"monitor\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.MonitorActivity\",\n-                        \"typeDescription\": \"Monitors the flow for activity and sends out an indicator when the flow has not had any data for some specified amount of time and again when the flow's activity is restored\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The time at which Inactivity began, in the form of milliseconds since Epoch\",\n-                                \"name\": \"inactivityStartMillis\"\n-                            },\n-                            {\n-                                \"description\": \"The number of milliseconds that the inactivity has spanned\",\n-                                \"name\": \"inactivityDurationMillis\"\n-                            }\n-                        ]\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n+                        \"typeDescription\": \"Deletes the specified blob from Azure Blob Storage. The processor uses Azure Blob Storage client library v12.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"attribute-cache-regex\": {\n-                                \"description\": \"Any attributes whose names match this regex will be stored in the distributed cache to be copied to any FlowFiles released from a corresponding Wait processor.  Note that the uuid attribute will not be cached regardless of this value.  If blank, no attributes will be cached.\",\n-                                \"displayName\": \"Attribute Cache Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-cache-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"distributed-cache-service\": {\n-                                \"description\": \"The Controller Service that is used to cache release signals in order to release files queued at a corresponding Wait processor\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-cache-service\",\n+                                \"name\": \"adls-credentials-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"release-signal-id\": {\n-                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the release signal cache key\",\n-                                \"displayName\": \"Release Signal Identifier\",\n+                            \"directory-name\": {\n+                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n+                                \"displayName\": \"Directory Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"release-signal-id\",\n+                                \"name\": \"directory-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"signal-buffer-count\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Specify the maximum number of incoming flow files that can be buffered until signals are notified to cache service. The more buffer can provide the better performance, as it reduces the number of interactions with cache service by grouping signals by signal identifier when multiple incoming flow files share the same signal identifier.\",\n-                                \"displayName\": \"Signal Buffer Count\",\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"file\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Filesystem Object Type\",\n+                                        \"propertyName\": \"filesystem-object-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"signal-buffer-count\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"signal-counter-delta\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the signal counter delta. Specify how much the counter should increase. For example, if multiple signal events are processed at upstream flow in batch oriented way, the number of events processed can be notified with this property at once. Zero (0) has a special meaning, it clears target count back to 0, which is especially useful when used with Wait Releasable FlowFile Count = Zero (0) mode, to provide 'open-close-gate' type of flow control. One (1) can open a corresponding Wait processor, and Zero (0) can negate it as if closing a gate.\",\n-                                \"displayName\": \"Signal Counter Delta\",\n+                            \"filesystem-name\": {\n+                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n+                                \"displayName\": \"Filesystem Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"signal-counter-delta\",\n+                                \"name\": \"filesystem-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"signal-counter-name\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the signal counter name. Signal counter name is useful when a corresponding Wait processor needs to know the number of occurrences of different types of events, such as success or failure, or destination data source names, etc.\",\n-                                \"displayName\": \"Signal Counter Name\",\n+                            \"filesystem-object-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The object to be deleted is a file.\",\n+                                        \"displayName\": \"File\",\n+                                        \"value\": \"file\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The object to be deleted is a directory.\",\n+                                        \"displayName\": \"Directory\",\n+                                        \"value\": \"directory\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"file\",\n+                                \"description\": \"They type of the file system object to be deleted. It can be either folder or file.\",\n+                                \"displayName\": \"Filesystem Object Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"signal-counter-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"filesystem-object-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.Wait\"\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles where the release signal has been successfully entered in the cache will be routed to this relationship\",\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"When the cache cannot be reached, or if the Release Signal Identifier evaluates to null or empty, FlowFiles will be routed to this relationship\",\n+                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"notify\",\n-                            \"release\",\n-                            \"signal\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.Notify\",\n-                        \"typeDescription\": \"Caches a release signal identifier in the distributed cache, optionally along with the FlowFile's attributes.  Any flow files held at a corresponding Wait processor will be released once this signal in the cache is discovered.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All FlowFiles will have an attribute 'notified'. The value of this attribute is true, is the FlowFile is notified, otherwise false.\",\n-                                \"name\": \"notified\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Deletes the provided file from Azure Data Lake Storage\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -114746,1717 +114809,1863 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\"\n+                        ],\n+                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"max-batch-size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Maximum number of FlowFiles to package into one output FlowFile using a best effort, non guaranteed approach. Multiple input queues can produce unexpected batching behavior.\",\n-                                \"displayName\": \"Maximum Batch Size\",\n+                            \"blob\": {\n+                                \"defaultValue\": \"${azure.blobname}\",\n+                                \"description\": \"The filename of the blob\",\n+                                \"displayName\": \"Blob\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"blob\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cse-key-id\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SYMMETRIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"cse-key-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"cse-key-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cse-key-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The blobs sent to Azure are not encrypted.\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The blobs sent to Azure are encrypted using a symmetric algorithm.\",\n+                                        \"displayName\": \"SYMMETRIC\",\n+                                        \"value\": \"SYMMETRIC\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-batch-size\",\n+                                \"name\": \"cse-key-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"cse-symmetric-key-hex\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SYMMETRIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"cse-key-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"When using symmetric client-side encryption, this is the raw key, encoded in hexadecimal\",\n+                                \"displayName\": \"Symmetric Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cse-symmetric-key-hex\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"range-length\": {\n+                                \"description\": \"The number of bytes to download from the blob, starting from the Range Start. An empty value or a value that extends beyond the end of the blob will read to the end of the blob.\",\n+                                \"displayName\": \"Range Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"range-length\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"range-start\": {\n+                                \"description\": \"The byte position at which to start reading from the blob. An empty value or a value of zero will start reading at the beginning of the blob.\",\n+                                \"displayName\": \"Range Start\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"range-start\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Storage Account Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-name\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n+                                \"displayName\": \"Storage Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"storage-endpoint-suffix\": {\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\",\n-                            \"org.apache.nifi.processors.standard.UnpackContent\"\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The packaged FlowFile is sent to this relationship\",\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The FlowFiles that were used to create the package are sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"flowfile\",\n-                            \"flowfile-stream\",\n-                            \"flowfile-stream-v3\",\n-                            \"package\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PackageFlowFile\",\n-                        \"typeDescription\": \"This processor will package FlowFile attributes and content into an output FlowFile that can be exported from NiFi and imported back into NiFi, preserving the original attributes and content.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n+                        \"typeDescription\": \"Retrieves contents of an Azure Storage Blob, writing the contents to the content of the FlowFile\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The mime.type will be changed to application/flowfile-v3\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The length of the blob fetched\",\n+                                \"name\": \"azure.length\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"ACCEPT_EMPTY_EXTENSIONS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Client-Side Encryption Key ID\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"LOCAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, empty extensions will be accepted and will be associated to a null value.\",\n-                                \"displayName\": \"Accept empty extensions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ACCEPT_EMPTY_EXTENSIONS\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"APPEND_RAW_MESSAGE_TO_JSON\": {\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When using flowfile-content (i.e. JSON output), add the original CEF message to the resulting JSON object. The original message is added as a string to _raw.\",\n-                                \"displayName\": \"Append raw message to JSON\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"APPEND_RAW_MESSAGE_TO_JSON\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"DATETIME_REPRESENTATION\": {\n-                                \"defaultValue\": \"en-US\",\n-                                \"description\": \"The IETF BCP 47 representation of the Locale to be used when parsing date fields with long or short month names (e.g. may <en-US> vs. mai. <fr-FR>. The defaultvalue is generally safe. Only change if having issues parsing CEF messages\",\n-                                \"displayName\": \"DateTime Locale\",\n+                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DATETIME_REPRESENTATION\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Client-Side Encryption Key ID\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FIELDS_DESTINATION\": {\n+                            \"Client-Side Encryption Key Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n+                                        \"description\": \"Client-Side Encryption disabled\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"description\": \"Client-Side Encryption enabled using local key\",\n+                                        \"displayName\": \"LOCAL\",\n+                                        \"value\": \"LOCAL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the results of the CEF parser are written to the FlowFile content or a FlowFile attribute; if using flowfile-attributeattribute, fields will be populated as attributes. If set to flowfile-content, the CEF extension field will be converted into a flat JSON object.\",\n-                                \"displayName\": \"Parsed fields destination\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FIELDS_DESTINATION\",\n+                                \"name\": \"Client-Side Encryption Key Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"INCLUDE_CUSTOM_EXTENSIONS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Client-Side Encryption Local Key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"LOCAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, custom extensions (not specified in the CEF specifications) will be included in the generated data/attributes.\",\n-                                \"displayName\": \"Include custom extensions\",\n+                                \"description\": \"When using local client-side encryption, this is the raw key, encoded in hexadecimal\",\n+                                \"displayName\": \"Client-Side Encryption Local Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"INCLUDE_CUSTOM_EXTENSIONS\",\n+                                \"name\": \"Client-Side Encryption Local Key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"blob-name\": {\n+                                \"defaultValue\": \"${azure.blobname}\",\n+                                \"description\": \"The full name of the blob\",\n+                                \"displayName\": \"Blob Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"blob-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"TIME_REPRESENTATION\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTC\",\n-                                        \"value\": \"UTC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Local Timezone (system Default)\",\n-                                        \"value\": \"Local Timezone (system Default)\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Local Timezone (system Default)\",\n-                                \"description\": \"Timezone to be used when representing date fields. UTC will convert all dates to UTC, while Local Timezone will convert them to the timezone used by NiFi.\",\n-                                \"displayName\": \"Timezone\",\n+                            \"container-name\": {\n+                                \"defaultValue\": \"${azure.container}\",\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"TIME_REPRESENTATION\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"range-length\": {\n+                                \"description\": \"The number of bytes to download from the blob, starting from the Range Start. An empty value or a value that extends beyond the end of the blob will read to the end of the blob.\",\n+                                \"displayName\": \"Range Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"range-length\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"VALIDATE_DATA\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If set to true, the event will be validated against the CEF standard (revision 23). If the event is invalid, the FlowFile will be routed to the failure relationship. If this property is set to false, the event will be processed without validating the data.\",\n-                                \"displayName\": \"Validate the CEF event\",\n+                            \"range-start\": {\n+                                \"description\": \"The byte position at which to start reading from the blob. An empty value or a value of zero will start reading at the beginning of the blob.\",\n+                                \"displayName\": \"Range Start\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"range-start\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n+                                \"displayName\": \"Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"VALIDATE_DATA\",\n+                                \"name\": \"storage-credentials-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully parsed as a CEF message will be transferred to this Relationship.\",\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be parsed as a CEF message will be transferred to this Relationship without any attributes being added\",\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"cef\",\n-                            \"event\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"system\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ParseCEF\",\n-                        \"typeDescription\": \"Parses the contents of a CEF formatted message and adds attributes to the FlowFile for headers and extensions of the parts of the CEF message.\\nNote: This Processor expects CEF messages WITHOUT the syslog headers (i.e. starting at \\\"CEF:0\\\"\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n+                        \"typeDescription\": \"Retrieves the specified blob from Azure Blob Storage and writes its content to the content of the FlowFile. The processor uses Azure Blob Storage client library v12.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The version of the CEF message.\",\n-                                \"name\": \"cef.header.version\"\n+                                \"description\": \"The name of the Azure Blob Storage container\",\n+                                \"name\": \"azure.container\"\n                             },\n                             {\n-                                \"description\": \"The Device Vendor of the CEF message.\",\n-                                \"name\": \"cef.header.deviceVendor\"\n+                                \"description\": \"The name of the blob on Azure Blob Storage\",\n+                                \"name\": \"azure.blobname\"\n                             },\n                             {\n-                                \"description\": \"The Device Product of the CEF message.\",\n-                                \"name\": \"cef.header.deviceProduct\"\n+                                \"description\": \"Primary location of the blob\",\n+                                \"name\": \"azure.primaryUri\"\n                             },\n                             {\n-                                \"description\": \"The Device Version of the CEF message.\",\n-                                \"name\": \"cef.header.deviceVersion\"\n+                                \"description\": \"ETag of the blob\",\n+                                \"name\": \"azure.etag\"\n                             },\n                             {\n-                                \"description\": \"The Device Event Class ID of the CEF message.\",\n-                                \"name\": \"cef.header.deviceEventClassId\"\n+                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n+                                \"name\": \"azure.blobtype\"\n                             },\n                             {\n-                                \"description\": \"The name of the CEF message.\",\n-                                \"name\": \"cef.header.name\"\n+                                \"description\": \"MIME Type of the content\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The severity of the CEF message.\",\n-                                \"name\": \"cef.header.severity\"\n+                                \"description\": \"Language code for the content\",\n+                                \"name\": \"lang\"\n                             },\n                             {\n-                                \"description\": \"The key and value generated by the parsing of the message.\",\n-                                \"name\": \"cef.extension.*\"\n+                                \"description\": \"Timestamp of the blob\",\n+                                \"name\": \"azure.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"Length of the blob\",\n+                                \"name\": \"azure.length\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies which character set of the Syslog messages\",\n-                                \"displayName\": \"Character Set\",\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"adls-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"directory-name\": {\n+                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n+                                \"displayName\": \"Directory Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"directory-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"filesystem-name\": {\n+                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n+                                \"displayName\": \"Filesystem Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"number-of-retries\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of automatic retries to perform if the download fails.\",\n+                                \"displayName\": \"Number of Retries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"number-of-retries\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"range-length\": {\n+                                \"description\": \"The number of bytes to download from the object, starting from the Range Start. An empty value or a value that extends beyond the end of the object will read to the end of the object.\",\n+                                \"displayName\": \"Range Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"range-length\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"range-start\": {\n+                                \"description\": \"The byte position at which to start reading from the object. An empty value or a value of zero will start reading at the beginning of the object.\",\n+                                \"displayName\": \"Range Start\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"range-start\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n-                            \"org.apache.nifi.processors.standard.PutSyslog\"\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be parsed as a Syslog message will be transferred to this Relationship without any attributes being added\",\n+                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"event\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"syslog\",\n-                            \"system\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ParseSyslog\",\n-                        \"typeDescription\": \"Attempts to parses the contents of a Syslog message in accordance to RFC5424 and RFC3164 formats and adds attributes to the FlowFile for each of the parts of the Syslog message.Note: Be mindfull that RFC3164 is informational and a wide range of different implementations are present in the wild. If messages fail parsing, considering using RFC5424 or using a generic parsing processors such as ExtractGrok.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Fetch the provided file from Azure Data Lake Storage\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The priority of the Syslog message.\",\n-                                \"name\": \"syslog.priority\"\n-                            },\n-                            {\n-                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.severity\"\n-                            },\n-                            {\n-                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.facility\"\n-                            },\n-                            {\n-                                \"description\": \"The optional version from the Syslog message.\",\n-                                \"name\": \"syslog.version\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the Syslog message.\",\n-                                \"name\": \"syslog.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname or IP address of the Syslog message.\",\n-                                \"name\": \"syslog.hostname\"\n+                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n+                                \"name\": \"azure.datalake.storage.statusCode\"\n                             },\n                             {\n-                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n-                                \"name\": \"syslog.sender\"\n+                                \"description\": \"The Azure Data Lake Storage moniker of the failed operation\",\n+                                \"name\": \"azure.datalake.storage.errorCode\"\n                             },\n                             {\n-                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n-                                \"name\": \"syslog.body\"\n+                                \"description\": \"The Azure Data Lake Storage error message from the failed operation\",\n+                                \"name\": \"azure.datalake.storage.errorMessage\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\"\n+                        ],\n+                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies which character set of the Syslog messages\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include_policy\": {\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then the Syslog Message body will be included in the attributes.\",\n-                                \"displayName\": \"Include Message Body in Attributes\",\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include_policy\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"nil_policy\": {\n+                            \"et-state-cache\": {\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-time-window\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The missing field will not have an attribute added.\",\n-                                        \"displayName\": \"OMIT\",\n-                                        \"value\": \"OMIT\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"The missing field will have an empty attribute added.\",\n-                                        \"displayName\": \"NULL\",\n-                                        \"value\": \"NULL\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"The missing field will have an attribute added with the value of '-'.\",\n-                                        \"displayName\": \"DASH\",\n-                                        \"value\": \"DASH\"\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NULL\",\n-                                \"description\": \"Defines how NIL values are handled for header fields.\",\n-                                \"displayName\": \"NIL Policy\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"nil_policy\",\n+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n-                            \"org.apache.nifi.processors.standard.PutSyslog\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be parsed as a Syslog message will be transferred to this Relationship without any attributes being added\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"event\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"syslog\",\n-                            \"syslog5424\",\n-                            \"system\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ParseSyslog5424\",\n-                        \"typeDescription\": \"Attempts to parse the contents of a well formed Syslog message in accordance to RFC5424 format and adds attributes to the FlowFile for each of the parts of the Syslog message, including Structured Data.Structured Data will be written to attributes as one attribute per item id + parameter see https://tools.ietf.org/html/rfc5424.Note: ParseSyslog5424 follows the specification more closely than ParseSyslog.  If your Syslog producer does not follow the spec closely, with regards to using '-' for missing header entries for example, those logs will fail with this parser, where they would not fail with ParseSyslog.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The priority of the Syslog message.\",\n-                                \"name\": \"syslog.priority\"\n-                            },\n-                            {\n-                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.severity\"\n-                            },\n-                            {\n-                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.facility\"\n-                            },\n-                            {\n-                                \"description\": \"The optional version from the Syslog message.\",\n-                                \"name\": \"syslog.version\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the Syslog message.\",\n-                                \"name\": \"syslog.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname or IP address of the Syslog message.\",\n-                                \"name\": \"syslog.hostname\"\n-                            },\n-                            {\n-                                \"description\": \"The appname of the Syslog message.\",\n-                                \"name\": \"syslog.appname\"\n-                            },\n-                            {\n-                                \"description\": \"The procid of the Syslog message.\",\n-                                \"name\": \"syslog.procid\"\n-                            },\n-                            {\n-                                \"description\": \"The messageid the Syslog message.\",\n-                                \"name\": \"syslog.messageid\"\n-                            },\n-                            {\n-                                \"description\": \"Multiple entries per structuredData of the Syslog message.\",\n-                                \"name\": \"syslog.structuredData\"\n                             },\n-                            {\n-                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n-                                \"name\": \"syslog.sender\"\n+                            \"prefix\": {\n+                                \"description\": \"Search prefix for listing\",\n+                                \"displayName\": \"Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"prefix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n-                                \"name\": \"syslog.body\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Each dynamic property represents a RecordPath that will be evaluated against each record in an incoming FlowFile. When the value of the RecordPath is determined for a Record, an attribute is added to the outgoing FlowFile. The name of the attribute is the same as the name of this property. The value of the attribute is the same as the value of the field in the Record that the RecordPath points to. Note that no attribute will be added if the value returned for the RecordPath is null or is not a scalar value (i.e., the value is an Array, Map, or Record).\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name given to the dynamic property is the name of the attribute that will be used to denote the value of the associated RecordPath.\",\n-                                \"value\": \"A RecordPath that points to a field in the Record.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n                             \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Storage Account Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-name\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n+                                \"displayName\": \"Storage Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"storage-endpoint-suffix\": {\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ConvertRecord\",\n-                            \"org.apache.nifi.processors.standard.QueryRecord\",\n-                            \"org.apache.nifi.processors.standard.SplitRecord\",\n-                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of blobs, the timestamp of the newest blob is stored. This allows the Processor to list only blobs that have been added or modified after this date the next time that the Processor is run.  State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully partitioned will be routed to this relationship\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile cannot be partitioned from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Once all records in an incoming FlowFile have been partitioned, the original FlowFile is routed to this relationship.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"bin\",\n-                            \"group\",\n-                            \"organize\",\n-                            \"partition\",\n-                            \"record\",\n-                            \"recordpath\",\n-                            \"rpath\",\n-                            \"segment\",\n-                            \"split\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PartitionRecord\",\n-                        \"typeDescription\": \"Splits, or partitions, record-oriented data based on the configured fields in the data. One or more properties must be added. The name of the property is the name of an attribute to add. The value of the property is a RecordPath to evaluate against each Record. Two records will go to the same outbound FlowFile only if they have the same value for each of the given RecordPaths. Because we know that all records in a given output FlowFile have the same value for the fields that are specified by the RecordPath, an attribute is added for each field. See Additional Details on the Usage page for more information and examples.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\",\n+                        \"typeDescription\": \"Lists blobs in an Azure Storage container. Listing details are attached to an empty FlowFile for use with FetchAzureBlobStorage.  This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records in an outgoing FlowFile\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The name of the Azure container\",\n+                                \"name\": \"azure.container\"\n                             },\n                             {\n-                                \"description\": \"The MIME Type that the configured Record Writer indicates is appropriate\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The name of the Azure blob\",\n+                                \"name\": \"azure.blobname\"\n                             },\n                             {\n-                                \"description\": \"All partitioned FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n+                                \"description\": \"Primary location for blob content\",\n+                                \"name\": \"azure.primaryUri\"\n                             },\n                             {\n-                                \"description\": \"A one-up number that indicates the ordering of the partitioned FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"Secondary location for blob content\",\n+                                \"name\": \"azure.secondaryUri\"\n                             },\n                             {\n-                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"Etag for the Azure blob\",\n+                                \"name\": \"azure.etag\"\n                             },\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n+                                \"description\": \"Length of the blob\",\n+                                \"name\": \"azure.length\"\n                             },\n                             {\n-                                \"description\": \"For each dynamic property that is added, an attribute may be added to the FlowFile. See the description for Dynamic Properties for more information.\",\n-                                \"name\": \"<dynamic property name>\"\n+                                \"description\": \"The timestamp in Azure for the blob\",\n+                                \"name\": \"azure.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"MimeType of the content\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"Language code for the content\",\n+                                \"name\": \"lang\"\n+                            },\n+                            {\n+                                \"description\": \"This is the type of blob and can be either page or block type\",\n+                                \"name\": \"azure.blobtype\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.standard.InvokeHTTP\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Attributes to Send as HTTP Headers (Regex)\": {\n-                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be sent as HTTP Headers\",\n-                                \"displayName\": \"Attributes to Send as HTTP Headers (Regex)\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to Send as HTTP Headers (Regex)\",\n+                                \"name\": \"Maximum File Age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Compression Level\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Determines the GZIP Compression Level to use when sending the file; the value must be in the range of 0-9. A value of 0 indicates that the file will not be GZIP'ed\",\n-                                \"displayName\": \"Compression Level\",\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Level\",\n-                                \"required\": true,\n+                                \"name\": \"Maximum File Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"How long to wait when attempting to connect to the remote server before giving up\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Content-Type\": {\n-                                \"defaultValue\": \"${mime.type}\",\n-                                \"description\": \"The Content-Type to specify for the content of the FlowFile being POSTed if Send as FlowFile is false. In the case of an empty value after evaluating an expression language expression, Content-Type defaults to application/octet-stream\",\n-                                \"displayName\": \"Content-Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Content-Type\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"How long to wait between receiving segments of data from the remote server before giving up and discarding the partial file\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n+                                \"name\": \"Minimum File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Batch Size\": {\n-                                \"defaultValue\": \"100 MB\",\n-                                \"description\": \"If the Send as FlowFile property is true, specifies the max data size for a batch of FlowFiles to send in a single HTTP POST. If not specified, each FlowFile will be sent separately. If the Send as FlowFile property is false, this property is ignored\",\n-                                \"displayName\": \"Max Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Batch Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Data to Post per Second\": {\n-                                \"description\": \"The maximum amount of data to send per second; this allows the bandwidth to be throttled to a specified data rate; if not specified, the data rate is not throttled\",\n-                                \"displayName\": \"Max Data to Post per Second\",\n+                            \"blob-name-prefix\": {\n+                                \"description\": \"Search prefix for listing\",\n+                                \"displayName\": \"Blob Name Prefix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Data to Post per Second\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"blob-name-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password required to access the URL\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"container-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Port\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"et-state-cache\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"et-state-cache\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Send as FlowFile\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will package the FlowFile's contents and attributes together and send the FlowFile Package; otherwise, will send only the FlowFile's content\",\n-                                \"displayName\": \"Send as FlowFile\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send as FlowFile\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"URL\": {\n-                                \"description\": \"The URL to POST to. The URL may be defined using the Attribute Expression Language. A separate connection pool will be created for each unique host:port combination.\",\n-                                \"displayName\": \"URL\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"URL\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-time-window\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Chunked Encoding\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether or not to use Chunked Encoding to send the data. This property is ignored in the event the contents are compressed or sent as FlowFiles.\",\n-                                \"displayName\": \"Use Chunked Encoding\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Chunked Encoding\",\n-                                \"required\": false,\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"User Agent\": {\n-                                \"defaultValue\": \"Apache-HttpClient/4.5.14 (Java/1.8.0_302)\",\n-                                \"description\": \"What to report as the User Agent when we connect to the remote server\",\n-                                \"displayName\": \"User Agent\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"User Agent\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username required to access the URL\",\n-                                \"displayName\": \"Username\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n+                                \"displayName\": \"Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n+                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of blobs, the timestamp of the newest blob is stored if 'Tracking Timestamps' Listing Strategy is in use (by default). This allows the Processor to list only blobs that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that are successfully send will be transferred to success\",\n-                                \"name\": \"success\"\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n+                        \"typeDescription\": \"Lists blobs in an Azure Blob Storage container. Listing details are attached to an empty FlowFile for use with FetchAzureBlobStorage. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. The processor uses Azure Blob Storage client library v12.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Azure Blob Storage container\",\n+                                \"name\": \"azure.container\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the blob on Azure Blob Storage\",\n+                                \"name\": \"azure.blobname\"\n+                            },\n+                            {\n+                                \"description\": \"Primary location of the blob\",\n+                                \"name\": \"azure.primaryUri\"\n+                            },\n+                            {\n+                                \"description\": \"ETag of the blob\",\n+                                \"name\": \"azure.etag\"\n+                            },\n+                            {\n+                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n+                                \"name\": \"azure.blobtype\"\n+                            },\n+                            {\n+                                \"description\": \"MIME Type of the content\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"Files that fail to send will transferred to failure\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Language code for the content\",\n+                                \"name\": \"lang\"\n+                            },\n+                            {\n+                                \"description\": \"Timestamp of the blob\",\n+                                \"name\": \"azure.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"Length of the blob\",\n+                                \"name\": \"azure.length\"\n                             }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"archive\",\n-                            \"copy\",\n-                            \"http\",\n-                            \"https\",\n-                            \"remote\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PostHTTP\",\n-                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use InvokeHTTP instead. Performs an HTTP Post with the content of the FlowFile. Uses a connection pool with max number of connections equal to the number of possible endpoints multiplied by the Concurrent Tasks configuration.\",\n-                        \"version\": \"1.27.0\"\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Data Record Path\": {\n-                                \"description\": \"If specified, this property denotes a RecordPath that will be evaluated against each incoming Record and the Record that results from evaluating the RecordPath will be sent to the database instead of sending the entire incoming Record. If not specified, the entire incoming Record will be published to the database.\",\n-                                \"displayName\": \"Data Record Path\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Record Path\",\n+                                \"name\": \"Maximum File Age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Statement Type Record Path\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use Record Path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Statement Type\",\n-                                        \"propertyName\": \"put-db-record-statement-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies a RecordPath to evaluate against each Record in order to determine the Statement Type. The RecordPath should equate to either INSERT, UPDATE, UPSERT, or DELETE.\",\n-                                \"displayName\": \"Statement Type Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Statement Type Record Path\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"database-session-autocommit\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"The autocommit mode to set on the database connection being used. If set to false, the operation(s) will be explicitly committed or rolled back (based on success or failure respectively). If set to true, the driver/database automatically handles the commit/rollback. Setting this property to 'No value' will leave the database connection's autocommit mode unmodified.\",\n-                                \"displayName\": \"Database Session AutoCommit\",\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"database-session-autocommit\",\n+                                \"name\": \"Maximum File Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"db-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n-                                \"displayName\": \"Database Type\",\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-type\",\n-                                \"required\": false,\n+                                \"name\": \"Minimum File Age\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-allow-multiple-statements\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use statement.type Attribute\",\n-                                            \"Use Record Path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Statement Type\",\n-                                        \"propertyName\": \"put-db-record-statement-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"If the Statement Type is 'SQL' (as set in the statement.type attribute), this field indicates whether to split the field value by a semicolon and execute each statement separately. If any statement causes an error, the entire set of statements will be rolled back. If the Statement Type is not 'SQL', this field is ignored.\",\n-                                \"displayName\": \"Allow Multiple SQL Statements\",\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-allow-multiple-statements\",\n+                                \"name\": \"Minimum File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-binary-format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"String values for binary columns contain the original value as text via UTF-8 character encoding\",\n-                                        \"displayName\": \"UTF-8\",\n-                                        \"value\": \"UTF-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"String values for binary columns contain the original value in hexadecimal format\",\n-                                        \"displayName\": \"Hexadecimal\",\n-                                        \"value\": \"Hexadecimal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"String values for binary columns contain the original value in Base64 encoded format\",\n-                                        \"displayName\": \"Base64\",\n-                                        \"value\": \"Base64\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The format to be applied when decoding string values to binary.\",\n-                                \"displayName\": \"Binary String Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-binary-format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-catalog-name\": {\n-                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n-                                \"displayName\": \"Catalog Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-catalog-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-dcbp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database for sending records.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-dcbp-service\",\n+                                \"name\": \"adls-credentials-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"put-db-record-field-containing-sql\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use statement.type Attribute\",\n-                                            \"Use Record Path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Statement Type\",\n-                                        \"propertyName\": \"put-db-record-statement-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"If the Statement Type is 'SQL' (as set in the statement.type attribute), this field indicates which field in the record(s) contains the SQL statement to execute. The value of the field must be a single SQL statement. If the Statement Type is not 'SQL', this field is ignored.\",\n-                                \"displayName\": \"Field Containing SQL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-field-containing-sql\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-max-batch-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies maximum number of sql statements to be included in each batch sent to the database. Zero means the batch size is not limited, and all statements are put into a single batch which can cause high memory usage issues for a very large number of statements.\",\n-                                \"displayName\": \"Maximum Batch Size\",\n+                            \"directory-name\": {\n+                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n+                                \"displayName\": \"Directory Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-max-batch-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-query-timeout\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL statement , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"put-db-record-query-timeout\",\n+                                \"name\": \"directory-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-quoted-identifiers\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n-                                \"displayName\": \"Quote Column Identifiers\",\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-quoted-identifiers\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-quoted-table-identifiers\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name.\",\n-                                \"displayName\": \"Quote Table Identifiers\",\n+                            \"et-state-cache\": {\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-quoted-table-identifiers\",\n+                                \"name\": \"et-state-cache\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-record-reader\",\n-                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"put-db-record-schema-name\": {\n-                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly.\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-schema-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-statement-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UPDATE\",\n-                                        \"value\": \"UPDATE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INSERT\",\n-                                        \"value\": \"INSERT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UPSERT\",\n-                                        \"value\": \"UPSERT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INSERT_IGNORE\",\n-                                        \"value\": \"INSERT_IGNORE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DELETE\",\n-                                        \"value\": \"DELETE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Use statement.type Attribute\",\n-                                        \"value\": \"Use statement.type Attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Use Record Path\",\n-                                        \"value\": \"Use Record Path\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the type of SQL Statement to generate. Please refer to the database documentation for a description of the behavior of each operation. Please note that some Database Types may not support certain Statement Types. If 'Use statement.type Attribute' is chosen, then the value is taken from the statement.type attribute in the FlowFile. The 'Use statement.type Attribute' option is the only one that allows the 'SQL' statement type. If 'SQL' is specified, the value of the field specified by the 'Field Containing SQL' property is expected to be a valid SQL statement on the target database, and will be executed as-is.\",\n-                                \"displayName\": \"Statement Type\",\n+                            \"file-filter\": {\n+                                \"description\": \"Only files whose names match the given regular expression will be listed\",\n+                                \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-statement-type\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"file-filter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-table-name\": {\n-                                \"description\": \"The name of the table that the statement should affect. Note that if the database is case-sensitive, the table name must match the database's table name exactly.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"filesystem-name\": {\n+                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n+                                \"displayName\": \"Filesystem Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-table-name\",\n+                                \"name\": \"filesystem-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-translate-field-names\": {\n+                            \"include-temporary-files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, the Processor will attempt to translate field names into the appropriate column names for the table specified. If false, the field names must match the column names exactly, or the column will not be updated\",\n-                                \"displayName\": \"Translate Field Names\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to include temporary files when listing the contents of configured directory paths.\",\n+                                \"displayName\": \"Include Temporary Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-translate-field-names\",\n-                                \"required\": false,\n+                                \"name\": \"include-temporary-files\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-unmatched-column-behavior\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  No notification will be logged\",\n-                                        \"displayName\": \"Ignore Unmatched Columns\",\n-                                        \"value\": \"Ignore Unmatched Columns\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  A warning will be logged\",\n-                                        \"displayName\": \"Warn on Unmatched Columns\",\n-                                        \"value\": \"Warn on Unmatched Columns\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the document.  An error will be logged\",\n-                                        \"displayName\": \"Fail on Unmatched Columns\",\n-                                        \"value\": \"Fail on Unmatched Columns\"\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Fail on Unmatched Columns\",\n-                                \"description\": \"If an incoming record does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Column Behavior\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-unmatched-column-behavior\",\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"path-filter\": {\n+                                \"description\": \"When 'Recurse Subdirectories' is true, then only subdirectories whose paths match the given regular expression will be scanned\",\n+                                \"displayName\": \"Path Filter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"path-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-unmatched-field-behavior\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any field in the document that cannot be mapped to a column in the database is ignored\",\n-                                        \"displayName\": \"Ignore Unmatched Fields\",\n-                                        \"value\": \"Ignore Unmatched Fields\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n-                                        \"displayName\": \"Fail on Unmatched Fields\",\n-                                        \"value\": \"Fail on Unmatched Fields\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Ignore Unmatched Fields\",\n-                                \"description\": \"If an incoming record has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Field Behavior\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-unmatched-field-behavior\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"put-db-record-update-keys\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use statement.type Attribute\",\n-                                            \"Use Record Path\",\n-                                            \"UPSERT\",\n-                                            \"UPDATE\",\n-                                            \"SQL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Statement Type\",\n-                                        \"propertyName\": \"put-db-record-statement-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the table's Primary Keys are used. In this case, if no Primary Key exists, the conversion to SQL will fail if Unmatched Column Behaviour is set to FAIL. This property is ignored if the Statement Type is INSERT\",\n-                                \"displayName\": \"Update Keys\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-update-keys\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"rollback-on-failure\": {\n+                            \"recurse-subdirectories\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specify how to handle error. By default (false), if an error occurs while processing a FlowFile, the FlowFile will be routed to 'failure' or 'retry' relationship based on error type, and processor can continue with next FlowFile. Instead, you may want to rollback currently processed FlowFiles and stop further processing immediately. In that case, you can do so by enabling this 'Rollback On Failure' property.  If enabled, failed FlowFiles will stay in the input relationship without penalizing it and being processed repeatedly until it gets processed successfully or removed by other means. It is important to set adequate 'Yield Duration' to avoid retrying too frequently.\",\n-                                \"displayName\": \"Rollback On Failure\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rollback-on-failure\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"table-schema-cache-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies how many Table Schemas should be cached\",\n-                                \"displayName\": \"Table Schema Cache Size\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether to list files from subdirectories of the directory\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"table-schema-cache-size\",\n+                                \"name\": \"recurse-subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If 'Use statement.type Attribute' is selected for the Statement Type property, the value of this attribute will be used to determine the type of statement (INSERT, UPDATE, DELETE, SQL, etc.) to generate and execute.\",\n-                                \"name\": \"statement.type\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated and retrying the operation will also fail, such as an invalid query or an integrity constraint violation\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"delete\",\n-                            \"insert\",\n-                            \"jdbc\",\n-                            \"put\",\n-                            \"record\",\n-                            \"sql\",\n-                            \"update\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutDatabaseRecord\",\n-                        \"typeDescription\": \"The PutDatabaseRecord processor uses a specified RecordReader to input (possibly multiple) records from an incoming flow file. These records are translated to SQL statements and executed as a single transaction. If any errors occur, the flow file is routed to failure or retry, and if the records are transmitted successfully, the incoming flow file is routed to success.  The type of statement executed by the processor is specified via the Statement Type property, which accepts some hard-coded values such as INSERT, UPDATE, and DELETE, as well as 'Use statement.type Attribute', which causes the processor to get the statement type from a flow file attribute.  IMPORTANT: If the Statement Type is UPDATE, then the incoming records must not alter the value(s) of the primary keys (or user-specified Update Keys). If such records are encountered, the UPDATE statement issued to the database may do nothing (if no existing records with the new primary key values are found), or could inadvertently corrupt the existing data (by changing records for which the new values of the primary keys exist).\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Lists directory in an Azure Data Lake Storage Gen 2 filesystem\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"If an error occurs during processing, the flow file will be routed to failure or retry, and this attribute will be populated with the cause of the error.\",\n-                                \"name\": \"putdatabaserecord.error\"\n+                                \"description\": \"The name of the Azure File System\",\n+                                \"name\": \"azure.filesystem\"\n+                            },\n+                            {\n+                                \"description\": \"The full path of the Azure File\",\n+                                \"name\": \"azure.filePath\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure Directory\",\n+                                \"name\": \"azure.directory\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure File\",\n+                                \"name\": \"azure.filename\"\n+                            },\n+                            {\n+                                \"description\": \"The length of the Azure File\",\n+                                \"name\": \"azure.length\"\n+                            },\n+                            {\n+                                \"description\": \"The last modification time of the Azure File\",\n+                                \"name\": \"azure.lastModified\"\n+                            },\n+                            {\n+                                \"description\": \"The ETag of the Azure File\",\n+                                \"name\": \"azure.etag\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Cache Entry Identifier\": {\n-                                \"description\": \"A FlowFile attribute, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the cache key\",\n-                                \"displayName\": \"Cache Entry Identifier\",\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Cache Entry Identifier\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"adls-credentials-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Cache update strategy\": {\n+                            \"conflict-resolution-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Adds the specified entry to the cache, replacing any value that is currently set.\",\n-                                        \"displayName\": \"Replace if present\",\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"replace\",\n                                         \"value\": \"replace\"\n                                     },\n                                     {\n-                                        \"description\": \"Adds the specified entry to the cache, if the key does not exist.\",\n-                                        \"displayName\": \"Keep original\",\n-                                        \"value\": \"keeporiginal\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"replace\",\n-                                \"description\": \"Determines how the cache is updated if the cache already contains the entry\",\n-                                \"displayName\": \"Cache update strategy\",\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cache update strategy\",\n+                                \"name\": \"conflict-resolution-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"The Controller Service that is used to cache flow files\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"directory-name\": {\n+                                \"description\": \"Name of the Azure Storage Directory where the files will be moved. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. Non-existing directories will be created. If the original directory structure should be kept, the full directory path needs to be provided after the destination directory. e.g.: destdir/${azure.directory}\",\n+                                \"displayName\": \"Destination Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"directory-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"filesystem-name\": {\n+                                \"description\": \"Name of the Azure Storage File System where the files will be moved.\",\n+                                \"displayName\": \"Destination Filesystem\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Max cache entry size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum amount of data to put into cache\",\n-                                \"displayName\": \"Max cache entry size\",\n+                            \"source-directory-name\": {\n+                                \"defaultValue\": \"${azure.directory}\",\n+                                \"description\": \"Name of the Azure Storage Directory from where the move should happen. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value.\",\n+                                \"displayName\": \"Source Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max cache entry size\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"source-directory-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"source-filesystem-name\": {\n+                                \"defaultValue\": \"${azure.filesystem}\",\n+                                \"description\": \"Name of the Azure Storage File System from where the move should happen.\",\n+                                \"displayName\": \"Source Filesystem\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"source-filesystem-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.FetchDistributedMapCache\"\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully inserted into cache will be routed to this relationship\",\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that cannot be inserted into the cache will be routed to this relationship\",\n+                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"put\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutDistributedMapCache\",\n-                        \"typeDescription\": \"Gets the content of a FlowFile and puts it to a distributed map cache, using a cache key computed from FlowFile attributes. If the cache already contains the entry and the cache update strategy is 'keep original' the entry is not replaced.'\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.MoveAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Moves content within an Azure Data Lake Storage Gen 2. After the move, files will be no longer available on source location.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All FlowFiles will have an attribute 'cached'. The value of this attribute is true, is the FlowFile is cached, otherwise false.\",\n-                                \"name\": \"cached\"\n+                                \"description\": \"The name of the source Azure File System\",\n+                                \"name\": \"azure.source.filesystem\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the source Azure Directory\",\n+                                \"name\": \"azure.source.directory\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure File System\",\n+                                \"name\": \"azure.filesystem\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure Directory\",\n+                                \"name\": \"azure.directory\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure File\",\n+                                \"name\": \"azure.filename\"\n+                            },\n+                            {\n+                                \"description\": \"Primary location for file content\",\n+                                \"name\": \"azure.primaryUri\"\n+                            },\n+                            {\n+                                \"description\": \"The length of the Azure File\",\n+                                \"name\": \"azure.length\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -116464,361 +116673,268 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Dynamic property names that will be passed to the Mail session. Possible properties can be found in: https://javaee.github.io/javamail/docs/api/com/sun/mail/smtp/package-summary.html.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"mail.propertyName\",\n-                                \"value\": \"Value for a specific property to be set in the JavaMail Session object\"\n-                            }\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n                         ],\n+                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attach File\": {\n+                            \"azure-create-container\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the FlowFile content should be attached to the email\",\n-                                \"displayName\": \"Attach File\",\n+                                \"description\": \"Specifies whether to check if the container exists and to automatically create it if it does not. Permission to list containers is required. If false, this check is not made, but the Put operation will fail if the container does not exist.\",\n+                                \"displayName\": \"Create Container\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attach File\",\n+                                \"name\": \"azure-create-container\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"BCC\": {\n-                                \"description\": \"The recipients to include in the BCC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"BCC\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"BCC\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"CC\": {\n-                                \"description\": \"The recipients to include in the CC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"CC\",\n+                            \"blob\": {\n+                                \"description\": \"The filename of the blob\",\n+                                \"displayName\": \"Blob\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"CC\",\n-                                \"required\": false,\n+                                \"name\": \"blob\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Content Type\": {\n-                                \"defaultValue\": \"text/plain\",\n-                                \"description\": \"Mime Type used to interpret the contents of the email, such as text/plain or text/html\",\n-                                \"displayName\": \"Content Type\",\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Content Type\",\n+                                \"name\": \"container-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"From\": {\n-                                \"description\": \"Specifies the Email address to use as the sender. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"From\",\n+                            \"cse-key-id\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SYMMETRIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"cse-key-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"From\",\n-                                \"required\": true,\n+                                \"name\": \"cse-key-id\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Include All Attributes In Message\": {\n+                            \"cse-key-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The blobs sent to Azure are not encrypted.\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The blobs sent to Azure are encrypted using a symmetric algorithm.\",\n+                                        \"displayName\": \"SYMMETRIC\",\n+                                        \"value\": \"SYMMETRIC\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not all FlowFile attributes should be recorded in the body of the email message\",\n-                                \"displayName\": \"Include All Attributes In Message\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include All Attributes In Message\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message\": {\n-                                \"description\": \"The body of the email message\",\n-                                \"displayName\": \"Message\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP Auth\": {\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Flag indicating whether authentication should be used\",\n-                                \"displayName\": \"SMTP Auth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP Auth\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP Hostname\": {\n-                                \"description\": \"The hostname of the SMTP host\",\n-                                \"displayName\": \"SMTP Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP Hostname\",\n+                                \"name\": \"cse-key-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SMTP Password\": {\n+                            \"cse-symmetric-key-hex\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"password-based-authorization-mode\"\n+                                            \"SYMMETRIC\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"cse-key-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Password for the SMTP account\",\n-                                \"displayName\": \"SMTP Password\",\n+                                \"description\": \"When using symmetric client-side encryption, this is the raw key, encoded in hexadecimal\",\n+                                \"displayName\": \"Symmetric Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP Password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cse-symmetric-key-hex\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"SMTP Port\": {\n-                                \"defaultValue\": \"25\",\n-                                \"description\": \"The Port used for SMTP communications\",\n-                                \"displayName\": \"SMTP Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP Socket Factory\": {\n-                                \"defaultValue\": \"javax.net.ssl.SSLSocketFactory\",\n-                                \"description\": \"Socket Factory to use for SMTP Connection\",\n-                                \"displayName\": \"SMTP Socket Factory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP Socket Factory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP TLS\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Flag indicating whether Opportunistic TLS should be enabled using STARTTLS command\",\n-                                \"displayName\": \"SMTP STARTTLS\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP TLS\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP Username\": {\n-                                \"description\": \"Username for the SMTP account\",\n-                                \"displayName\": \"SMTP Username\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP Username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP X-Mailer Header\": {\n-                                \"defaultValue\": \"NiFi\",\n-                                \"description\": \"X-Mailer used in the header of the outgoing email\",\n-                                \"displayName\": \"SMTP X-Mailer Header\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP X-Mailer Header\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Subject\": {\n-                                \"defaultValue\": \"Message from NiFi\",\n-                                \"description\": \"The email subject\",\n-                                \"displayName\": \"Subject\",\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Subject\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"To\": {\n-                                \"description\": \"The recipients to include in the To-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"To\",\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Storage Account Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"To\",\n+                                \"name\": \"storage-account-name\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"attribute-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Email messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n+                                \"displayName\": \"Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n+                                \"name\": \"storage-credentials-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"authorization-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use password\",\n-                                        \"displayName\": \"Use Password\",\n-                                        \"value\": \"password-based-authorization-mode\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use OAuth2 to acquire access token\",\n-                                        \"displayName\": \"Use OAuth2\",\n-                                        \"value\": \"oauth-based-authorization-mode\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"password-based-authorization-mode\",\n-                                \"description\": \"How to authorize sending email on the user's behalf.\",\n-                                \"displayName\": \"Authorization Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorization-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"email-ff-content-as-message\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the FlowFile content should be the message of the email. If true, the 'Message' property is ignored.\",\n-                                \"displayName\": \"Flow file content as message\",\n+                            \"storage-endpoint-suffix\": {\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"email-ff-content-as-message\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"input-character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the FlowFile contents for reading input FlowFile contents to generate the message body or as an attachment to the message. If not set, UTF-8 will be the default value.\",\n-                                \"displayName\": \"Input Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"input-character-set\",\n-                                \"required\": true,\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"oauth2-access-token-provider\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"oauth-based-authorization-mode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"OAuth2 service that can provide access tokens.\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully sent will be routed to this relationship\",\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that fail to send will be routed to this relationship\",\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The entirety of the FlowFile's content (as a String object) will be read into memory in case the property to use the flow file content as the email body is set to true.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"email\",\n-                            \"notify\",\n-                            \"put\",\n-                            \"smtp\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutEmail\",\n-                        \"typeDescription\": \"Sends an e-mail to configured recipients for each incoming FlowFile\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\",\n+                        \"typeDescription\": \"Puts content into an Azure Storage Blob\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Azure container\",\n+                                \"name\": \"azure.container\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure blob\",\n+                                \"name\": \"azure.blobname\"\n+                            },\n+                            {\n+                                \"description\": \"Primary location for blob content\",\n+                                \"name\": \"azure.primaryUri\"\n+                            },\n+                            {\n+                                \"description\": \"Etag for the Azure blob\",\n+                                \"name\": \"azure.etag\"\n+                            },\n+                            {\n+                                \"description\": \"Length of the blob\",\n+                                \"name\": \"azure.length\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp in Azure for the blob\",\n+                                \"name\": \"azure.timestamp\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -116826,680 +116942,797 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"The command specified in the key will be executed before doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"pre.cmd._____\",\n-                                \"value\": \"Not used\"\n-                            },\n-                            {\n-                                \"description\": \"The command specified in the key will be executed after doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"post.cmd._____\",\n-                                \"value\": \"Not used\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"500\",\n-                                \"description\": \"The maximum number of FlowFiles to send in a single connection\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Client-Side Encryption Key ID\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"LOCAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Client-Side Encryption Key ID\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Conflict Resolution\": {\n+                            \"Client-Side Encryption Key Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REPLACE\",\n-                                        \"value\": \"REPLACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IGNORE\",\n-                                        \"value\": \"IGNORE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RENAME\",\n-                                        \"value\": \"RENAME\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REJECT\",\n-                                        \"value\": \"REJECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FAIL\",\n-                                        \"value\": \"FAIL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n+                                        \"description\": \"Client-Side Encryption disabled\",\n                                         \"displayName\": \"NONE\",\n                                         \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Client-Side Encryption enabled using local key\",\n+                                        \"displayName\": \"LOCAL\",\n+                                        \"value\": \"LOCAL\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"NONE\",\n-                                \"description\": \"Determines how to handle the problem of filename collisions\",\n-                                \"displayName\": \"Conflict Resolution\",\n+                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution\",\n+                                \"name\": \"Client-Side Encryption Key Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Mode\": {\n+                            \"Client-Side Encryption Local Key\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"LOCAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"When using local client-side encryption, this is the raw key, encoded in hexadecimal\",\n+                                \"displayName\": \"Client-Side Encryption Local Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client-Side Encryption Local Key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"File Resource Service\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"FILE_RESOURCE_SERVICE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n+                                        \"propertyName\": \"Resource Transfer Source\"\n+                                    }\n+                                ],\n+                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n+                                \"displayName\": \"File Resource Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Resource Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Resource Transfer Source\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n+                                        \"description\": \"The content of the incoming FlowFile provides the source for transfer\",\n+                                        \"displayName\": \"FlowFile Content\",\n+                                        \"value\": \"FLOWFILE_CONTENT\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\n+                                        \"description\": \"The File Resource Service provides the source for transfer\",\n+                                        \"displayName\": \"File Resource Service\",\n+                                        \"value\": \"FILE_RESOURCE_SERVICE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n+                                \"defaultValue\": \"FLOWFILE_CONTENT\",\n+                                \"description\": \"The source of the content to be transferred\",\n+                                \"displayName\": \"Resource Transfer Source\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Mode\",\n-                                \"required\": false,\n+                                \"name\": \"Resource Transfer Source\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"blob-name\": {\n+                                \"description\": \"The full name of the blob\",\n+                                \"displayName\": \"Blob Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"blob-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Directory\": {\n+                            \"conflict-resolution-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Fail if the blob already exists\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"FAIL_RESOLUTION\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Ignore if the blob already exists; the 'azure.error' attribute will be set to the value 'BLOB_ALREADY_EXISTS'\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"IGNORE_RESOLUTION\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Replace blob contents if the blob already exist\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"REPLACE_RESOLUTION\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n-                                \"displayName\": \"Create Directory\",\n+                                \"defaultValue\": \"FAIL_RESOLUTION\",\n+                                \"description\": \"Specifies whether an existing blob will have its contents replaced upon conflict.\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Directory\",\n+                                \"name\": \"conflict-resolution-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Dot Rename\": {\n+                            \"create-container\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then the filename of the sent file is prepended with a \\\".\\\" and then renamed back to the original once the file is completely sent. Otherwise, there is no rename. This property is ignored if the Temporary Filename property is set.\",\n-                                \"displayName\": \"Dot Rename\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether to check if the container exists and to automatically create it if it does not. Permission to list containers is required. If false, this check is not made, but the Put operation will fail if the container does not exist.\",\n+                                \"displayName\": \"Create Container\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dot Rename\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"create-container\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Internal Buffer Size\": {\n-                                \"defaultValue\": \"16KB\",\n-                                \"description\": \"Set the internal buffer size for buffered data streams\",\n-                                \"displayName\": \"Internal Buffer Size\",\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n+                                \"displayName\": \"Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Internal Buffer Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Last Modified Time\": {\n-                                \"description\": \"The lastModifiedTime to assign to the file after transferring it. If not set, the lastModifiedTime will not be changed. Format must be yyyy-MM-dd'T'HH:mm:ssZ. You may also use expression language such as ${file.lastModifiedTime}. If the value is invalid, the processor will not be invalid but will fail to change lastModifiedTime of the file.\",\n-                                \"displayName\": \"Last Modified Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Last Modified Time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\",\n+                        \"typeDescription\": \"Puts content into a blob on Azure Blob Storage. The processor uses Azure Blob Storage client library v12.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Azure Blob Storage container\",\n+                                \"name\": \"azure.container\"\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                            {\n+                                \"description\": \"The name of the blob on Azure Blob Storage\",\n+                                \"name\": \"azure.blobname\"\n                             },\n-                            \"Permissions\": {\n-                                \"description\": \"The permissions to assign to the file after transferring it. Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644). If not set, the permissions will not be changed. You may also use expression language such as ${file.permissions}. If the value is invalid, the processor will not be invalid but will fail to change permissions of the file.\",\n-                                \"displayName\": \"Permissions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Permissions\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Primary location of the blob\",\n+                                \"name\": \"azure.primaryUri\"\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"21\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"ETag of the blob\",\n+                                \"name\": \"azure.etag\"\n                             },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n+                                \"name\": \"azure.blobtype\"\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"MIME Type of the content\",\n+                                \"name\": \"mime.type\"\n                             },\n-                            \"Proxy Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    },\n+                            {\n+                                \"description\": \"Language code for the content\",\n+                                \"name\": \"lang\"\n+                            },\n+                            {\n+                                \"description\": \"Timestamp of the blob\",\n+                                \"name\": \"azure.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"Length of the blob\",\n+                                \"name\": \"azure.length\"\n+                            },\n+                            {\n+                                \"description\": \"Error code reported during blob operation\",\n+                                \"name\": \"azure.error.code\"\n+                            },\n+                            {\n+                                \"description\": \"When Conflict Resolution Strategy is 'ignore', this property will be true/false depending on whether the blob was ignored.\",\n+                                \"name\": \"azure.ignored\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"File Resource Service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"dependentValues\": [\n+                                            \"FILE_RESOURCE_SERVICE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n+                                        \"propertyName\": \"Resource Transfer Source\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n+                                \"displayName\": \"File Resource Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"File Resource Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Reject Zero-Byte Files\": {\n+                            \"Resource Transfer Source\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The content of the incoming FlowFile provides the source for transfer\",\n+                                        \"displayName\": \"FlowFile Content\",\n+                                        \"value\": \"FLOWFILE_CONTENT\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The File Resource Service provides the source for transfer\",\n+                                        \"displayName\": \"File Resource Service\",\n+                                        \"value\": \"FILE_RESOURCE_SERVICE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines whether or not Zero-byte files should be rejected without attempting to transfer\",\n-                                \"displayName\": \"Reject Zero-Byte Files\",\n+                                \"defaultValue\": \"FLOWFILE_CONTENT\",\n+                                \"description\": \"The source of the content to be transferred\",\n+                                \"displayName\": \"Resource Transfer Source\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reject Zero-Byte Files\",\n-                                \"required\": false,\n+                                \"name\": \"Resource Transfer Source\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Path\": {\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"adls-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Temporary Filename\": {\n-                                \"description\": \"If set, the filename of the sent file will be equal to the value specified during the transfer and after successful completion will be renamed to the original filename. If this value is set, the Dot Rename property is ignored.\",\n-                                \"displayName\": \"Temporary Filename\",\n+                            \"base-temporary-path\": {\n+                                \"defaultValue\": \"\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"WRITE_AND_RENAME\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Writing Strategy\",\n+                                        \"propertyName\": \"writing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Path where the temporary directory will be created. The Path name cannot contain a leading '/'. The root directory can be designated by the empty string value. Non-existing directories will be created.The Temporary File Directory name is _nifitempdirectory\",\n+                                \"displayName\": \"Base Temporary Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Temporary Filename\",\n+                                \"name\": \"base-temporary-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Mode\": {\n+                            \"conflict-resolution-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Use Compression\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n+                                \"name\": \"conflict-resolution-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                            \"directory-name\": {\n+                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n+                                \"displayName\": \"Directory Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"directory-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ftp-use-utf8\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n-                                \"displayName\": \"Use UTF-8 Encoding\",\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ftp-use-utf8\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"filesystem-name\": {\n+                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n+                                \"displayName\": \"Filesystem Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"writing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The processor writes the Azure file into a temporary directory and then renames/moves it to the final destination. This prevents other processes from reading partially written files.\",\n+                                        \"displayName\": \"Write and Rename\",\n+                                        \"value\": \"WRITE_AND_RENAME\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The processor writes the Azure file directly to the destination. This might result in the reading of partially written files.\",\n+                                        \"displayName\": \"Simple Write\",\n+                                        \"value\": \"SIMPLE_WRITE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"WRITE_AND_RENAME\",\n+                                \"description\": \"Defines the approach for writing the Azure file.\",\n+                                \"displayName\": \"Writing Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"writing-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetFTP\"\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that were rejected by the destination system\",\n-                                \"name\": \"reject\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n+                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"copy\",\n-                            \"egress\",\n-                            \"files\",\n-                            \"ftp\",\n-                            \"put\",\n-                            \"remote\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutFTP\",\n-                        \"typeDescription\": \"Sends FlowFiles to an FTP Server\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile as a file on Azure Data Lake Storage Gen 2\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Azure File System\",\n+                                \"name\": \"azure.filesystem\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure Directory\",\n+                                \"name\": \"azure.directory\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure File\",\n+                                \"name\": \"azure.filename\"\n+                            },\n+                            {\n+                                \"description\": \"Primary location for file content\",\n+                                \"name\": \"azure.primaryUri\"\n+                            },\n+                            {\n+                                \"description\": \"The length of the Azure File\",\n+                                \"name\": \"azure.length\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to write to any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"write filesystem\"\n-                            }\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\"\n                         ],\n+                        \"deprecationReason\": \"\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Conflict Resolution Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Create Missing Directories\": {\n+                            \"auto-delete-messages\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then missing destination directories will be created. If false, flowfiles are penalized and sent to failure.\",\n-                                \"displayName\": \"Create Missing Directories\",\n+                                \"description\": \"Specifies whether the received message is to be automatically deleted from the queue.\",\n+                                \"displayName\": \"Auto Delete Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Missing Directories\",\n+                                \"name\": \"auto-delete-messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Directory\": {\n-                                \"description\": \"The directory to which files should be written. You may use expression language such as /aa/bb/${path}\",\n-                                \"displayName\": \"Directory\",\n+                            \"batch-size\": {\n+                                \"defaultValue\": \"32\",\n+                                \"description\": \"The number of messages to be retrieved from the queue.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Group\": {\n-                                \"description\": \"Sets the group on the output file to the value of this attribute.  You may also use expression language such as ${file.group}.\",\n-                                \"displayName\": \"Group\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Group\",\n+                                \"name\": \"storage-account-key\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Last Modified Time\": {\n-                                \"description\": \"Sets the lastModifiedTime on the output file to the value of this attribute.  Format must be yyyy-MM-dd'T'HH:mm:ssZ.  You may also use expression language such as ${file.lastModifiedTime}.\",\n-                                \"displayName\": \"Last Modified Time\",\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Storage Account Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Last Modified Time\",\n+                                \"name\": \"storage-account-name\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Maximum File Count\": {\n-                                \"description\": \"Specifies the maximum number of files that can exist in the output directory\",\n-                                \"displayName\": \"Maximum File Count\",\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n+                                \"displayName\": \"Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Count\",\n+                                \"name\": \"storage-credentials-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Owner\": {\n-                                \"description\": \"Sets the owner on the output file to the value of this attribute.  You may also use expression language such as ${file.owner}. Note on many operating systems Nifi must be running as a super-user to have the permissions to set the file owner.\",\n-                                \"displayName\": \"Owner\",\n+                            \"storage-endpoint-suffix\": {\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Owner\",\n+                                \"name\": \"storage-endpoint-suffix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Permissions\": {\n-                                \"description\": \"Sets the permissions on the output file to the value of this attribute.  Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644).  You may also use expression language such as ${file.permissions}.\",\n-                                \"displayName\": \"Permissions\",\n+                            \"storage-queue-name\": {\n+                                \"description\": \"Name of the Azure Storage Queue\",\n+                                \"displayName\": \"Queue Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Permissions\",\n+                                \"name\": \"storage-queue-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n                                 \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"visibility-timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The duration during which the retrieved message should be invisible to other consumers.\",\n+                                \"displayName\": \"Visibility Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"visibility-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The filename to use when writing the FlowFile to disk.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchFile\",\n-                            \"org.apache.nifi.processors.standard.GetFile\"\n+                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to the output directory are transferred to this relationship\",\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that could not be written to the output directory for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"copy\",\n-                            \"files\",\n-                            \"filesystem\",\n-                            \"local\",\n-                            \"put\"\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"dequeue\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutFile\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to the local file system\",\n-                        \"version\": \"1.27.0\"\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage\",\n+                        \"typeDescription\": \"Retrieves the messages from an Azure Queue Storage. The retrieved messages will be deleted from the queue by default. If the requirement is to consume messages without deleting them, set 'Auto Delete Messages' to 'false'. Note: There might be chances of receiving duplicates in situations like when a message is received but was unable to be deleted from the queue due to some unexpected situations.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The absolute URI of the configured Azure Queue Storage\",\n+                                \"name\": \"azure.queue.uri\"\n+                            },\n+                            {\n+                                \"description\": \"The time when the message was inserted into the queue storage\",\n+                                \"name\": \"azure.queue.insertionTime\"\n+                            },\n+                            {\n+                                \"description\": \"The time when the message will expire from the queue storage\",\n+                                \"name\": \"azure.queue.expirationTime\"\n+                            },\n+                            {\n+                                \"description\": \"The ID of the retrieved message\",\n+                                \"name\": \"azure.queue.messageId\"\n+                            },\n+                            {\n+                                \"description\": \"The pop receipt of the retrieved message\",\n+                                \"name\": \"azure.queue.popReceipt\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -117507,980 +117740,1169 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.jms.processors.PublishJMS\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Client ID Prefix\": {\n-                                \"description\": \"A human-readable ID that can be used to associate connections with yourself so that the maintainers of the JMS Server know who to contact if problems arise\",\n-                                \"displayName\": \"Client ID Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client ID Prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"The amount of time to wait when attempting to receive a message before giving up and assuming failure\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Copy Attributes to JMS Properties\": {\n+                            \"Auto Delete Messages\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not FlowFile Attributes should be translated into JMS Message Properties. If true, all attributes starting with 'jms.' will be set as Properties on the JMS Message (without the 'jms.' prefix). If an attribute exists that starts with the same value but ends in '.type', that attribute will be used to determine the JMS Message Property type.\",\n-                                \"displayName\": \"Copy Attributes to JMS Properties\",\n+                                \"description\": \"Specifies whether the received message is to be automatically deleted from the queue.\",\n+                                \"displayName\": \"Auto Delete Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Copy Attributes to JMS Properties\",\n+                                \"name\": \"Auto Delete Messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Destination Name\": {\n-                                \"description\": \"The name of the JMS Topic or queue to use\",\n-                                \"displayName\": \"Destination Name\",\n+                            \"Credentials Service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Storage Credentials.\",\n+                                \"displayName\": \"Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Name\",\n+                                \"name\": \"Credentials Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Destination Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Queue\",\n-                                        \"value\": \"Queue\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Topic\",\n-                                        \"value\": \"Topic\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Queue\",\n-                                \"description\": \"The type of the JMS Destination to use\",\n-                                \"displayName\": \"Destination Type\",\n+                            \"Message Batch Size\": {\n+                                \"defaultValue\": \"32\",\n+                                \"description\": \"The number of messages to be retrieved from the queue.\",\n+                                \"displayName\": \"Message Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Type\",\n+                                \"name\": \"Message Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"JMS Provider\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ActiveMQ\",\n-                                        \"value\": \"ActiveMQ\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ActiveMQ\",\n-                                \"description\": \"The Provider used for the JMS Server\",\n-                                \"displayName\": \"JMS Provider\",\n+                            \"Queue Name\": {\n+                                \"description\": \"Name of the Azure Storage Queue\",\n+                                \"displayName\": \"Queue Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JMS Provider\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Queue Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum amount of data that can be buffered for a JMS Message. If a FlowFile's size exceeds this value, the FlowFile will be routed to failure.\",\n-                                \"displayName\": \"Max Buffer Size\",\n+                            \"Request Timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The timeout for read or write requests to Azure Queue Storage. Defaults to 1 second.\",\n+                                \"displayName\": \"Request Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Buffer Size\",\n+                                \"name\": \"Request Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Batch Size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The number of messages to pull/push in a single iteration of the processor\",\n-                                \"displayName\": \"Message Batch Size\",\n+                            \"Visibility Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The duration during which the retrieved message should be invisible to other consumers.\",\n+                                \"displayName\": \"Visibility Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Batch Size\",\n+                                \"name\": \"Visibility Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Priority\": {\n-                                \"description\": \"The Priority of the Message\",\n-                                \"displayName\": \"Message Priority\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message Priority\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message Time to Live\": {\n-                                \"description\": \"The amount of time that the message should live on the destination before being removed; if not specified, the message will never expire.\",\n-                                \"displayName\": \"Message Time to Live\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Time to Live\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Message Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"byte\",\n-                                        \"value\": \"byte\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"stream\",\n-                                        \"value\": \"stream\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"map\",\n-                                        \"value\": \"map\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"empty\",\n-                                        \"value\": \"empty\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"byte\",\n-                                \"description\": \"The Type of JMS Message to Construct\",\n-                                \"displayName\": \"Message Type\",\n+                            \"storage-endpoint-suffix\": {\n+                                \"defaultValue\": \"queue.core.windows.net\",\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n+                                \"displayName\": \"Endpoint Suffix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Type\",\n+                                \"name\": \"storage-endpoint-suffix\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"dequeue\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\",\n+                        \"typeDescription\": \"Retrieves the messages from an Azure Queue Storage. The retrieved messages will be deleted from the queue by default. If the requirement is to consume messages without deleting them, set 'Auto Delete Messages' to 'false'. Note: There might be chances of receiving duplicates in situations like when a message is received but was unable to be deleted from the queue due to some unexpected situations.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The absolute URI of the configured Azure Queue Storage\",\n+                                \"name\": \"azure.queue.uri\"\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization\",\n-                                \"displayName\": \"Password\",\n+                            {\n+                                \"description\": \"The time when the message was inserted into the queue storage\",\n+                                \"name\": \"azure.queue.insertionTime\"\n+                            },\n+                            {\n+                                \"description\": \"The time when the message will expire from the queue storage\",\n+                                \"name\": \"azure.queue.expirationTime\"\n+                            },\n+                            {\n+                                \"description\": \"The ID of the retrieved message\",\n+                                \"name\": \"azure.queue.messageId\"\n+                            },\n+                            {\n+                                \"description\": \"The pop receipt of the retrieved message\",\n+                                \"name\": \"azure.queue.popReceipt\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage_v12\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-key\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Reply-To Queue\": {\n-                                \"description\": \"The name of the queue to which a reply to should be added\",\n-                                \"displayName\": \"Reply-To Queue\",\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Storage Account Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Reply-To Queue\",\n+                                \"name\": \"storage-account-name\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n+                                \"displayName\": \"Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"storage-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"URL\": {\n-                                \"description\": \"The URL of the JMS Server\",\n-                                \"displayName\": \"URL\",\n+                            \"storage-endpoint-suffix\": {\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-queue-name\": {\n+                                \"description\": \"Name of the Azure Storage Queue\",\n+                                \"displayName\": \"Queue Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-queue-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"time-to-live\": {\n+                                \"defaultValue\": \"7 days\",\n+                                \"description\": \"Maximum time to allow the message to be in the queue. If left empty, the default value of 7 days will be used.\",\n+                                \"displayName\": \"TTL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"URL\",\n-                                \"required\": true,\n+                                \"name\": \"time-to-live\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username used for authentication and authorization\",\n-                                \"displayName\": \"Username\",\n+                            \"visibility-delay\": {\n+                                \"defaultValue\": \"0 secs\",\n+                                \"description\": \"The length of time during which the message will be invisible, starting when it is added to the queue. This value must be greater than or equal to 0 and less than the TTL value.\",\n+                                \"displayName\": \"Visibility Delay\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"visibility-delay\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetJMSQueue\",\n-                            \"org.apache.nifi.processors.standard.GetJMSTopic\"\n+                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are sent to the JMS destination are routed to this relationship\",\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot be routed to the JMS destination are routed to this relationship\",\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"jms\",\n-                            \"put\",\n-                            \"send\"\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"enqueue\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutJMS\",\n-                        \"typeDescription\": \"Creates a JMS Message from the contents of a FlowFile and sends the message to a ActiveMQ JMS Server.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage\",\n+                        \"typeDescription\": \"Writes the content of the incoming FlowFiles to the configured Azure Queue Storage.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"put-record-include-zero-record-results\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If no records are read from the incoming FlowFile, this property specifies whether or not an empty record set will be transmitted. The original FlowFile will still be routed to success, but if no transmission occurs, no provenance SEND event will be generated.\",\n-                                \"displayName\": \"Include Zero Record Results\",\n+                            \"Credentials Service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Storage Credentials.\",\n+                                \"displayName\": \"Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-record-include-zero-record-results\",\n+                                \"name\": \"Credentials Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Message Time To Live\": {\n+                                \"defaultValue\": \"7 days\",\n+                                \"description\": \"Maximum time to allow the message to be in the queue\",\n+                                \"displayName\": \"Message Time To Live\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Time To Live\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Queue Name\": {\n+                                \"description\": \"Name of the Azure Storage Queue\",\n+                                \"displayName\": \"Queue Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Queue Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Request Timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The timeout for read or write requests to Azure Queue Storage. Defaults to 1 second.\",\n+                                \"displayName\": \"Request Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-record-reader\",\n+                                \"name\": \"Request Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"put-record-sink\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the query result records to some destination.\",\n-                                \"displayName\": \"Record Destination Service\",\n+                            \"Visibility Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The length of time during which the message will be invisible after it is read. If the processing unit fails to delete the message after it is read, then the message will reappear in the queue.\",\n+                                \"displayName\": \"Visibility Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-record-sink\",\n+                                \"name\": \"Visibility Timeout\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n+                            },\n+                            \"storage-endpoint-suffix\": {\n+                                \"defaultValue\": \"queue.core.windows.net\",\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n+                                \"displayName\": \"Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original FlowFile is routed to this relationship if the records could not be transmitted but attempting the operation again may succeed\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile will be routed to this relationship if the records were transmitted successfully\",\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the records could not be transmitted and retrying the operation will also fail\",\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"put\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"enqueue\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutRecord\",\n-                        \"typeDescription\": \"The PutRecord processor uses a specified RecordReader to input (possibly multiple) records from an incoming flow file, and sends them to a destination specified by a Record Destination Service (i.e. record sink).\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage_v12\",\n+                        \"typeDescription\": \"Writes the content of the incoming FlowFiles to the configured Azure Queue Storage.\",\n                         \"version\": \"1.27.0\"\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n+                            \"Application ID\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The Application ID to be included in the metrics sent to Azure Log Analytics WS\",\n+                                \"displayName\": \"Application ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Application ID\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n                             \"Batch Size\": {\n-                                \"defaultValue\": \"500\",\n-                                \"description\": \"The maximum number of FlowFiles to send in a single connection\",\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many records to send in a single batch, at most.\",\n                                 \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ciphers Allowed\": {\n-                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n-                                \"displayName\": \"Ciphers Allowed\",\n+                            \"Instance ID\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Azure Log Analytics WS\",\n+                                \"displayName\": \"Instance ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Ciphers Allowed\",\n-                                \"required\": false,\n+                                \"name\": \"Instance ID\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Conflict Resolution\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REPLACE\",\n-                                        \"value\": \"REPLACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IGNORE\",\n-                                        \"value\": \"IGNORE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RENAME\",\n-                                        \"value\": \"RENAME\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REJECT\",\n-                                        \"value\": \"REJECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FAIL\",\n-                                        \"value\": \"FAIL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Determines how to handle the problem of filename collisions\",\n-                                \"displayName\": \"Conflict Resolution\",\n+                            \"Instance URL\": {\n+                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n+                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n+                                \"displayName\": \"Instance URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Instance URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"Job Name\": {\n+                                \"defaultValue\": \"nifi_reporting_job\",\n+                                \"description\": \"The name of the exporting job\",\n+                                \"displayName\": \"Job Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Job Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Directory\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n-                                \"displayName\": \"Create Directory\",\n+                            \"Log Analytics Custom Log Name\": {\n+                                \"defaultValue\": \"nifiprovenance\",\n+                                \"description\": \"Log Analytics Custom Log Name\",\n+                                \"displayName\": \"Log Analytics Custom Log Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Directory\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Log Analytics Custom Log Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"Log Analytics URL Endpoint Format\": {\n+                                \"defaultValue\": \"https://{0}.ods.opinsights.azure.com/api/logs?api-version=2016-04-01\",\n+                                \"description\": \"Log Analytics URL Endpoint Format\",\n+                                \"displayName\": \"Log Analytics URL Endpoint Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Log Analytics URL Endpoint Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Disable Directory Listing\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to 'true', directory listing is not performed prior to create missing directories. By default, this processor executes a directory listing command to see target directory existence before creating missing directories. However, there are situations that you might need to disable the directory listing such as the following. Directory listing might fail with some permission setups (e.g. chmod 100) on a directory. Also, if any other SFTP client created the directory after this processor performed a listing and before a directory creation request by this processor is finished, then an error is returned because the directory already exists.\",\n-                                \"displayName\": \"Disable Directory Listing\",\n+                            \"Log Analytics Workspace Id\": {\n+                                \"description\": \"Log Analytics Workspace Id\",\n+                                \"displayName\": \"Log Analytics Workspace Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Disable Directory Listing\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Log Analytics Workspace Id\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Log Analytics Workspace Key\": {\n+                                \"description\": \"Azure Log Analytic Worskspace Key\",\n+                                \"displayName\": \"Log Analytics Workspace Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Log Analytics Workspace Key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Platform\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The value to use for the platform field in each event.\",\n+                                \"displayName\": \"Platform\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Platform\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Dot Rename\": {\n+                            \"include-null-values\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then the filename of the sent file is prepended with a \\\".\\\" and then renamed back to the original once the file is completely sent. Otherwise, there is no rename. This property is ignored if the Temporary Filename property is set.\",\n-                                \"displayName\": \"Dot Rename\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicate if null values should be included in records. Default will be false\",\n+                                \"displayName\": \"Include Null Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dot Rename\",\n-                                \"required\": false,\n+                                \"name\": \"include-null-values\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Host Key File\": {\n-                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n-                                \"displayName\": \"Host Key File\",\n+                            \"s2s-prov-task-event-filter\": {\n+                                \"description\": \"Comma-separated list of event types that will be used to filter the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Event Type to Include\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Host Key File\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"s2s-prov-task-event-filter\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n+                            \"s2s-prov-task-event-filter-exclude\": {\n+                                \"description\": \"Comma-separated list of event types that will be used to exclude the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If an event type is included in Event Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Event Type to Exclude\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"s2s-prov-task-event-filter-exclude\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n+                            \"s2s-prov-task-id-filter\": {\n+                                \"description\": \"Comma-separated list of component UUID that will be used to filter the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Component ID to Include\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n+                                \"name\": \"s2s-prov-task-id-filter\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n+                            \"s2s-prov-task-id-filter-exclude\": {\n+                                \"description\": \"Comma-separated list of component UUID that will be used to exclude the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component UUID is included in Component ID to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Component ID to Exclude\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n+                                \"name\": \"s2s-prov-task-id-filter-exclude\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Key Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n-                                \"displayName\": \"Key Algorithms Allowed\",\n+                            \"s2s-prov-task-name-filter\": {\n+                                \"description\": \"Regular expression to filter the provenance events based on the component name. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Component Name to Include\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Algorithms Allowed\",\n+                                \"name\": \"s2s-prov-task-name-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Key Exchange Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n-                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n+                            \"s2s-prov-task-name-filter-exclude\": {\n+                                \"description\": \"Regular expression to exclude the provenance events based on the component name. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component name is included in Component Name to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Component Name to Exclude\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Exchange Algorithms Allowed\",\n+                                \"name\": \"s2s-prov-task-name-filter-exclude\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Modified Time\": {\n-                                \"description\": \"The lastModifiedTime to assign to the file after transferring it. If not set, the lastModifiedTime will not be changed. Format must be yyyy-MM-dd'T'HH:mm:ssZ. You may also use expression language such as ${file.lastModifiedTime}. If the value is invalid, the processor will not be invalid but will fail to change lastModifiedTime of the file.\",\n-                                \"displayName\": \"Last Modified Time\",\n+                            \"s2s-prov-task-type-filter\": {\n+                                \"description\": \"Regular expression to filter the provenance events based on the component type. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Component Type to Include\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Last Modified Time\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"s2s-prov-task-type-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Authentication Codes Allowed\": {\n-                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n-                                \"displayName\": \"Message Authentication Codes Allowed\",\n+                            \"s2s-prov-task-type-filter-exclude\": {\n+                                \"description\": \"Regular expression to exclude the provenance events based on the component type. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component type is included in Component Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Component Type to Exclude\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"name\": \"s2s-prov-task-type-filter-exclude\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n+                            \"start-position\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Start reading provenance Events from the beginning of the stream (the oldest event first)\",\n+                                        \"displayName\": \"Beginning of Stream\",\n+                                        \"value\": \"beginning-of-stream\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Start reading provenance Events from the end of the stream, ignoring old events\",\n+                                        \"displayName\": \"End of Stream\",\n+                                        \"value\": \"end-of-stream\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"beginning-of-stream\",\n+                                \"description\": \"If the Reporting Task has never been run, or if its state has been reset by a user, specifies where in the stream of Provenance Events the Reporting Task should start\",\n+                                \"displayName\": \"Start Position\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Permissions\": {\n-                                \"description\": \"The permissions to assign to the file after transferring it. Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644). If not set, the permissions will not be changed. You may also use expression language such as ${file.permissions}. If the value is invalid, the processor will not be invalid but will fail to change permissions of the file.\",\n-                                \"displayName\": \"Permissions\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"start-position\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"log analytics\",\n+                            \"provenace\",\n+                            \"reporting\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.reporting.azure.loganalytics.AzureLogAnalyticsProvenanceReportingTask\",\n+                        \"typeDescription\": \"Publishes Provenance events to to a Azure Log Analytics workspace.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Application ID\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The Application ID to be included in the metrics sent to Azure Log Analytics WS\",\n+                                \"displayName\": \"Application ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Permissions\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Application ID\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"22\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\n+                            \"Instance ID\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Azure Log Analytics WS\",\n+                                \"displayName\": \"Instance ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Instance ID\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Private Key Passphrase\": {\n-                                \"description\": \"Password for the private key\",\n-                                \"displayName\": \"Private Key Passphrase\",\n+                            \"Job Name\": {\n+                                \"defaultValue\": \"nifi_reporting_job\",\n+                                \"description\": \"The name of the exporting job\",\n+                                \"displayName\": \"Job Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Passphrase\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Job Name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Private Key Path\": {\n-                                \"description\": \"The fully qualified path to the Private Key file\",\n-                                \"displayName\": \"Private Key Path\",\n+                            \"Log Analytics Custom Log Name\": {\n+                                \"defaultValue\": \"nifimetrics\",\n+                                \"description\": \"Log Analytics Custom Log Name\",\n+                                \"displayName\": \"Log Analytics Custom Log Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Path\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Log Analytics Custom Log Name\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n+                            \"Log Analytics URL Endpoint Format\": {\n+                                \"defaultValue\": \"https://{0}.ods.opinsights.azure.com/api/logs?api-version=2016-04-01\",\n+                                \"description\": \"Log Analytics URL Endpoint Format\",\n+                                \"displayName\": \"Log Analytics URL Endpoint Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n+                                \"name\": \"Log Analytics URL Endpoint Format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n+                            \"Log Analytics Workspace Id\": {\n+                                \"description\": \"Log Analytics Workspace Id\",\n+                                \"displayName\": \"Log Analytics Workspace Id\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n+                                \"name\": \"Log Analytics Workspace Id\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Log Analytics Workspace Key\": {\n+                                \"description\": \"Azure Log Analytic Worskspace Key\",\n+                                \"displayName\": \"Log Analytics Workspace Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Log Analytics Workspace Key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Process group ID(s)\": {\n+                                \"description\": \"If specified, the reporting task will send metrics the configured ProcessGroup(s) only. Multiple IDs should be separated by a comma. If none of the group-IDs could be found or no IDs are defined, the Root Process Group is used and global metrics are sent.\",\n+                                \"displayName\": \"Process group ID(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Process group ID(s)\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"Send JVM Metrics\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Send JVM Metrics in addition to the NiFi-metrics\",\n+                                \"displayName\": \"Send JVM Metrics\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n+                                \"name\": \"Send JVM Metrics\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"log analytics\",\n+                            \"metrics\",\n+                            \"reporting\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.reporting.azure.loganalytics.AzureLogAnalyticsReportingTask\",\n+                        \"typeDescription\": \"Sends JVM-metrics as well as Apache NiFi-metrics to a Azure Log Analytics workspace.Apache NiFi-metrics can be either configured global or on process-group level.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hadoop-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hadoop-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional Classpath Resources\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Reject Zero-Byte Files\": {\n+                            \"Compression codec\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"No compression\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Default ZLIB compression\",\n+                                        \"displayName\": \"DEFAULT\",\n+                                        \"value\": \"DEFAULT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BZIP compression\",\n+                                        \"displayName\": \"BZIP\",\n+                                        \"value\": \"BZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"GZIP compression\",\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZ4 compression\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy compression\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n+                                        \"displayName\": \"AUTOMATIC\",\n+                                        \"value\": \"AUTOMATIC\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines whether or not Zero-byte files should be rejected without attempting to transfer\",\n-                                \"displayName\": \"Reject Zero-Byte Files\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Compression codec\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reject Zero-Byte Files\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Group\": {\n-                                \"description\": \"Integer value representing the Group ID to set on the file after transferring it. If not set, the group will not be set. You may also use expression language such as ${file.group}. If the value is invalid, the processor will not be invalid but will fail to change the group of the file.\",\n-                                \"displayName\": \"Remote Group\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Group\",\n-                                \"required\": false,\n+                                \"name\": \"Compression codec\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Owner\": {\n-                                \"description\": \"Integer value representing the User ID to set on the file after transferring it. If not set, the owner will not be set. You may also use expression language such as ${file.owner}. If the value is invalid, the processor will not be invalid but will fail to change the owner of the file.\",\n-                                \"displayName\": \"Remote Owner\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Owner\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Path\": {\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Path\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Send Keep Alive On Timeout\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n-                                \"displayName\": \"Send Keep Alive On Timeout\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Keep Alive On Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Strict Host Key Checking\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Strict Host Key Checking\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Temporary Filename\": {\n-                                \"description\": \"If set, the filename of the sent file will be equal to the value specified during the transfer and after successful completion will be renamed to the original filename. If this value is set, the Dot Rename property is ignored.\",\n-                                \"displayName\": \"Temporary Filename\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Temporary Filename\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Compression\": {\n+                            \"compression type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"RECORD\",\n+                                        \"value\": \"RECORD\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLOCK\",\n+                                        \"value\": \"BLOCK\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                                \"description\": \"Type of compression to use when creating Sequence File\",\n+                                \"displayName\": \"Compression type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n-                                \"required\": true,\n+                                \"name\": \"compression type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetSFTP\"\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\n+                                \"description\": \"Generated Sequence Files are sent to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that were rejected by the destination system\",\n-                                \"name\": \"reject\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n+                                \"description\": \"Incoming files that failed to generate a Sequence File are sent to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"copy\",\n-                            \"egress\",\n-                            \"files\",\n-                            \"put\",\n-                            \"remote\",\n-                            \"sftp\"\n+                            \"create\",\n+                            \"hadoop\",\n+                            \"sequence file\",\n+                            \"sequencefile\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutSFTP\",\n-                        \"typeDescription\": \"Sends FlowFiles to an SFTP Server\",\n+                        \"type\": \"org.apache.nifi.processors.hadoop.CreateHadoopSequenceFile\",\n+                        \"typeDescription\": \"Creates Hadoop Sequence Files from incoming flow files\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -118488,236 +118910,231 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"write distributed filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The preferred number of FlowFiles to put to the database in a single transaction\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"JDBC Connection Pool\": {\n-                                \"description\": \"Specifies the JDBC Connection Pool to use in order to convert the JSON message to a SQL statement. The Connection Pool is necessary in order to determine the appropriate database column types.\",\n-                                \"displayName\": \"JDBC Connection Pool\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JDBC Connection Pool\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"Obtain Generated Keys\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, any key that is automatically generated by the database will be added to the FlowFile that generated it using the sql.generate.key attribute. This may result in slightly slower performance and is not supported by all databases.\",\n-                                \"displayName\": \"Obtain Generated Keys\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Obtain Generated Keys\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Support Fragmented Transactions\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, when a FlowFile is consumed by this Processor, the Processor will first check the fragment.identifier and fragment.count attributes of that FlowFile. If the fragment.count value is greater than 1, the Processor will not process any FlowFile with that fragment.identifier until all are available; at that point, it will process all FlowFiles with that fragment.identifier as a single transaction, in the order specified by the FlowFiles' fragment.index attributes. This Provides atomicity of those SQL statements. Once any statement of this transaction throws exception when executing, this transaction will be rolled back. When transaction rollback happened, none of these FlowFiles would be routed to 'success'. If the <Rollback On Failure> is set true, these FlowFiles will stay in the input relationship. When the <Rollback On Failure> is set false,, if any of these FlowFiles will be routed to 'retry', all of these FlowFiles will be routed to 'retry'.Otherwise, they will be routed to 'failure'. If this value is false, these attributes will be ignored and the updates will occur independent of one another.\",\n-                                \"displayName\": \"Support Fragmented Transactions\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Support Fragmented Transactions\",\n+                                \"name\": \"Kerberos Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Transaction Timeout\": {\n-                                \"description\": \"If the <Support Fragmented Transactions> property is set to true, specifies how long to wait for all FlowFiles for a particular fragment.identifier attribute to arrive before just transferring all of the FlowFiles with that identifier to the 'failure' relationship\",\n-                                \"displayName\": \"Transaction Timeout\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transaction Timeout\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"database-session-autocommit\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"The autocommit mode to set on the database connection being used. If set to false, the operation(s) will be explicitly committed or rolled back (based on success or failure respectively), if set to true the driver/database handles the commit/rollback.\",\n-                                \"displayName\": \"Database Session AutoCommit\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"database-session-autocommit\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"putsql-sql-statement\": {\n-                                \"description\": \"The SQL statement to execute. The statement can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming FlowFiles. If this property is empty, the content of the incoming FlowFile is expected to contain a valid SQL statement, to be issued by the processor to the database.\",\n-                                \"displayName\": \"SQL Statement\",\n+                            \"file_or_directory\": {\n+                                \"description\": \"The HDFS file or directory to delete. A wildcard expression may be used to only delete certain files\",\n+                                \"displayName\": \"Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"putsql-sql-statement\",\n-                                \"required\": false,\n+                                \"name\": \"file_or_directory\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rollback-on-failure\": {\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"recursive\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specify how to handle error. By default (false), if an error occurs while processing a FlowFile, the FlowFile will be routed to 'failure' or 'retry' relationship based on error type, and processor can continue with next FlowFile. Instead, you may want to rollback currently processed FlowFiles and stop further processing immediately. In that case, you can do so by enabling this 'Rollback On Failure' property.  If enabled, failed FlowFiles will stay in the input relationship without penalizing it and being processed repeatedly until it gets processed successfully or removed by other means. It is important to set adequate 'Yield Duration' to avoid retrying too frequently.\",\n-                                \"displayName\": \"Rollback On Failure\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Remove contents of a non-empty directory recursively\",\n+                                \"displayName\": \"Recursive\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rollback-on-failure\",\n+                                \"name\": \"recursive\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine whether or not two FlowFiles belong to the same transaction.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine how many FlowFiles are needed to complete the transaction.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine the order that the FlowFiles in a transaction should be evaluated.\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter.\",\n-                                \"name\": \"sql.args.N.type\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"name\": \"sql.args.N.value\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"name\": \"sql.args.N.format\"\n-                            }\n-                        ],\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ConvertJSONToSQL\"\n+                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship after the database is successfully updated\",\n+                                \"description\": \"When an incoming flowfile is used then if there are no errors invoking delete the flowfile will route here.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated and retrying the operation will also fail, such as an invalid query or an integrity constraint violation\",\n+                                \"description\": \"When an incoming flowfile is used and there is a failure while deleting then the flowfile will route here.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"rdbms\",\n-                            \"relational\",\n-                            \"sql\",\n-                            \"update\"\n+                            \"HCFS\",\n+                            \"HDFS\",\n+                            \"delete\",\n+                            \"filesystem\",\n+                            \"hadoop\",\n+                            \"remove\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutSQL\",\n-                        \"typeDescription\": \"Executes a SQL UPDATE or INSERT command. The content of an incoming FlowFile is expected to be the SQL command to execute. The SQL command may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format.\",\n+                        \"type\": \"org.apache.nifi.processors.hadoop.DeleteHDFS\",\n+                        \"typeDescription\": \"Deletes one or more files or directories from HDFS. The path can be provided as an attribute from an incoming FlowFile, or a statically set path that is periodically removed. If this processor has an incoming connection, itwill ignore running on a periodic basis and instead rely on incoming FlowFiles to trigger a delete. Note that you may use a wildcard character to match multiple files or directories. If there are no incoming connections no flowfiles will be transfered to any output relationships.  If there is an incoming flowfile then provided there are no detected failures it will be transferred to success otherwise it will be sent to false. If knowledge of globbed files deleted is necessary use ListHDFS first to produce a specific list of files to delete. \",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"If the database generated a key for an INSERT statement and the Obtain Generated Keys property is set to true, this attribute will be added to indicate the generated key, if possible. This feature is not supported by all database vendors.\",\n-                                \"name\": \"sql.generated.key\"\n+                                \"description\": \"HDFS file to be deleted. If multiple files are deleted, then only the last filename is set.\",\n+                                \"name\": \"hdfs.filename\"\n+                            },\n+                            {\n+                                \"description\": \"HDFS Path specified in the delete request. If multiple paths are deleted, then only the last path is set.\",\n+                                \"name\": \"hdfs.path\"\n+                            },\n+                            {\n+                                \"description\": \"The hadoop url for the file to be deleted.\",\n+                                \"name\": \"hadoop.file.url\"\n+                            },\n+                            {\n+                                \"description\": \"HDFS error message related to the hdfs.error.code\",\n+                                \"name\": \"hdfs.error.message\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -118725,511 +119142,671 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"read distributed filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"25\",\n-                                \"description\": \"The number of incoming FlowFiles to process in a single execution of this processor.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Batch Size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Compression codec\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"No compression\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Default ZLIB compression\",\n+                                        \"displayName\": \"DEFAULT\",\n+                                        \"value\": \"DEFAULT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BZIP compression\",\n+                                        \"displayName\": \"BZIP\",\n+                                        \"value\": \"BZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"GZIP compression\",\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZ4 compression\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy compression\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n+                                        \"displayName\": \"AUTOMATIC\",\n+                                        \"value\": \"AUTOMATIC\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Compression codec\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Compression codec\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the Syslog messages. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"HDFS Filename\": {\n+                                \"defaultValue\": \"${path}/${filename}\",\n+                                \"description\": \"The name of the HDFS file to retrieve\",\n+                                \"displayName\": \"HDFS Filename\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"HDFS Filename\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The IP address or hostname of the Syslog server.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Idle Connection Expiration\": {\n-                                \"defaultValue\": \"5 seconds\",\n-                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection.\",\n-                                \"displayName\": \"Idle Connection Expiration\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Idle Connection Expiration\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Send Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Max Size of Socket Send Buffer\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Body\": {\n-                                \"description\": \"The body for the Syslog messages.\",\n-                                \"displayName\": \"Message Body\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message Body\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Hostname\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"The hostname for the Syslog messages.\",\n-                                \"displayName\": \"Message Hostname\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message Hostname\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            }\n+                        },\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles will be routed to this relationship once they have been updated with the content of the HDFS file\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles will be routed to this relationship if the content of the HDFS file cannot be retrieve due to a communications failure. This generally indicates that the Fetch should be tried again.\",\n+                                \"name\": \"comms.failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles will be routed to this relationship if the content of the HDFS file cannot be retrieved and trying again will likely not be helpful. This would occur, for instance, if the file is not found or if there is a permissions issue\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"fetch\",\n+                            \"get\",\n+                            \"hadoop\",\n+                            \"hcfs\",\n+                            \"hdfs\",\n+                            \"ingest\",\n+                            \"source\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n+                        \"typeDescription\": \"Retrieves a file from HDFS. The content of the incoming FlowFile is replaced by the content of the file in HDFS. The file in HDFS is left intact without any changes being made to it.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"When a FlowFile is routed to 'failure', this attribute is added indicating why the file could not be fetched from HDFS\",\n+                                \"name\": \"hdfs.failure.reason\"\n+                            },\n+                            {\n+                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n+                                \"name\": \"hadoop.file.url\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hadoop-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"read distributed filesystem\"\n+                            },\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"write distributed filesystem\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Message Priority\": {\n-                                \"description\": \"The priority for the Syslog messages, excluding < >.\",\n-                                \"displayName\": \"Message Priority\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of files to pull in each iteration, based on run schedule.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message Priority\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Timestamp\": {\n-                                \"defaultValue\": \"${now():format('MMM d HH:mm:ss')}\",\n-                                \"description\": \"The timestamp for the Syslog messages. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", \\\" or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\".\",\n-                                \"displayName\": \"Message Timestamp\",\n+                            \"Compression codec\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"No compression\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Default ZLIB compression\",\n+                                        \"displayName\": \"DEFAULT\",\n+                                        \"value\": \"DEFAULT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BZIP compression\",\n+                                        \"displayName\": \"BZIP\",\n+                                        \"value\": \"BZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"GZIP compression\",\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZ4 compression\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy compression\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n+                                        \"displayName\": \"AUTOMATIC\",\n+                                        \"value\": \"AUTOMATIC\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Compression codec\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message Timestamp\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Compression codec\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Version\": {\n-                                \"description\": \"The version for the Syslog messages.\",\n-                                \"displayName\": \"Message Version\",\n+                            \"Directory\": {\n+                                \"description\": \"The HDFS directory from which files should be read\",\n+                                \"displayName\": \"Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message Version\",\n-                                \"required\": false,\n+                                \"name\": \"Directory\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port for Syslog communication. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Port\",\n+                            \"File Filter Regex\": {\n+                                \"description\": \"A Java Regular Expression for filtering Filenames; if a filter is supplied then only files whose names match that Regular Expression will be fetched, otherwise all files will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Protocol\": {\n+                            \"Filter Match Name Only\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TCP\",\n-                                        \"value\": \"TCP\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UDP\",\n-                                        \"value\": \"UDP\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UDP\",\n-                                \"description\": \"The protocol for Syslog communication.\",\n-                                \"displayName\": \"Protocol\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true then File Filter Regex will match on just the filename, otherwise subdirectory names will be included with filename in the regex comparison\",\n+                                \"displayName\": \"Filter Match Name Only\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protocol\",\n+                                \"name\": \"Filter Match Name Only\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"TCP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, syslog messages will be sent over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout for connecting to and communicating with the syslog server. Does not apply to UDP. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Timeout\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Timeout\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are sent successfully to Syslog are sent out this relationship.\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"FlowFiles that failed to send to Syslog are sent out this relationship.\",\n-                                \"name\": \"failure\"\n+                            \"IO Buffer Size\": {\n+                                \"description\": \"Amount of memory to use to buffer file contents during IO. This overrides the Hadoop Configuration\",\n+                                \"displayName\": \"IO Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"IO Buffer Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"FlowFiles that do not form a valid Syslog message are sent out this relationship.\",\n-                                \"name\": \"invalid\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"logs\",\n-                            \"put\",\n-                            \"syslog\",\n-                            \"tcp\",\n-                            \"udp\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutSyslog\",\n-                        \"typeDescription\": \"Sends Syslog messages to a given host and port over TCP or UDP. Messages are constructed from the \\\"Message ___\\\" properties of the processor which can use expression language to generate messages from incoming FlowFiles. The properties are used to construct messages of the form: (<PRIORITY>)(VERSION )(TIMESTAMP) (HOSTNAME) (BODY) where version is optional.  The constructed messages are checked against regular expressions for RFC5424 and RFC3164 formatted messages. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\". If a message is constructed that does not form a valid Syslog message according to the above description, then it is routed to the invalid relationship. Valid messages are sent to the Syslog server and successes are routed to the success relationship, failures routed to the failure relationship.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"dependencies\": [\n+                            \"Ignore Dotted Files\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"FLOWFILE_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transmission Strategy\",\n-                                        \"propertyName\": \"Transmission Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the character set of the data being sent.\",\n-                                \"displayName\": \"Character Set\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ignore Dotted Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Per FlowFile\": {\n+                            \"Keep Source File\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to send each FlowFile's content on an individual connection.\",\n-                                \"displayName\": \"Connection Per FlowFile\",\n+                                \"description\": \"Determines whether to delete the file from HDFS after it has been successfully transferred. If true, the file will be fetched repeatedly. This is intended for testing only.\",\n+                                \"displayName\": \"Keep Source File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Per FlowFile\",\n+                                \"name\": \"Keep Source File\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Destination hostname or IP address\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Idle Connection Expiration\": {\n-                                \"defaultValue\": \"15 seconds\",\n-                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n-                                \"displayName\": \"Idle Connection Expiration\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Idle Connection Expiration\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Send Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Send Buffer\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Outgoing Message Delimiter\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"FLOWFILE_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transmission Strategy\",\n-                                        \"propertyName\": \"Transmission Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the delimiter to use when sending messages out over the same TCP stream. The delimiter is appended to each FlowFile message that is transmitted over the stream so that the receiver can determine when one message ends and the next message begins. Users should ensure that the FlowFile content does not contain the delimiter character to avoid errors. In order to use a new line character you can enter '\\\\n'. For a tab character use '\\\\t'. Finally for a carriage return use '\\\\r'.\",\n-                                \"displayName\": \"Outgoing Message Delimiter\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (based on last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Outgoing Message Delimiter\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"Destination port number\",\n-                                \"displayName\": \"Port\",\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (based on last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"RECORD_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transmission Strategy\",\n-                                        \"propertyName\": \"Transmission Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for reading Records from input FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Indicates how long to wait between performing directory listings\",\n+                                \"displayName\": \"Polling Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"Polling Interval\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Record Writer\": {\n-                                \"dependencies\": [\n+                            \"Recurse Subdirectories\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"RECORD_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transmission Strategy\",\n-                                        \"propertyName\": \"Transmission Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for writing Records to the configured socket address\",\n-                                \"displayName\": \"Record Writer\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether to pull files from subdirectories of the HDFS directory\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"Recurse Subdirectories\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies the SSL Context Service to enable TLS socket communication\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n-                                \"displayName\": \"Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Transmission Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Send FlowFile content as a single stream\",\n-                                        \"displayName\": \"FlowFile-oriented\",\n-                                        \"value\": \"FLOWFILE_ORIENTED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Read Records from input FlowFiles and send serialized Records as individual messages\",\n-                                        \"displayName\": \"Record-oriented\",\n-                                        \"value\": \"RECORD_ORIENTED\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FLOWFILE_ORIENTED\",\n-                                \"description\": \"Specifies the strategy used for reading input FlowFiles and transmitting messages to the destination socket address\",\n-                                \"displayName\": \"Transmission Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transmission Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenTCP\",\n-                            \"org.apache.nifi.processors.standard.PutUDP\"\n+                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n+                                \"description\": \"All files retrieved from HDFS are transferred to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"egress\",\n-                            \"put\",\n-                            \"remote\",\n-                            \"tcp\"\n+                            \"HCFS\",\n+                            \"HDFS\",\n+                            \"fetch\",\n+                            \"filesystem\",\n+                            \"get\",\n+                            \"hadoop\",\n+                            \"ingest\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutTCP\",\n-                        \"typeDescription\": \"Sends serialized FlowFiles or Records over TCP to a configurable destination with optional support for TLS\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.hadoop.GetHDFS\",\n+                        \"typeDescription\": \"Fetch files from Hadoop Distributed File System (HDFS) into FlowFiles. This Processor will delete the file from HDFS after fetching it.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Count of records transmitted to configured destination address\",\n-                                \"name\": \"record.count.transmitted\"\n+                                \"description\": \"The name of the file that was read from HDFS.\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The path is set to the relative path of the file's directory on HDFS. For example, if the Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"./\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"abc/1/2/3\\\".\",\n+                                \"name\": \"path\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -119238,4314 +119815,4280 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Destination hostname or IP address\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Idle Connection Expiration\": {\n-                                \"defaultValue\": \"15 seconds\",\n-                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n-                                \"displayName\": \"Idle Connection Expiration\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Idle Connection Expiration\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Send Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Send Buffer\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Port\": {\n-                                \"description\": \"Destination port number\",\n-                                \"displayName\": \"Port\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n-                                \"displayName\": \"Timeout\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Timeout\",\n+                                \"name\": \"Kerberos Relogin Period\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenUDP\",\n-                            \"org.apache.nifi.processors.standard.PutTCP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"egress\",\n-                            \"put\",\n-                            \"remote\",\n-                            \"udp\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutUDP\",\n-                        \"typeDescription\": \"The PutUDP processor receives a FlowFile and packages the FlowFile content into a single UDP datagram packet which is then transmitted to the configured UDP server. The user must ensure that the FlowFile content being fed to this processor is not larger than the maximum size for the underlying UDP transport. The maximum transport size will vary based on the platform setup but is generally just under 64KB. FlowFiles will be marked as failed if their content is larger than the maximum transport size.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Specifies an initial max value for max value column(s). Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified).\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"initial.maxvalue.<max_value_column>\",\n-                                \"value\": \"Initial maximum value for the specified column\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n-                        \"propertyDescriptors\": {\n-                            \"Columns to Return\": {\n-                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Columns to Return\",\n+                            \"gethdfsfileinfo-batch-size\": {\n+                                \"description\": \"Number of records to put into an output flowfile when 'Destination' is set to 'Content' and 'Group Results' is set to 'None'\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Columns to Return\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gethdfsfileinfo-batch-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"gethdfsfileinfo-destination\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Details of given HDFS object will be stored in attributes of flowfile. WARNING: In case when scan finds thousands or millions of objects, having huge values in attribute could impact flow file repo and GC/heap usage. Use content destination for such cases.\",\n+                                        \"displayName\": \"Attributes\",\n+                                        \"value\": \"gethdfsfileinfo-dest-attr\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Details of given HDFS object will be stored in a content in JSON format\",\n+                                        \"displayName\": \"Content\",\n+                                        \"value\": \"gethdfsfileinfo-dest-content\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"gethdfsfileinfo-dest-content\",\n+                                \"description\": \"Sets the destination for the resutls. When set to 'Content', attributes of flowfile won't be used for storing results. \",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Database Connection Pooling Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"Fetch Size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored. If using PostgreSQL, then 'Set Auto Commit' must be equal to 'false' to cause 'Fetch Size' to take effect.\",\n-                                \"displayName\": \"Fetch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Fetch Size\",\n+                                \"name\": \"gethdfsfileinfo-destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"gethdfsfileinfo-dir-filter\": {\n+                                \"description\": \"Regex. Only directories whose names match the given regular expression will be picked up. If not provided, any filter would be apply (performance considerations).\",\n+                                \"displayName\": \"Directory Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n-                                \"required\": true,\n+                                \"name\": \"gethdfsfileinfo-dir-filter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum-value Columns\": {\n-                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Maximum-value Columns\",\n+                            \"gethdfsfileinfo-file-exclude-filter\": {\n+                                \"description\": \"Regex. Files whose names match the given regular expression will not be picked up. If not provided, any filter won't be apply (performance considerations).\",\n+                                \"displayName\": \"Exclude Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Maximum-value Columns\",\n+                                \"name\": \"gethdfsfileinfo-file-exclude-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Set Auto Commit\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"description\": \"Allows enabling or disabling the auto commit functionality of the DB connection. Default value is 'No value set'. 'No value set' will leave the db connection's auto commit mode unchanged. For some JDBC drivers such as PostgreSQL driver, it is required to disable the auto commit functionality to get the 'Fetch Size' setting to take effect. When auto commit is enabled, PostgreSQL driver ignores 'Fetch Size' setting and loads all rows of the result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html.\",\n-                                \"displayName\": \"Set Auto Commit\",\n+                            \"gethdfsfileinfo-file-filter\": {\n+                                \"description\": \"Regex. Only files whose names match the given regular expression will be picked up. If not provided, any filter would be apply (performance considerations).\",\n+                                \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Set Auto Commit\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gethdfsfileinfo-file-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the database table to be queried. When a custom query is used, this property is used to alias the query and appears as an attribute on the FlowFile.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"gethdfsfileinfo-full-path\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"A directory to start listing from, or a file's full path.\",\n+                                \"displayName\": \"Full path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n+                                \"name\": \"gethdfsfileinfo-full-path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-db-type\": {\n+                            \"gethdfsfileinfo-group\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n+                                        \"description\": \"Group all results into a single flowfile.\",\n+                                        \"displayName\": \"All\",\n+                                        \"value\": \"gethdfsfileinfo-group-all\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n+                                        \"description\": \"Group HDFS objects by their parent directories only. Processor will generate flowfile for each directory (if recursive). If 'Recurse Subdirectories' property set to 'false', then will have the same effect as 'All'\",\n+                                        \"displayName\": \"Parent Directory\",\n+                                        \"value\": \"gethdfsfileinfo-group-parent-dir\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n+                                        \"description\": \"Don't group results. Generate flowfile per each HDFS object.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"gethdfsfileinfo-group-none\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n-                                \"displayName\": \"Database Type\",\n+                                \"defaultValue\": \"gethdfsfileinfo-group-all\",\n+                                \"description\": \"Groups HDFS objects\",\n+                                \"displayName\": \"Group Results\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-fetch-db-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-fetch-sql-query\": {\n-                                \"description\": \"A custom SQL query used to retrieve data. Instead of building a SQL query from other properties, this query will be wrapped as a sub-query. Query must have no ORDER BY statement.\",\n-                                \"displayName\": \"Custom Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"db-fetch-sql-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-fetch-where-clause\": {\n-                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n-                                \"displayName\": \"Additional WHERE clause\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"db-fetch-where-clause\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbf-default-precision\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"name\": \"gethdfsfileinfo-group\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-normalize\": {\n+                            \"gethdfsfileinfo-ignore-dotted-dirs\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to change non-Avro-compatible characters in column names to Avro-compatible characters. For example, colons and periods will be changed to underscores in order to build a valid Avro record.\",\n-                                \"displayName\": \"Normalize Table/Column Names\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, directories whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Directories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbf-normalize\",\n+                                \"name\": \"gethdfsfileinfo-ignore-dotted-dirs\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-user-logical-types\": {\n+                            \"gethdfsfileinfo-ignore-dotted-files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n-                                \"displayName\": \"Use Avro Logical Types\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbf-user-logical-types\",\n+                                \"name\": \"gethdfsfileinfo-ignore-dotted-files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"initial-load-strategy\": {\n+                            \"gethdfsfileinfo-recurse-subdirs\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Loads all existing rows from the database table.\",\n-                                        \"displayName\": \"Start at Beginning\",\n-                                        \"value\": \"Start at Beginning\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Loads only the newly inserted or updated rows based on the maximum value(s) of the column(s) configured in the 'Maximum-value Columns' property.\",\n-                                        \"displayName\": \"Start at Current Maximum Values\",\n-                                        \"value\": \"Start at Current Maximum Values\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Start at Beginning\",\n-                                \"description\": \"How to handle existing rows in the database table when the processor is started for the first time (or its state has been cleared). The property will be ignored, if any 'initial.maxvalue.*' dynamic property has also been configured.\",\n-                                \"displayName\": \"Initial Load Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether to list files from subdirectories of the HDFS directory\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"initial-load-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"qdbt-max-frags\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of fragments. If the value specified is zero, then all fragments are returned. This prevents OutOfMemoryError when this processor ingests huge table. NOTE: Setting this property can result in data loss, as the incoming results are not ordered, and fragments may end at arbitrary boundaries where rows are not included in the result set.\",\n-                                \"displayName\": \"Maximum Number of Fragments\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"qdbt-max-frags\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"qdbt-max-rows\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n-                                \"displayName\": \"Max Rows Per Flow File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"qdbt-max-rows\",\n+                                \"name\": \"gethdfsfileinfo-recurse-subdirs\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbt-output-batch-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n-                                \"displayName\": \"Output Batch Size\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"qdbt-output-batch-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"transaction-isolation-level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_NONE\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_READ_COMMITTED\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_READ_UNCOMMITTED\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_REPEATABLE_READ\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_SERIALIZABLE\",\n-                                        \"value\": \"8\"\n-                                    }\n-                                ],\n-                                \"description\": \"This setting will set the transaction isolation level for the database connection for drivers that support this setting\",\n-                                \"displayName\": \"Transaction Isolation Level\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"transaction-isolation-level\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n-                            \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n+                            \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n                         ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"description\": \"All successfully generated FlowFiles are transferred to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If no objects are found, original FlowFile are transferred to this relationship\",\n+                                \"name\": \"not found\"\n+                            },\n+                            {\n+                                \"description\": \"All failed attempts to access HDFS will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Original FlowFiles are transferred to this relationship\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"select\",\n-                            \"sql\"\n+                            \"HCFS\",\n+                            \"HDFS\",\n+                            \"filesystem\",\n+                            \"get\",\n+                            \"hadoop\",\n+                            \"ingest\",\n+                            \"list\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.QueryDatabaseTable\",\n-                        \"typeDescription\": \"Generates a SQL select query, or uses a provided statement, and executes it to fetch all rows whose values in the specified Maximum Value column(s) are larger than the previously-seen maxima. Query result will be converted to Avro format. Expression Language is supported for several properties, but no incoming connections are permitted. The Variable Registry may be used to provide values for any property containing Expression Language. If it is desired to leverage flow file attributes to perform these queries, the GenerateTableFetch and/or ExecuteSQL processors can be used for this purpose. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer or cron expression, using the standard scheduling methods. This processor is intended to be run on the Primary Node only. FlowFile attribute 'querydbtable.row.count' indicates how many rows were selected.\",\n+                        \"type\": \"org.apache.nifi.processors.hadoop.GetHDFSFileInfo\",\n+                        \"typeDescription\": \"Retrieves a listing of files and directories from HDFS. This processor creates a FlowFile(s) that represents the HDFS file/dir with relevant information. Main purpose of this processor to provide functionality similar to HDFS Client, i.e. count, du, ls, test, etc. Unlike ListHDFS, this processor is stateless, supports incoming connections and provides information on a dir level. \",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Name of the table being queried\",\n-                                \"name\": \"tablename\"\n+                                \"description\": \"The name of the file/dir found on HDFS.\",\n+                                \"name\": \"hdfs.objectName\"\n                             },\n                             {\n-                                \"description\": \"The number of rows selected by the query\",\n-                                \"name\": \"querydbtable.row.count\"\n+                                \"description\": \"The path is set to the absolute path of the object's parent directory on HDFS. For example, if an object is a directory 'foo', under directory '/bar' then 'hdfs.objectName' will have value 'foo', and 'hdfs.path' will be '/bar'\",\n+                                \"name\": \"hdfs.path\"\n                             },\n                             {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n+                                \"description\": \"The type of an object. Possible values: directory, file, link\",\n+                                \"name\": \"hdfs.type\"\n                             },\n                             {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"The user that owns the object in HDFS\",\n+                                \"name\": \"hdfs.owner\"\n                             },\n                             {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"The group that owns the object in HDFS\",\n+                                \"name\": \"hdfs.group\"\n                             },\n                             {\n-                                \"description\": \"Each attribute contains the observed maximum value of a specified 'Maximum-value Column'. The suffix of the attribute is the name of the column. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"maxvalue.*\"\n+                                \"description\": \"The timestamp of when the object in HDFS was last modified, as milliseconds since midnight Jan 1, 1970 UTC\",\n+                                \"name\": \"hdfs.lastModified\"\n+                            },\n+                            {\n+                                \"description\": \"In case of files: The number of bytes in the file in HDFS.  In case of dirs: Retuns storage space consumed by directory. \",\n+                                \"name\": \"hdfs.length\"\n+                            },\n+                            {\n+                                \"description\": \"In case of type='directory' will represent total count of files under this dir. Won't be populated to other types of HDFS objects. \",\n+                                \"name\": \"hdfs.count.files\"\n+                            },\n+                            {\n+                                \"description\": \"In case of type='directory' will represent total count of directories under this dir (including itself). Won't be populated to other types of HDFS objects. \",\n+                                \"name\": \"hdfs.count.dirs\"\n+                            },\n+                            {\n+                                \"description\": \"The number of HDFS replicas for the file\",\n+                                \"name\": \"hdfs.replication\"\n+                            },\n+                            {\n+                                \"description\": \"The permissions for the object in HDFS. This is formatted as 3 characters for the owner, 3 for the group, and 3 for other users. For example rw-rw-r--\",\n+                                \"name\": \"hdfs.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The status contains comma separated list of file/dir paths, which couldn't be listed/accessed. Status won't be set if no errors occured.\",\n+                                \"name\": \"hdfs.status\"\n+                            },\n+                            {\n+                                \"description\": \"When destination is 'attribute', will be populated with full tree of HDFS directory in JSON format.WARNING: In case when scan finds thousands or millions of objects, having huge values in attribute could impact flow file repo and GC/heap usage. Use content destination for such cases\",\n+                                \"name\": \"hdfs.full.tree\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Specifies an initial max value for max value column(s). Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified).\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"initial.maxvalue.<max_value_column>\",\n-                                \"value\": \"Initial maximum value for the specified column\"\n+                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"read distributed filesystem\"\n+                            },\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"write distributed filesystem\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Columns to Return\": {\n-                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Columns to Return\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Columns to Return\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional Classpath Resources\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of files to pull in each iteration, based on run schedule.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Database Connection Pooling Service\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Fetch Size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored. If using PostgreSQL, then 'Set Auto Commit' must be equal to 'false' to cause 'Fetch Size' to take effect.\",\n-                                \"displayName\": \"Fetch Size\",\n+                            \"Compression codec\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"No compression\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Default ZLIB compression\",\n+                                        \"displayName\": \"DEFAULT\",\n+                                        \"value\": \"DEFAULT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BZIP compression\",\n+                                        \"displayName\": \"BZIP\",\n+                                        \"value\": \"BZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"GZIP compression\",\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZ4 compression\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy compression\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n+                                        \"displayName\": \"AUTOMATIC\",\n+                                        \"value\": \"AUTOMATIC\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Compression codec\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Fetch Size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Compression codec\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"Directory\": {\n+                                \"description\": \"The HDFS directory from which files should be read\",\n+                                \"displayName\": \"Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n+                                \"name\": \"Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum-value Columns\": {\n-                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Maximum-value Columns\",\n+                            \"File Filter Regex\": {\n+                                \"description\": \"A Java Regular Expression for filtering Filenames; if a filter is supplied then only files whose names match that Regular Expression will be fetched, otherwise all files will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Maximum-value Columns\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Set Auto Commit\": {\n+                            \"Filter Match Name Only\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Allows enabling or disabling the auto commit functionality of the DB connection. Default value is 'No value set'. 'No value set' will leave the db connection's auto commit mode unchanged. For some JDBC drivers such as PostgreSQL driver, it is required to disable the auto commit functionality to get the 'Fetch Size' setting to take effect. When auto commit is enabled, PostgreSQL driver ignores 'Fetch Size' setting and loads all rows of the result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html.\",\n-                                \"displayName\": \"Set Auto Commit\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Set Auto Commit\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the database table to be queried. When a custom query is used, this property is used to alias the query and appears as an attribute on the FlowFile.\",\n-                                \"displayName\": \"Table Name\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true then File Filter Regex will match on just the filename, otherwise subdirectory names will be included with filename in the regex comparison\",\n+                                \"displayName\": \"Filter Match Name Only\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Filter Match Name Only\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-db-type\": {\n+                            \"FlowFile Content\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"VALUE ONLY\",\n+                                        \"value\": \"VALUE ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KEY VALUE PAIR\",\n+                                        \"value\": \"KEY VALUE PAIR\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n-                                \"displayName\": \"Database Type\",\n+                                \"defaultValue\": \"VALUE ONLY\",\n+                                \"description\": \"Indicate if the content is to be both the key and value of the Sequence File, or just the value.\",\n+                                \"displayName\": \"FlowFile Content\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-fetch-db-type\",\n+                                \"name\": \"FlowFile Content\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-sql-query\": {\n-                                \"description\": \"A custom SQL query used to retrieve data. Instead of building a SQL query from other properties, this query will be wrapped as a sub-query. Query must have no ORDER BY statement.\",\n-                                \"displayName\": \"Custom Query\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"db-fetch-sql-query\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-where-clause\": {\n-                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n-                                \"displayName\": \"Additional WHERE clause\",\n+                            \"IO Buffer Size\": {\n+                                \"description\": \"Amount of memory to use to buffer file contents during IO. This overrides the Hadoop Configuration\",\n+                                \"displayName\": \"IO Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"db-fetch-where-clause\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"IO Buffer Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbf-default-precision\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbf-default-scale\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbf-user-logical-types\": {\n+                            \"Ignore Dotted Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n-                                \"displayName\": \"Use Avro Logical Types\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbf-user-logical-types\",\n+                                \"name\": \"Ignore Dotted Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"initial-load-strategy\": {\n+                            \"Keep Source File\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Loads all existing rows from the database table.\",\n-                                        \"displayName\": \"Start at Beginning\",\n-                                        \"value\": \"Start at Beginning\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Loads only the newly inserted or updated rows based on the maximum value(s) of the column(s) configured in the 'Maximum-value Columns' property.\",\n-                                        \"displayName\": \"Start at Current Maximum Values\",\n-                                        \"value\": \"Start at Current Maximum Values\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Start at Beginning\",\n-                                \"description\": \"How to handle existing rows in the database table when the processor is started for the first time (or its state has been cleared). The property will be ignored, if any 'initial.maxvalue.*' dynamic property has also been configured.\",\n-                                \"displayName\": \"Initial Load Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Determines whether to delete the file from HDFS after it has been successfully transferred. If true, the file will be fetched repeatedly. This is intended for testing only.\",\n+                                \"displayName\": \"Keep Source File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"initial-load-strategy\",\n+                                \"name\": \"Keep Source File\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbt-max-frags\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of fragments. If the value specified is zero, then all fragments are returned. This prevents OutOfMemoryError when this processor ingests huge table. NOTE: Setting this property can result in data loss, as the incoming results are not ordered, and fragments may end at arbitrary boundaries where rows are not included in the result set.\",\n-                                \"displayName\": \"Maximum Number of Fragments\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"qdbt-max-frags\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"qdbt-max-rows\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n-                                \"displayName\": \"Max Rows Per Flow File\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"qdbt-max-rows\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbt-output-batch-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n-                                \"displayName\": \"Output Batch Size\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"qdbt-output-batch-size\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (based on last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (based on last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbtr-normalize\": {\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Indicates how long to wait between performing directory listings\",\n+                                \"displayName\": \"Polling Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Polling Interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Recurse Subdirectories\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to change characters in column names when creating the output schema. For example, colons and periods will be changed to underscores.\",\n-                                \"displayName\": \"Normalize Table/Column Names\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether to pull files from subdirectories of the HDFS directory\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"qdbtr-normalize\",\n+                                \"name\": \"Recurse Subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbtr-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer may use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"qdbtr-record-writer\",\n-                                \"required\": true,\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n-                            \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n                         ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"description\": \"All files retrieved from HDFS are transferred to this relationship\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"record\",\n-                            \"select\",\n-                            \"sql\"\n+                            \"HCFS\",\n+                            \"HDFS\",\n+                            \"fetch\",\n+                            \"get\",\n+                            \"hadoop\",\n+                            \"ingest\",\n+                            \"sequence file\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.QueryDatabaseTableRecord\",\n-                        \"typeDescription\": \"Generates a SQL select query, or uses a provided statement, and executes it to fetch all rows whose values in the specified Maximum Value column(s) are larger than the previously-seen maxima. Query result will be converted to the format specified by the record writer. Expression Language is supported for several properties, but no incoming connections are permitted. The Variable Registry may be used to provide values for any property containing Expression Language. If it is desired to leverage flow file attributes to perform these queries, the GenerateTableFetch and/or ExecuteSQL processors can be used for this purpose. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer or cron expression, using the standard scheduling methods. This processor is intended to be run on the Primary Node only. FlowFile attribute 'querydbtable.row.count' indicates how many rows were selected.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.hadoop.GetHDFSSequenceFile\",\n+                        \"typeDescription\": \"Fetch sequence files from Hadoop Distributed File System (HDFS) into FlowFiles\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Name of the table being queried\",\n-                                \"name\": \"tablename\"\n-                            },\n-                            {\n-                                \"description\": \"The number of rows selected by the query\",\n-                                \"name\": \"querydbtable.row.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"Each attribute contains the observed maximum value of a specified 'Maximum-value Column'. The suffix of the attribute is the name of the column. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"maxvalue.*\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The name of the file that was read from HDFS.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The number of records output by the Record Writer.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The path is set to the relative path of the file's directory on HDFS. For example, if the Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"./\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"abc/1/2/3\\\".\",\n+                                \"name\": \"path\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Each user-defined property specifies a SQL SELECT statement to run over the data, with the data that is selected being routed to the relationship whose name is the property name\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of the relationship to route data to\",\n-                                \"value\": \"A SQL SELECT statement that is used to determine what data should be routed to this relationship.\"\n-                            }\n-                        ],\n-                        \"dynamicRelationship\": {\n-                            \"description\": \"Each user-defined property defines a new Relationship for this Processor.\",\n-                            \"name\": \"<Property Name>\"\n-                        },\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"cache-schema\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"This property is no longer used. It remains solely for backward compatibility in order to avoid making existing Processors invalid upon upgrade. This property will be removed in future versions. Now, instead of forcing the user to understand the semantics of schema caching, the Processor caches up to 25 schemas and automatically rolls off the old schemas. This provides the same performance when caching was enabled previously and in some cases very significant performance improvements if caching was previously disabled.\",\n-                                \"displayName\": \"Cache Schema\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-schema\",\n-                                \"required\": true,\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n+                            \"Directory\": {\n+                                \"description\": \"The HDFS directory from which files should be read\",\n+                                \"displayName\": \"Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n+                                \"name\": \"Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n+                            \"File Filter\": {\n+                                \"defaultValue\": \"[^\\\\.].*\",\n+                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n+                                \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include-zero-record-flowfiles\": {\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Recurse Subdirectories\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"When running the SQL statement against an incoming FlowFile, if the result has no data, this property specifies whether or not a FlowFile will be sent to the corresponding relationship\",\n-                                \"displayName\": \"Include Zero Record FlowFiles\",\n+                                \"description\": \"Indicates whether to list files from subdirectories of the HDFS directory\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-zero-record-flowfiles\",\n+                                \"name\": \"Recurse Subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"file-filter-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Filtering will be applied to the names of directories and files.  If Recurse Subdirectories is set to true, only subdirectories with a matching name will be searched for files that match the regular expression defined in File Filter.\",\n+                                        \"displayName\": \"Directories and Files\",\n+                                        \"value\": \"filter-mode-directories-and-files\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Filtering will only be applied to the names of files.  If Recurse Subdirectories is set to true, the entire subdirectory tree will be searched for files that match the regular expression defined in File Filter.\",\n+                                        \"displayName\": \"Files Only\",\n+                                        \"value\": \"filter-mode-files-only\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Filtering will be applied by evaluating the regular expression defined in File Filter against the full path of files with and without the scheme and authority.  If Recurse Subdirectories is set to true, the entire subdirectory tree will be searched for files in which the full path of the file matches the regular expression defined in File Filter.  See 'Additional Details' for more information.\",\n+                                        \"displayName\": \"Full Path\",\n+                                        \"value\": \"filter-mode-full-path\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"filter-mode-directories-and-files\",\n+                                \"description\": \"Determines how the regular expression in  File Filter will be used when retrieving listings.\",\n+                                \"displayName\": \"File Filter Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"file-filter-mode\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the SQL statement contains columns not present in input data), the original FlowFile it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile is routed to this relationship\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"aggregate\",\n-                            \"avro\",\n-                            \"calcite\",\n-                            \"csv\",\n-                            \"etl\",\n-                            \"filter\",\n-                            \"json\",\n-                            \"logs\",\n-                            \"modify\",\n-                            \"query\",\n-                            \"record\",\n-                            \"route\",\n-                            \"select\",\n-                            \"sql\",\n-                            \"text\",\n-                            \"transform\",\n-                            \"update\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.QueryRecord\",\n-                        \"typeDescription\": \"Evaluates one or more SQL queries against the contents of a FlowFile. The result of the SQL query then becomes the content of the output FlowFile. This can be used, for example, for field-specific filtering, transformation, and row-level filtering. Columns can be renamed, simple calculations and aggregations performed, etc. The Processor is configured with a Record Reader Controller Service and a Record Writer service so as to allow flexibility in incoming and outgoing data formats. The Processor must be configured with at least one user-defined property. The name of the Property is the Relationship to route data to, and the value of the Property is a SQL SELECT statement that is used to specify how input data should be transformed/filtered. The SQL statement must be valid ANSI SQL and is powered by Apache Calcite. If the transformation fails, the original FlowFile is routed to the 'failure' relationship. Otherwise, the data selected will be routed to the associated relationship. If the Record Writer chooses to inherit the schema from the Record, it is important to note that the schema that is inherited will be from the ResultSet, rather than the input Record. This allows a single instance of the QueryRecord processor to have multiple queries, each of which returns a different set of columns and aggregations. As a result, though, the schema that is derived will have no schema name, so it is important that the configured Record Writer not attempt to write the Schema Name as an attribute if inheriting the Schema from the Record. See the Processor Usage documentation for more information.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n                             },\n-                            {\n-                                \"description\": \"The number of records selected by the query\",\n-                                \"name\": \"record.count\"\n+                            \"maximum-file-age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (based on last modification date) will be ignored. Minimum value is 100ms.\",\n+                                \"displayName\": \"Maximum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"maximum-file-age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The relation to which the FlowFile was routed\",\n-                                \"name\": \"QueryRecord.Route\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Allows users to specify fields to remove that match the RecordPath.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"(Ignored)\",\n-                                \"value\": \"A RecordPath to the field to be removed.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"minimum-file-age\": {\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (based on last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"minimum-file-age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n                             \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                            \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of HDFS files, the latest timestamp of all the files listed is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run, without having to store all of the actual filenames/paths which could lead to performance problems. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"description\": \"All FlowFiles are transferred to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"delete\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"record\",\n-                            \"remove\",\n-                            \"schema\",\n-                            \"text\",\n-                            \"update\"\n+                            \"HCFS\",\n+                            \"HDFS\",\n+                            \"filesystem\",\n+                            \"get\",\n+                            \"hadoop\",\n+                            \"ingest\",\n+                            \"list\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RemoveRecordField\",\n-                        \"typeDescription\": \"Modifies the contents of a FlowFile that contains Record-oriented data (i.e. data that can be read via a RecordReader and written by a RecordWriter) by removing selected fields. This Processor requires that at least one user-defined Property be added. The name of the property is ignored by the processor, but could be a meaningful identifier for the user. The value of the property should indicate a RecordPath that determines the field to be removed. The processor executes the removal in the order in which these properties are added to the processor. Set the \\\"Record Writer\\\" to \\\"Inherit Record Schema\\\" in order to use the updated Record Schema modified when removing Fields.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.hadoop.ListHDFS\",\n+                        \"typeDescription\": \"Retrieves a listing of files from HDFS. For each file that is listed in HDFS, this processor creates a FlowFile that represents the HDFS file to be fetched in conjunction with FetchHDFS. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. Unlike GetHDFS, this Processor does not delete any data from HDFS.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"The name of the file that was read from HDFS.\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The path is set to the absolute path of the file's directory on HDFS. For example, if the Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"./\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"/tmp/abc/1/2/3\\\".\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The user that owns the file in HDFS\",\n+                                \"name\": \"hdfs.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The group that owns the file in HDFS\",\n+                                \"name\": \"hdfs.group\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file in HDFS was last modified, as milliseconds since midnight Jan 1, 1970 UTC\",\n+                                \"name\": \"hdfs.lastModified\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes in the file in HDFS\",\n+                                \"name\": \"hdfs.length\"\n+                            },\n+                            {\n+                                \"description\": \"The number of HDFS replicas for hte file\",\n+                                \"name\": \"hdfs.replication\"\n+                            },\n+                            {\n+                                \"description\": \"The permissions for the file in HDFS. This is formatted as 3 characters for the owner, 3 for the group, and 3 for other users. For example rw-rw-r--\",\n+                                \"name\": \"hdfs.permissions\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"read distributed filesystem\"\n+                            },\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"write distributed filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the file is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Evaluation Mode\": {\n+                            \"Conflict Resolution Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Line-by-Line\",\n-                                        \"value\": \"Line-by-Line\"\n+                                        \"description\": \"Replaces the existing file if any.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Entire text\",\n-                                        \"value\": \"Entire text\"\n+                                        \"description\": \"Failed rename operation stops processing and routes to success.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Failing to rename a file routes to failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Line-by-Line\",\n-                                \"description\": \"Run the 'Replacement Strategy' against each line separately (Line-by-Line) or buffer the entire file into memory (Entire Text) and run against that.\",\n-                                \"displayName\": \"Evaluation Mode\",\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Evaluation Mode\",\n+                                \"name\": \"Conflict Resolution Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Line-by-Line Evaluation Mode\": {\n+                            \"File Filter Regex\": {\n+                                \"description\": \"A Java Regular Expression for filtering Filenames; if a filter is supplied then only files whose names match that Regular Expression will be fetched, otherwise all files will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"HDFS Operation\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"All\",\n-                                        \"value\": \"All\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"First-Line\",\n-                                        \"value\": \"First-Line\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Last-Line\",\n-                                        \"value\": \"Last-Line\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Except-First-Line\",\n-                                        \"value\": \"Except-First-Line\"\n+                                        \"displayName\": \"move\",\n+                                        \"value\": \"move\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Except-Last-Line\",\n-                                        \"value\": \"Except-Last-Line\"\n+                                        \"displayName\": \"copy\",\n+                                        \"value\": \"copy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"All\",\n-                                \"description\": \"Run the 'Replacement Strategy' against each line separately (Line-by-Line) for all lines in the FlowFile, First Line (Header) alone, Last Line (Footer) alone, Except the First Line (Header) or Except the Last Line (Footer).\",\n-                                \"displayName\": \"Line-by-Line Evaluation Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Line-by-Line Evaluation Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer (per file or per line, depending on the Evaluation Mode) in order to apply the replacement. If 'Entire Text' (in Evaluation Mode) is selected and the FlowFile is larger than this value, the FlowFile will be routed to 'failure'. In 'Line-by-Line' Mode, if a single line is larger than this value, the FlowFile will be routed to 'failure'. A default value of 1 MB is provided, primarily for 'Entire Text' mode. In 'Line-by-Line' Mode, a value such as 8 KB or 16 KB is suggested. This value is ignored if the <Replacement Strategy> property is set to one of: Append, Prepend, Always Replace\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n+                                \"defaultValue\": \"move\",\n+                                \"description\": \"The operation that will be performed on the source file\",\n+                                \"displayName\": \"HDFS Operation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Buffer Size\",\n+                                \"name\": \"HDFS Operation\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Regular Expression\": {\n-                                \"defaultValue\": \"(?s)(^.*$)\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Regex Replace\",\n-                                            \"Literal Replace\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Replacement Strategy\",\n-                                        \"propertyName\": \"Replacement Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Search Value to search for in the FlowFile content. Only used for 'Literal Replace' and 'Regex Replace' matching strategies\",\n-                                \"displayName\": \"Search Value\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Regular Expression\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Replacement Strategy\": {\n+                            \"Ignore Dotted Files\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Insert the Replacement Value at the beginning of the FlowFile or the beginning of each line (depending on the Evaluation Mode). For \\\"Line-by-Line\\\" Evaluation Mode, the value will be prepended to each line. Similarly, for \\\"First-Line\\\", \\\"Last-Line\\\", \\\"Except-Last-Line\\\" and \\\"Except-First-Line\\\" Evaluation Modes,the value will be prepended to header alone, footer alone, all lines except header and all lines except footer respectively. For \\\"Entire Text\\\" evaluation mode,the value will be prepended to the entire text.\",\n-                                        \"displayName\": \"Prepend\",\n-                                        \"value\": \"Prepend\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Insert the Replacement Value at the end of the FlowFile or the end of each line (depending on the Evaluation Mode). For \\\"Line-by-Line\\\" Evaluation Mode, the value will be appended to each line. Similarly, for \\\"First-Line\\\", \\\"Last-Line\\\", \\\"Except-Last-Line\\\" and \\\"Except-First-Line\\\" Evaluation Modes,the value will be appended to header alone, footer alone, all lines except header and all lines except footer respectively. For \\\"Entire Text\\\" evaluation mode,the value will be appended to the entire text.\",\n-                                        \"displayName\": \"Append\",\n-                                        \"value\": \"Append\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Prepends text before the start of the FlowFile (or the start of each line, depending on the configuration of the Evaluation Mode property) as well as appending text to the end of the FlowFile (or the end of each line, depending on the configuration of the Evaluation Mode property)\",\n-                                        \"displayName\": \"Surround\",\n-                                        \"value\": \"Surround\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Interpret the Search Value as a Regular Expression and replace all matches with the Replacement Value. The Replacement Value may reference Capturing Groups used in the Search Value by using a dollar-sign followed by the Capturing Group number, such as $1 or $2. If the Search Value is set to .* then everything is replaced without even evaluating the Regular Expression.\",\n-                                        \"displayName\": \"Regex Replace\",\n-                                        \"value\": \"Regex Replace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Search for all instances of the Search Value and replace the matches with the Replacement Value.\",\n-                                        \"displayName\": \"Literal Replace\",\n-                                        \"value\": \"Literal Replace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Always replaces the entire line or the entire contents of the FlowFile (depending on the value of the <Evaluation Mode> property) and does not bother searching for any value. When this strategy is chosen, the <Search Value> property is ignored.\",\n-                                        \"displayName\": \"Always Replace\",\n-                                        \"value\": \"Always Replace\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Substitute variable references (specified in ${var} form) using FlowFile attributes for looking up the replacement value by variable name. When this strategy is chosen, both the <Search Value> and <Replacement Value> properties are ignored.\",\n-                                        \"displayName\": \"Substitute Variables\",\n-                                        \"value\": \"Substitute Variables\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Regex Replace\",\n-                                \"description\": \"The strategy for how and what to replace within the FlowFile's text content.\",\n-                                \"displayName\": \"Replacement Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Replacement Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Replacement Value\": {\n-                                \"defaultValue\": \"$1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Prepend\",\n-                                            \"Regex Replace\",\n-                                            \"Always Replace\",\n-                                            \"Append\",\n-                                            \"Literal Replace\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Replacement Strategy\",\n-                                        \"propertyName\": \"Replacement Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The value to insert using the 'Replacement Strategy'. Using \\\"Regex Replace\\\" back-references to Regular Expression capturing groups are supported, but back-references that reference capturing groups that do not exist in the regular expression will be treated as literal value. Back References may also be referenced using the Expression Language, as '$1', '$2', etc. The single-tick marks MUST be included, as these variables are not \\\"Standard\\\" attribute names (attribute names must be quoted unless they contain only numbers, letters, and _).\",\n-                                \"displayName\": \"Replacement Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Replacement Value\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Text to Append\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Surround\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Replacement Strategy\",\n-                                        \"propertyName\": \"Replacement Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text to append to the end of the FlowFile, or each line, depending on teh configured value of the Evaluation Mode property\",\n-                                \"displayName\": \"Text to Append\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Text to Append\",\n+                                \"name\": \"Ignore Dotted Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Text to Prepend\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Surround\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Replacement Strategy\",\n-                                        \"propertyName\": \"Replacement Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text to prepend to the start of the FlowFile, or each line, depending on teh configured value of the Evaluation Mode property\",\n-                                \"displayName\": \"Text to Prepend\",\n+                            \"Input Directory or File\": {\n+                                \"defaultValue\": \"${path}\",\n+                                \"description\": \"The HDFS directory from which files should be read, or a single file to read.\",\n+                                \"displayName\": \"Input Directory or File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Text to Prepend\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that have been successfully processed are routed to this relationship. This includes both FlowFiles that had text replaced and those that did not.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that could not be updated are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"Change\",\n-                            \"Modify\",\n-                            \"Regex\",\n-                            \"Regular Expression\",\n-                            \"Replace\",\n-                            \"Text\",\n-                            \"Update\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ReplaceText\",\n-                        \"typeDescription\": \"Updates the content of a FlowFile by searching for some textual value in the FlowFile content (via Regular Expression/regex, or literal value) and replacing the section of the content that matches with some alternate value. It can also be used to append or prepend text to the contents of a FlowFile.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the file is encoded\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"Input Directory or File\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mapping File\": {\n-                                \"description\": \"The name of the file (including the full path) containing the Mappings.\",\n-                                \"displayName\": \"Mapping File\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mapping File\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Mapping File Refresh Interval\": {\n-                                \"defaultValue\": \"60s\",\n-                                \"description\": \"The polling interval to check for updates to the mapping file. The default is 60s.\",\n-                                \"displayName\": \"Mapping File Refresh Interval\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mapping File Refresh Interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Matching Group\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of the matching group of the provided regex to replace with the corresponding value from the mapping file (if it exists).\",\n-                                \"displayName\": \"Matching Group\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Matching Group\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the regular expressions. If a FlowFile is larger than this value, the FlowFile will be routed to 'failure'\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Buffer Size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Regular Expression\": {\n-                                \"defaultValue\": \"\\\\S+\",\n-                                \"description\": \"The Regular Expression to search for in the FlowFile content\",\n-                                \"displayName\": \"Regular Expression\",\n+                            \"Output Directory\": {\n+                                \"description\": \"The HDFS directory where the files will be moved to\",\n+                                \"displayName\": \"Output Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Regular Expression\",\n+                                \"name\": \"Output Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that have been successfully updated are routed to this relationship, as well as FlowFiles whose content does not match the given Regular Expression\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"FlowFiles that could not be updated are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Change\",\n-                            \"Mapping\",\n-                            \"Modify\",\n-                            \"Regex\",\n-                            \"Regular Expression\",\n-                            \"Replace\",\n-                            \"Text\",\n-                            \"Update\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ReplaceTextWithMapping\",\n-                        \"typeDescription\": \"Updates the content of a FlowFile by evaluating a Regular Expression against it and replacing the section of the content that matches the Regular Expression with some alternate value provided in a mapping file.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"One or more dynamic properties can be used to add attributes to FlowFiles passed to the 'retries_exceeded' relationship\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Exceeded FlowFile Attribute Key\",\n-                                \"value\": \"The value of the attribute added to the FlowFile\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Fail on Non-numerical Overwrite\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If the FlowFile already has the attribute defined in 'Retry Attribute' that is *not* a number, fail the FlowFile instead of resetting that value to '1'\",\n-                                \"displayName\": \"Fail on Non-numerical Overwrite\",\n+                            \"Remote Group\": {\n+                                \"description\": \"Changes the group of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change group\",\n+                                \"displayName\": \"Remote Group\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fail on Non-numerical Overwrite\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"maximum-retries\": {\n-                                \"defaultValue\": \"3\",\n-                                \"description\": \"The maximum number of times a FlowFile can be retried before being passed to the 'retries_exceeded' relationship\",\n-                                \"displayName\": \"Maximum Retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"maximum-retries\",\n-                                \"required\": true,\n+                                \"name\": \"Remote Group\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"penalize-retries\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If set to 'true', this Processor will penalize input FlowFiles before passing them to the 'retry' relationship. This does not apply to the 'retries_exceeded' relationship.\",\n-                                \"displayName\": \"Penalize Retries\",\n+                            \"Remote Owner\": {\n+                                \"description\": \"Changes the owner of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change owner\",\n+                                \"displayName\": \"Remote Owner\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"penalize-retries\",\n-                                \"required\": true,\n+                                \"name\": \"Remote Owner\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"retry-attribute\": {\n-                                \"defaultValue\": \"flowfile.retries\",\n-                                \"description\": \"The name of the attribute that contains the current retry count for the FlowFile. WARNING: If the name matches an attribute already on the FlowFile that does not contain a numerical value, the processor will either overwrite that attribute with '1' or fail based on configuration.\",\n-                                \"displayName\": \"Retry Attribute\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"retry-attribute\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"reuse-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, fail the FlowFile regardless of current retry count\",\n-                                        \"displayName\": \"Fail on Reuse\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, log a warning message before resetting the retry attribute and UUID for this instance\",\n-                                        \"displayName\": \"Warn on Reuse\",\n-                                        \"value\": \"warn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, log a debug message before resetting the retry attribute and UUID for this instance\",\n-                                        \"displayName\": \"Reset Reuse\",\n-                                        \"value\": \"reset\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Defines how the Processor behaves if the retry FlowFile has a different retry UUID than the instance that received the FlowFile. This generally means that the attribute was not reset after being successfully retried by a previous instance of this processor.\",\n-                                \"displayName\": \"Reuse Mode\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reuse-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"Will read the attribute or attribute expression language result as defined in 'Retry Attribute'\",\n-                                \"name\": \"Retry Attribute\"\n+                                \"description\": \"The name of the file written to HDFS comes from the value of this attribute.\",\n+                                \"name\": \"filename\"\n                             }\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Input FlowFile has exceeded the configured maximum retry count, do not pass this relationship back to the input Processor to terminate the limited feedback loop.\",\n-                                \"name\": \"retries_exceeded\"\n-                            },\n-                            {\n-                                \"description\": \"Input FlowFile has not exceeded the configured maximum retry count, pass this relationship back to the input Processor to create a limited feedback loop.\",\n-                                \"name\": \"retry\"\n+                                \"description\": \"Files that have been successfully renamed on HDFS are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The processor is configured such that a non-numerical value on 'Retry Attribute' results in a failure instead of resetting that value to '1'. This will immediately terminate the limited feedback loop. Might also include when 'Maximum Retries' contains attribute expression language that does not resolve to an Integer.\",\n+                                \"description\": \"Files that could not be renamed on HDFS are transferred to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"FlowFile\",\n-                            \"Retry\"\n+                            \"HCFS\",\n+                            \"HDFS\",\n+                            \"filesystem\",\n+                            \"hadoop\",\n+                            \"move\",\n+                            \"moveHDFS\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RetryFlowFile\",\n-                        \"typeDescription\": \"FlowFiles passed to this Processor have a 'Retry Attribute' value checked against a configured 'Maximum Retries' value. If the current attribute value is below the configured maximum, the FlowFile is passed to a retry relationship. The FlowFile may or may not be penalized in that condition. If the FlowFile's attribute value exceeds the configured maximum, the FlowFile will be passed to a 'retries_exceeded' relationship. WARNING: If the incoming FlowFile has a non-numeric value in the configured 'Retry Attribute' attribute, it will be reset to '1'. You may choose to fail the FlowFile instead of performing the reset. Additional dynamic properties can be defined for any attributes you wish to add to the FlowFiles transferred to 'retries_exceeded'. These attributes support attribute expression language.\",\n+                        \"type\": \"org.apache.nifi.processors.hadoop.MoveHDFS\",\n+                        \"typeDescription\": \"Rename existing files or a directory of files (non-recursive) on Hadoop Distributed File System (HDFS).\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"User defined retry attribute is updated with the current retry count\",\n-                                \"name\": \"Retry Attribute\"\n+                                \"description\": \"The name of the file written to HDFS is stored in this attribute.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"User defined retry attribute with .uuid that determines what processor retried the FlowFile last\",\n-                                \"name\": \"Retry Attribute .uuid\"\n+                                \"description\": \"The absolute path to the file on HDFS is stored in this attribute.\",\n+                                \"name\": \"absolute.hdfs.path\"\n+                            },\n+                            {\n+                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n+                                \"name\": \"hadoop.file.url\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Routes FlowFiles whose attributes match the Attribute Expression Language specified in the Dynamic Property Value to the Relationship specified in the Dynamic Property Key\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Relationship Name\",\n-                                \"value\": \"Attribute Expression Language\"\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"write distributed filesystem\"\n                             }\n                         ],\n-                        \"dynamicRelationship\": {\n-                            \"description\": \"FlowFiles that match the Dynamic Property's Attribute Expression Language\",\n-                            \"name\": \"Name from Dynamic Property\"\n-                        },\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Routing Strategy\": {\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Append Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A copy of the FlowFile will be routed to each relationship whose corresponding expression evaluates to 'true'\",\n-                                        \"displayName\": \"Route to Property name\",\n-                                        \"value\": \"Route to Property name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEFAULT\",\n+                                        \"value\": \"DEFAULT\"\n                                     },\n                                     {\n-                                        \"description\": \"Requires that all user-defined expressions evaluate to 'true' for the FlowFile to be considered a match\",\n-                                        \"displayName\": \"Route to 'matched' if all match\",\n-                                        \"value\": \"Route to 'match' if all match\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AVRO\",\n+                                        \"value\": \"AVRO\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DEFAULT\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Requires that at least one user-defined expression evaluate to 'true' for the FlowFile to be considered a match\",\n-                                        \"displayName\": \"Route to 'matched' if any matches\",\n-                                        \"value\": \"Route to 'match' if any matches\"\n+                                        \"dependentValues\": [\n+                                            \"append\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Conflict Resolution Strategy\",\n+                                        \"propertyName\": \"Conflict Resolution Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Route to Property name\",\n-                                \"description\": \"Specifies how to determine which relationship to use when evaluating the Expression Language\",\n-                                \"displayName\": \"Routing Strategy\",\n+                                \"description\": \"Defines the append strategy to use when the Conflict Resolution Strategy is set to 'append'.\",\n+                                \"displayName\": \"Append Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Routing Strategy\",\n+                                \"name\": \"Append Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that do not match any user-define expression will be routed here\",\n-                                \"name\": \"unmatched\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"Expression Language\",\n-                            \"Regular Expression\",\n-                            \"attributes\",\n-                            \"detect\",\n-                            \"filter\",\n-                            \"find\",\n-                            \"regex\",\n-                            \"regexp\",\n-                            \"routing\",\n-                            \"search\",\n-                            \"string\",\n-                            \"text\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RouteOnAttribute\",\n-                        \"typeDescription\": \"Routes FlowFiles based on their Attributes using the Attribute Expression Language\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The relation to which the FlowFile was routed\",\n-                                \"name\": \"RouteOnAttribute.Route\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Routes FlowFiles whose content matches the regular expression defined by Dynamic Property's value to the Relationship defined by the Dynamic Property's key\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Relationship Name\",\n-                                \"value\": \"A Regular Expression\"\n-                            }\n-                        ],\n-                        \"dynamicRelationship\": {\n-                            \"description\": \"FlowFiles that match the Dynamic Property's Regular Expression\",\n-                            \"name\": \"Name from Dynamic Property\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the file is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            },\n+                            \"Block Size\": {\n+                                \"description\": \"Size of each block as written to HDFS. This overrides the Hadoop Configuration\",\n+                                \"displayName\": \"Block Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n+                                \"name\": \"Block Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Content Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer in order to apply the regular expressions. If the size of the FlowFile exceeds this value, any amount of this value will be ignored\",\n-                                \"displayName\": \"Content Buffer Size\",\n+                            \"Compression codec\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"No compression\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Default ZLIB compression\",\n+                                        \"displayName\": \"DEFAULT\",\n+                                        \"value\": \"DEFAULT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BZIP compression\",\n+                                        \"displayName\": \"BZIP\",\n+                                        \"value\": \"BZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"GZIP compression\",\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZ4 compression\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy compression\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n+                                        \"displayName\": \"AUTOMATIC\",\n+                                        \"value\": \"AUTOMATIC\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Compression codec\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Content Buffer Size\",\n+                                \"name\": \"Compression codec\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Match Requirement\": {\n+                            \"Conflict Resolution Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"content must match exactly\",\n-                                        \"value\": \"content must match exactly\"\n+                                        \"description\": \"Replaces the existing file if any.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"content must contain match\",\n-                                        \"value\": \"content must contain match\"\n+                                        \"description\": \"Ignores the flow file and routes it to success.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Penalizes the flow file and routes it to failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Appends to the existing file if any, creates a new file otherwise.\",\n+                                        \"displayName\": \"append\",\n+                                        \"value\": \"append\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"content must match exactly\",\n-                                \"description\": \"Specifies whether the entire content of the file must match the regular expression exactly, or if any part of the file (up to Content Buffer Size) can contain the regular expression in order to be considered a match\",\n-                                \"displayName\": \"Match Requirement\",\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Match Requirement\",\n+                                \"name\": \"Conflict Resolution Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that do not match any of the user-supplied regular expressions will be routed to this relationship\",\n-                                \"name\": \"unmatched\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"content\",\n-                            \"detect\",\n-                            \"filter\",\n-                            \"find\",\n-                            \"regex\",\n-                            \"regexp\",\n-                            \"regular expression\",\n-                            \"route\",\n-                            \"search\",\n-                            \"string\",\n-                            \"text\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RouteOnContent\",\n-                        \"typeDescription\": \"Applies Regular Expressions to the content of a FlowFile and routes a copy of the FlowFile to each destination whose Regular Expression matches. Regular Expressions are added as User-Defined Properties where the name of the property is the name of the relationship and the value is a Regular Expression to match against the FlowFile content. User-Defined properties do support the Attribute Expression Language, but the results are interpreted as literal values, not Regular Expressions\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Routes data that matches the value specified in the Dynamic Property Value to the Relationship specified in the Dynamic Property Key.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Relationship Name\",\n-                                \"value\": \"value to match against\"\n-                            }\n-                        ],\n-                        \"dynamicRelationship\": {\n-                            \"description\": \"FlowFiles that match the Dynamic Property's value\",\n-                            \"name\": \"Name from Dynamic Property\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the incoming text is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            },\n+                            \"Directory\": {\n+                                \"description\": \"The parent HDFS directory to which files should be written. The directory will be created if it doesn't exist.\",\n+                                \"displayName\": \"Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Grouping Regular Expression\": {\n-                                \"description\": \"Specifies a Regular Expression to evaluate against each line to determine which Group the line should be placed in. The Regular Expression must have at least one Capturing Group that defines the line's Group. If multiple Capturing Groups exist in the Regular Expression, the values from all Capturing Groups will be concatenated together. Two lines will not be placed into the same FlowFile unless they both have the same value for the Group (or neither line matches the Regular Expression). For example, to group together all lines in a CSV File by the first column, we can set this value to \\\"(.*?),.*\\\". Two lines that have the same Group but different Relationships will never be placed into the same FlowFile.\",\n-                                \"displayName\": \"Grouping Regular Expression\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"IO Buffer Size\": {\n+                                \"description\": \"Amount of memory to use to buffer file contents during IO. This overrides the Hadoop Configuration\",\n+                                \"displayName\": \"IO Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grouping Regular Expression\",\n+                                \"name\": \"IO Buffer Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Case\": {\n+                            \"Ignore Locality\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, capitalization will not be taken into account when comparing values. E.g., matching against 'HELLO' or 'hello' will have the same result. This property is ignored if the 'Matching Strategy' is set to 'Satisfies Expression'.\",\n-                                \"displayName\": \"Ignore Case\",\n+                                \"description\": \"Directs the HDFS system to ignore locality rules so that data is distributed randomly throughout the cluster\",\n+                                \"displayName\": \"Ignore Locality\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Case\",\n-                                \"required\": true,\n+                                \"name\": \"Ignore Locality\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Leading/Trailing Whitespace\": {\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not the whitespace at the beginning and end of the lines should be ignored when evaluating the line.\",\n-                                \"displayName\": \"Ignore Leading/Trailing Whitespace\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Leading/Trailing Whitespace\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Matching Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Match lines based on whether or not the the text satisfies the given Expression Language expression. I.e., the line will match if the property value, evaluated as an Expression, returns true. The expression is able to reference FlowFile Attributes, as well as the variables 'line' (which is the text of the line to evaluate) and 'lineNo' (which is the line number being evaluated. This will be 1 for the first line, 2 for the second and so on).\",\n-                                        \"displayName\": \"Satisfies Expression\",\n-                                        \"value\": \"Satisfies Expression\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Match lines based on whether the line starts with the property value\",\n-                                        \"displayName\": \"Starts With\",\n-                                        \"value\": \"Starts With\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Match lines based on whether the line ends with the property value\",\n-                                        \"displayName\": \"Ends With\",\n-                                        \"value\": \"Ends With\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Match lines based on whether the line contains the property value\",\n-                                        \"displayName\": \"Contains\",\n-                                        \"value\": \"Contains\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Match lines based on whether the line equals the property value\",\n-                                        \"displayName\": \"Equals\",\n-                                        \"value\": \"Equals\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Match lines based on whether the line exactly matches the Regular Expression that is provided as the Property value\",\n-                                        \"displayName\": \"Matches Regular Expression\",\n-                                        \"value\": \"Matches Regular Expression\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Match lines based on whether the line contains some text that matches the Regular Expression that is provided as the Property value\",\n-                                        \"displayName\": \"Contains Regular Expression\",\n-                                        \"value\": \"Contains Regular Expression\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies how to evaluate each line of incoming text against the user-defined properties.\",\n-                                \"displayName\": \"Matching Strategy\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Permissions umask\": {\n+                                \"description\": \"A umask represented as an octal number which determines the permissions of files written to HDFS. This overrides the Hadoop property \\\"fs.permissions.umask-mode\\\".  If this property and \\\"fs.permissions.umask-mode\\\" are undefined, the Hadoop default \\\"022\\\" will be used.  If the PutHDFS target folder has a default ACL defined, the umask property is ignored by HDFS.\",\n+                                \"displayName\": \"Permissions umask\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Matching Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Permissions umask\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Routing Strategy\": {\n+                            \"Remote Group\": {\n+                                \"description\": \"Changes the group of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change group\",\n+                                \"displayName\": \"Remote Group\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote Group\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Owner\": {\n+                                \"description\": \"Changes the owner of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change owner\",\n+                                \"displayName\": \"Remote Owner\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote Owner\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Replication\": {\n+                                \"description\": \"Number of times that HDFS will replicate each file. This overrides the Hadoop Configuration\",\n+                                \"displayName\": \"Replication\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Replication\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"writing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Lines will be routed to each relationship whose corresponding expression evaluates to 'true'\",\n-                                        \"displayName\": \"Route to each matching Property Name\",\n-                                        \"value\": \"Route to each matching Property Name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Requires that all user-defined expressions evaluate to 'true' for the line to be considered a match\",\n-                                        \"displayName\": \"Route to 'matched' if line matches all conditions\",\n-                                        \"value\": \"Route to 'matched' if line matches all conditions\"\n+                                        \"description\": \"The processor writes FlowFile data into a temporary file and renames it after completion. This prevents other processes from reading partially written files.\",\n+                                        \"displayName\": \"Write and rename\",\n+                                        \"value\": \"writeAndRename\"\n                                     },\n                                     {\n-                                        \"description\": \"Requires that at least one user-defined expression evaluate to 'true' for the line to be considered a match\",\n-                                        \"displayName\": \"Route to 'matched' if lines matches any condition\",\n-                                        \"value\": \"Route to 'matched' if lines matches any condition\"\n+                                        \"description\": \"The processor writes FlowFile data directly to the destination file. In some cases this might cause reading partially written files.\",\n+                                        \"displayName\": \"Simple write\",\n+                                        \"value\": \"simpleWrite\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Route to each matching Property Name\",\n-                                \"description\": \"Specifies how to determine which Relationship(s) to use when evaluating the lines of incoming text against the 'Matching Strategy' and user-defined properties.\",\n-                                \"displayName\": \"Routing Strategy\",\n+                                \"defaultValue\": \"writeAndRename\",\n+                                \"description\": \"Defines the approach for writing the FlowFile data.\",\n+                                \"displayName\": \"Writing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Routing Strategy\",\n+                                \"name\": \"writing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The name of the file written to HDFS comes from the value of this attribute.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.hadoop.GetHDFS\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original input file will be routed to this destination when the lines have been successfully routed to 1 or more relationships\",\n-                                \"name\": \"original\"\n+                                \"description\": \"Files that have been successfully written to HDFS are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Data that does not satisfy the required user-defined rules will be routed to this Relationship\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"Files that could not be written to HDFS for some reason are transferred to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Expression Language\",\n-                            \"Regular Expression\",\n-                            \"attributes\",\n-                            \"csv\",\n-                            \"delimited\",\n-                            \"detect\",\n-                            \"filter\",\n-                            \"find\",\n-                            \"logs\",\n-                            \"regex\",\n-                            \"regexp\",\n-                            \"routing\",\n-                            \"search\",\n-                            \"string\",\n-                            \"text\"\n+                            \"HCFS\",\n+                            \"HDFS\",\n+                            \"copy\",\n+                            \"filesystem\",\n+                            \"hadoop\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RouteText\",\n-                        \"typeDescription\": \"Routes textual data based on a set of user-defined rules. Each line in an incoming FlowFile is compared against the values specified by user-defined Properties. The mechanism by which the text is compared to these user-defined properties is defined by the 'Matching Strategy'. The data is then routed according to these rules, routing each line of the text individually.\",\n+                        \"type\": \"org.apache.nifi.processors.hadoop.PutHDFS\",\n+                        \"typeDescription\": \"Write FlowFile data to Hadoop Distributed File System (HDFS)\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the relationship to which the FlowFile was routed.\",\n-                                \"name\": \"RouteText.Route\"\n+                                \"description\": \"The name of the file written to HDFS is stored in this attribute.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The value captured by all capturing groups in the 'Grouping Regular Expression' property. If this property is not set or contains no capturing groups, this attribute will not be added.\",\n-                                \"name\": \"RouteText.Group\"\n+                                \"description\": \"The absolute path to the file on HDFS is stored in this attribute.\",\n+                                \"name\": \"absolute.hdfs.path\"\n+                            },\n+                            {\n+                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n+                                \"name\": \"hadoop.file.url\"\n+                            },\n+                            {\n+                                \"description\": \"The result(true/false) indicates if the folder is created by the processor.\",\n+                                \"name\": \"target.dir.created\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Event Types to Filter On\": {\n+                                \"defaultValue\": \"append, close, create, metadata, rename, unlink\",\n+                                \"description\": \"A comma-separated list of event types to process. Valid event types are: append, close, create, metadata, rename, and unlink. Case does not matter.\",\n+                                \"displayName\": \"Event Types to Filter On\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"Event Types to Filter On\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"sample-record-interval\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"interval\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the number of records to skip before writing a record to the outgoing FlowFile. This property is only used if Sampling Strategy is set to Interval Sampling. A value of zero (0) will cause no records to be included in theoutgoing FlowFile, a value of one (1) will cause all records to be included, and a value of two (2) will cause half the records to be included, and so on.\",\n-                                \"displayName\": \"Sampling Interval\",\n+                            \"HDFS Path to Watch\": {\n+                                \"description\": \"The HDFS path to get event notifications for. This property accepts both expression language and regular expressions. This will be evaluated during the OnScheduled phase.\",\n+                                \"displayName\": \"HDFS Path to Watch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sample-record-interval\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"HDFS Path to Watch\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sample-record-probability\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"probabilistic\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the probability (as a percent from 0-100) of a record being included in the outgoing FlowFile. This property is only used if Sampling Strategy is set to Probabilistic Sampling. A value of zero (0) will cause no records to be included in theoutgoing FlowFile, and a value of 100 will cause all records to be included in the outgoing FlowFile..\",\n-                                \"displayName\": \"Sampling Probability\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sample-record-probability\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"IOException Retries During Event Polling\": {\n+                                \"defaultValue\": \"3\",\n+                                \"description\": \"According to the HDFS admin API for event polling it is good to retry at least a few times. This number defines how many times the poll will be retried if it throws an IOException.\",\n+                                \"displayName\": \"IOException Retries During Event Polling\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"IOException Retries During Event Polling\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sample-record-random-seed\": {\n-                                \"dependencies\": [\n+                            \"Ignore Hidden Files\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"probabilistic\",\n-                                            \"reservoir\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies a particular number to use as the seed for the random number generator (used by probabilistic strategies). Setting this property will ensure the same records are selected even when using probabilistic strategies.\",\n-                                \"displayName\": \"Random Seed\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true and the final component of the path associated with a given event starts with a '.' then that event will not be processed.\",\n+                                \"displayName\": \"Ignore Hidden Files\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sample-record-random-seed\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ignore Hidden Files\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"sample-record-range\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"range\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the range of records to include in the sample, from 1 to the total number of records. An example is '3,6-8,20-' which includes the third record, the sixth, seventh and eighth records, and all records from the twentieth record on. Commas separate intervals that don't overlap, and an interval can be between two numbers (i.e. 6-8) or up to a given number (i.e. -5), or from a number to the number of the last record (i.e. 20-). If this property is unset, all records will be included.\",\n-                                \"displayName\": \"Sampling Range\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sample-record-range\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sample-record-reservoir\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"reservoir\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the number of records to write to the outgoing FlowFile. This property is only used if Sampling Strategy is set to reservoir-based strategies such as Reservoir Sampling.\",\n-                                \"displayName\": \"Reservoir Size\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sample-record-reservoir\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sample-record-sampling-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Selects every Nth record where N is the value of the 'Interval Value' property\",\n-                                        \"displayName\": \"Interval Sampling\",\n-                                        \"value\": \"interval\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Creates a sample of records based on the index (i.e. record number) of the records using the specified range. An example is '3,6-8,20-' which includes the third record, the sixth, seventh and eighth record, and all records from the twentieth record on. Commas separate intervals that don't overlap, and an interval can be between two numbers (i.e. 6-8) or up to a given number (i.e. -5), or from a number to the number of the last record (i.e. 20-).\",\n-                                        \"displayName\": \"Range Sampling\",\n-                                        \"value\": \"range\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Selects each record with probability P where P is the value of the 'Selection Probability' property\",\n-                                        \"displayName\": \"Probabilistic Sampling\",\n-                                        \"value\": \"probabilistic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Creates a sample of K records where each record has equal probability of being included, where K is the value of the 'Reservoir Size' property. Note that if the value is very large it may cause memory issues as the reservoir is kept in-memory.\",\n-                                        \"displayName\": \"Reservoir Sampling\",\n-                                        \"value\": \"reservoir\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"reservoir\",\n-                                \"description\": \"Specifies which method to use for sampling records from the incoming FlowFile\",\n-                                \"displayName\": \"Sampling Strategy\",\n+                            \"Poll Duration\": {\n+                                \"defaultValue\": \"1 second\",\n+                                \"description\": \"The time before the polling method returns with the next batch of events if they exist. It may exceed this amount of time by up to the time required for an RPC to the NameNode.\",\n+                                \"displayName\": \"Poll Duration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sample-record-sampling-strategy\",\n+                                \"name\": \"Poll Duration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The last used transaction id is stored. This is used \",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The FlowFile is routed to this relationship if the sampling completed successfully\",\n+                                \"description\": \"A flow file with updated information about a specific event will be sent to this relationship.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, any record is not valid), the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile is routed to this relationship if sampling is successful\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"interval\",\n-                            \"range\",\n-                            \"record\",\n-                            \"reservoir\",\n-                            \"sample\"\n+                            \"events\",\n+                            \"filesystem\",\n+                            \"hadoop\",\n+                            \"inotify\",\n+                            \"notifications\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SampleRecord\",\n-                        \"typeDescription\": \"Samples the records of a FlowFile based on a specified sampling strategy (such as Reservoir Sampling). The resulting FlowFile may be of a fixed number of records (in the case of reservoir-based algorithms) or some subset of the total number of records (in the case of probabilistic sampling), or a deterministic number of records (in the case of interval sampling).\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.hadoop.inotify.GetHDFSEvents\",\n+                        \"typeDescription\": \"This processor polls the notification events provided by the HdfsAdmin API. Since this uses the HdfsAdmin APIs it is required to run as an HDFS super user. Currently there are six types of events (append, close, create, metadata, rename, and unlink). Please see org.apache.hadoop.hdfs.inotify.Event documentation for full explanations of each event. This processor will poll for new events based on a defined duration. For each event received a new flow file will be created with the expected attributes and the event itself serialized to JSON and written to the flow file's content. For example, if event.type is APPEND then the content of the flow file will contain a JSON file containing the information about the append event. If successful the flow files are sent to the 'success' relationship. Be careful of where the generated flow files are stored. If the flow files are stored in one of processor's watch directories there will be a never ending flow of events. It is also important to be aware that this processor must consume all events. The filtering must happen within the processor. This is because the HDFS admin's event notifications API does not have filtering.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The MIME type indicated by the record writer\",\n+                                \"description\": \"This is always application/json.\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The number of records in the resulting flow file\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"This will specify the specific HDFS notification event type. Currently there are six types of events (append, close, create, metadata, rename, and unlink).\",\n+                                \"name\": \"hdfs.inotify.event.type\"\n+                            },\n+                            {\n+                                \"description\": \"The specific path that the event is tied to.\",\n+                                \"name\": \"hdfs.inotify.event.path\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-dbcp-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"JDBC driver property name and value applied to JDBC connections.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"JDBC property name\",\n+                                \"value\": \"JDBC property value\"\n+                            },\n+                            {\n+                                \"description\": \"JDBC driver property name prefixed with 'SENSITIVE.' handled as a sensitive property.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"SENSITIVE.JDBC property name\",\n+                                \"value\": \"JDBC property value\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attribute Pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"Regular Expression that specifies the names of attributes whose values will be matched against the terms in the dictionary\",\n-                                \"displayName\": \"Attribute Pattern\",\n+                            \"Database Connection URL\": {\n+                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n+                                \"displayName\": \"Database Connection URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attribute Pattern\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Database Connection URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Dictionary File\": {\n-                                \"description\": \"A new-line-delimited text file that includes the terms that should trigger a match. Empty lines are ignored.  The contents of the text file are loaded into memory when the processor is scheduled and reloaded when the contents are modified.\",\n-                                \"displayName\": \"Dictionary File\",\n+                            \"Database Driver Class Name\": {\n+                                \"description\": \"Database driver class name\",\n+                                \"displayName\": \"Database Driver Class Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Dictionary File\",\n+                                \"name\": \"Database Driver Class Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Database User\": {\n+                                \"description\": \"Database user name\",\n+                                \"displayName\": \"Database User\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Database User\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Total Connections\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of active connections that can be allocated from this pool at the same time,  or negative for no limit.\",\n+                                \"displayName\": \"Max Total Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Max Total Connections\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"500 millis\",\n+                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or -1 to wait indefinitely. \",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password for the database user\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Validation-query\": {\n+                                \"description\": \"Validation query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. Note!! Using validation might have some performance penalty.\",\n+                                \"displayName\": \"Validation query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Validation-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"database-driver-locations\": {\n+                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n+                                \"displayName\": \"Database Driver Location(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"database-driver-locations\",\n+                                \"required\": false,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n+                                    \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Dictionary Filter Pattern\": {\n-                                \"description\": \"A Regular Expression that will be applied to each line in the dictionary file. If the regular expression does not match the line, the line will not be included in the list of terms to search for. If a Matching Group is specified, only the portion of the term that matches that Matching Group will be used instead of the entire term. If not specified, all terms in the dictionary will be used and each term will consist of the text of the entire line in the file\",\n-                                \"displayName\": \"Dictionary Filter Pattern\",\n+                            \"dbcp-max-conn-lifetime\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The maximum lifetime of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n+                                \"displayName\": \"Max Connection Lifetime\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-max-conn-lifetime\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-max-idle-conns\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of connections that can remain idle in the pool without extra ones being released. Set to any negative value to allow unlimited idle connections.\",\n+                                \"displayName\": \"Max Idle Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-max-idle-conns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-min-evictable-idle-time\": {\n+                                \"defaultValue\": \"30 mins\",\n+                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction.\",\n+                                \"displayName\": \"Minimum Evictable Idle Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-min-evictable-idle-time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-min-idle-conns\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The minimum number of connections that can remain idle in the pool without extra ones being created. Set to or zero to allow no idle connections.\",\n+                                \"displayName\": \"Minimum Idle Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-min-idle-conns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-soft-min-evictable-idle-time\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle connection evictor, with the extra condition that at least a minimum number of idle connections remain in the pool. When the not-soft version of this option is set to a positive value, it is examined first by the idle connection evictor: when idle connections are visited by the evictor, idle time is first compared against it (without considering the number of idle connections in the pool) and then against this soft option, including the minimum idle connections constraint.\",\n+                                \"displayName\": \"Soft Minimum Evictable Idle Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-soft-min-evictable-idle-time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-time-between-eviction-runs\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The time period to sleep between runs of the idle connection evictor thread. When non-positive, no idle connection evictor thread will be run.\",\n+                                \"displayName\": \"Time Between Eviction Runs\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-time-between-eviction-runs\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dictionary Filter Pattern\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"Match Criteria\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"At Least 1 Must Match\",\n-                                        \"value\": \"At Least 1 Must Match\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"All Must Match\",\n-                                        \"value\": \"All Must Match\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"At Least 1 Must Match\",\n-                                \"description\": \"If set to All Must Match, then FlowFiles will be routed to 'matched' only if all specified attributes' values are found in the dictionary. If set to At Least 1 Must Match, FlowFiles will be routed to 'matched' if any attribute specified is found in the dictionary\",\n-                                \"displayName\": \"Match Criteria\",\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Match Criteria\",\n-                                \"required\": true,\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kerberos-principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles whose attributes are not found in the dictionary will be routed to this relationship\",\n-                                \"name\": \"unmatched\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles whose attributes are found in the dictionary will be routed to this relationship\",\n-                                \"name\": \"matched\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"find\",\n-                            \"lookup\",\n-                            \"scan\",\n-                            \"search\",\n-                            \"text\"\n+                            \"connection\",\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"jdbc\",\n+                            \"pooling\",\n+                            \"store\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ScanAttribute\",\n-                        \"typeDescription\": \"Scans the specified attributes of FlowFiles, checking to see if any of their values are present within the specified dictionary of terms\",\n+                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPool\",\n+                        \"typeDescription\": \"Provides Database Connection Pooling Service. Connections can be asked from pool and returned after usage.\",\n                         \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Dictionary Encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"binary\",\n-                                        \"value\": \"binary\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"text\",\n-                                \"description\": \"Indicates how the dictionary is encoded. If 'text', dictionary terms are new-line delimited and UTF-8 encoded; if 'binary', dictionary terms are denoted by a 4-byte integer indicating the term length followed by the term itself\",\n-                                \"displayName\": \"Dictionary Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dictionary Encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Dictionary File\": {\n-                                \"description\": \"The filename of the terms dictionary\",\n-                                \"displayName\": \"Dictionary File\",\n-                                \"dynamic\": false,\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If 'database.name' attribute contains the name of the dynamic property, then the DBCPService (registered in the value) will be selected.\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dictionary File\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                                \"name\": \"The name to register DBCPService\",\n+                                \"value\": \"The DBCPService\"\n                             }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that do not match any term in the dictionary are routed to this relationship\",\n-                                \"name\": \"unmatched\"\n-                            },\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles that match at least one term in the dictionary are routed to this relationship\",\n-                                \"name\": \"matched\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"aho-corasick\",\n-                            \"byte sequence\",\n-                            \"content\",\n-                            \"dictionary\",\n-                            \"find\",\n-                            \"scan\",\n-                            \"search\"\n+                            \"connection\",\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"jdbc\",\n+                            \"pooling\",\n+                            \"store\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ScanContent\",\n-                        \"typeDescription\": \"Scans the content of FlowFiles for terms that are found in a user-supplied dictionary. If a term is matched, the UTF-8 encoded version of the term will be added to the FlowFile using the 'matching.term' attribute\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The term that caused the Processor to route the FlowFile to the 'matched' relationship; if FlowFile is routed to the 'unmatched' relationship, this attribute is not added\",\n-                                \"name\": \"matching.term\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPoolLookup\",\n+                        \"typeDescription\": \"Provides a DBCPService that can be used to dynamically select another DBCPService. This service requires an attribute named 'database.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'database.name' will be used to select the DBCPService that has been registered with that name. This will allow multiple DBCPServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'database.name' attribute.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Specifies a property name and value to be set on the JDBC connection(s). If Expression Language is used, evaluation will be performed upon the controller service being enabled. Note that no flow file input (attributes, e.g.) is available for use in Expression Language constructs for these properties.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"JDBC property name\",\n+                                \"value\": \"JDBC property value\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Segment Size\": {\n-                                \"description\": \"The maximum data size in bytes for each segment\",\n-                                \"displayName\": \"Segment Size\",\n+                            \"hikaricp-connection-url\": {\n+                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n+                                \"displayName\": \"Database Connection URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Segment Size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-connection-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All segments will be sent to this relationship. If the file was small enough that it was not segmented, a copy of the original is sent to this relationship as well as original\",\n-                                \"name\": \"segments\"\n                             },\n-                            {\n-                                \"description\": \"The original FlowFile will be sent to this relationship\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"segment\",\n-                            \"split\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SegmentContent\",\n-                        \"typeDescription\": \"Segments a FlowFile into multiple smaller segments on byte boundaries. Each segment is given the following attributes: fragment.identifier, fragment.index, fragment.count, segment.original.filename; these attributes can then be used by the MergeContent processor in order to reconstitute the original FlowFile\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All segments produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute. This attribute is added to maintain backward compatibility, but the fragment.identifier is preferred, as it is designed to work in conjunction with the MergeContent Processor\",\n-                                \"name\": \"segment.identifier\"\n+                            \"hikaricp-driver-classname\": {\n+                                \"description\": \"The fully-qualified class name of the JDBC driver. Example: com.mysql.jdbc.Driver\",\n+                                \"displayName\": \"Database Driver Class Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-driver-classname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the segments that were created from a single parent FlowFile. This attribute is added to maintain backward compatibility, but the fragment.index is preferred, as it is designed to work in conjunction with the MergeContent Processor\",\n-                                \"name\": \"segment.index\"\n+                            \"hikaricp-driver-locations\": {\n+                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n+                                \"displayName\": \"Database Driver Location(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-driver-locations\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The number of segments generated from the parent FlowFile. This attribute is added to maintain backward compatibility, but the fragment.count is preferred, as it is designed to work in conjunction with the MergeContent Processor\",\n-                                \"name\": \"segment.count\"\n+                            \"hikaricp-kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hikaricp-kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"All segments produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n+                            \"hikaricp-max-conn-lifetime\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The maximum lifetime of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n+                                \"displayName\": \"Max Connection Lifetime\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-max-conn-lifetime\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the segments that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n+                            \"hikaricp-max-total-conns\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"This property controls the maximum size that the pool is allowed to reach, including both idle and in-use connections. Basically this value will determine the maximum number of actual connections to the database backend. A reasonable value for this is best determined by your execution environment. When the pool reaches this size, and no idle connections are available, the service will block for up to connectionTimeout milliseconds before timing out.\",\n+                                \"displayName\": \"Max Total Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-max-total-conns\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The number of segments generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                            \"hikaricp-max-wait-time\": {\n+                                \"defaultValue\": \"500 millis\",\n+                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or 0 <time units> to wait indefinitely. \",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-max-wait-time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n+                            \"hikaricp-min-idle-conns\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"This property controls the minimum number of idle connections that HikariCP tries to maintain in the pool. If the idle connections dip below this value and total connections in the pool are less than 'Max Total Connections', HikariCP will make a best effort to add additional connections quickly and efficiently. It is recommended that this property to be set equal to 'Max Total Connections'.\",\n+                                \"displayName\": \"Minimum Idle Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-min-idle-conns\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hikaricp-password\": {\n+                                \"description\": \"The password for the database user\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"hikaricp-username\": {\n+                                \"description\": \"Database user name\",\n+                                \"displayName\": \"Database User\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n+                            \"hikaricp-validation-query\": {\n+                                \"description\": \"Validation Query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. NOTE: Using validation might have some performance penalty.\",\n+                                \"displayName\": \"Validation Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-validation-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The filename will be updated to include the parent's filename, the segment index, and the segment count\",\n-                                \"name\": \"segment.original.filename \"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                \"version\": \"1.27.0\"\n                             }\n-                        ]\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"connection\",\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"hikari\",\n+                            \"jdbc\",\n+                            \"pooling\",\n+                            \"store\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.dbcp.HikariCPConnectionPool\",\n+                        \"typeDescription\": \"Provides Database Connection Pooling Service based on HikariCP. Connections can be asked from pool and returned after usage.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Byte Sequence\": {\n-                                \"description\": \"A representation of bytes to look for and upon which to split the source file into separate files\",\n-                                \"displayName\": \"Byte Sequence\",\n+                            \"db-record-sink-catalog-name\": {\n+                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty\",\n+                                \"displayName\": \"Catalog Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"db-record-sink-catalog-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-record-sink-dcbp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database for sending records.\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Byte Sequence\",\n+                                \"name\": \"db-record-sink-dcbp-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"db-record-sink-query-timeout\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL statement , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"db-record-sink-query-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Byte Sequence Format\": {\n+                            \"db-record-sink-quoted-identifiers\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The Byte Sequence will be interpreted as a hexadecimal representation of bytes\",\n-                                        \"displayName\": \"Hexadecimal\",\n-                                        \"value\": \"Hexadecimal\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"The Byte Sequence will be interpreted as UTF-8 Encoded text\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Hexadecimal\",\n-                                \"description\": \"Specifies how the <Byte Sequence> property should be interpreted\",\n-                                \"displayName\": \"Byte Sequence Format\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n+                                \"displayName\": \"Quote Column Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Byte Sequence Format\",\n-                                \"required\": true,\n+                                \"name\": \"db-record-sink-quoted-identifiers\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Byte Sequence Location\": {\n+                            \"db-record-sink-quoted-table-identifiers\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Keep the Byte Sequence at the end of the first split if <Keep Byte Sequence> is true\",\n-                                        \"displayName\": \"Trailing\",\n-                                        \"value\": \"Trailing\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Keep the Byte Sequence at the beginning of the second split if <Keep Byte Sequence> is true\",\n-                                        \"displayName\": \"Leading\",\n-                                        \"value\": \"Leading\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Trailing\",\n-                                \"description\": \"If <Keep Byte Sequence> is set to true, specifies whether the byte sequence should be added to the end of the first split or the beginning of the second; if <Keep Byte Sequence> is false, this property is ignored.\",\n-                                \"displayName\": \"Byte Sequence Location\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name.\",\n+                                \"displayName\": \"Quote Table Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Byte Sequence Location\",\n+                                \"name\": \"db-record-sink-quoted-table-identifiers\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-record-sink-schema-name\": {\n+                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"db-record-sink-schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-record-sink-table-name\": {\n+                                \"description\": \"The name of the table that the statement should affect.\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"db-record-sink-table-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Byte Sequence\": {\n+                            \"db-record-sink-translate-field-names\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Determines whether or not the Byte Sequence should be included with each Split\",\n-                                \"displayName\": \"Keep Byte Sequence\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, the Processor will attempt to translate field names into the appropriate column names for the table specified. If false, the field names must match the column names exactly, or the column will not be updated\",\n+                                \"displayName\": \"Translate Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Byte Sequence\",\n-                                \"required\": true,\n+                                \"name\": \"db-record-sink-translate-field-names\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-record-sink-unmatched-column-behavior\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  No notification will be logged\",\n+                                        \"displayName\": \"Ignore Unmatched Columns\",\n+                                        \"value\": \"Ignore Unmatched Columns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  A warning will be logged\",\n+                                        \"displayName\": \"Warn on Unmatched Columns\",\n+                                        \"value\": \"Warn on Unmatched Columns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the document.  An error will be logged\",\n+                                        \"displayName\": \"Fail on Unmatched Columns\",\n+                                        \"value\": \"Fail on Unmatched Columns\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Fail on Unmatched Columns\",\n+                                \"description\": \"If an incoming record does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Column Behavior\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"db-record-sink-unmatched-column-behavior\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-record-sink-unmatched-field-behavior\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any field in the document that cannot be mapped to a column in the database is ignored\",\n+                                        \"displayName\": \"Ignore Unmatched Fields\",\n+                                        \"value\": \"Ignore Unmatched Fields\"\n+                                    },\n+                                    {\n+                                        \"description\": \"If the document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n+                                        \"displayName\": \"Fail on Unmatched Fields\",\n+                                        \"value\": \"Fail on Unmatched Fields\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Ignore Unmatched Fields\",\n+                                \"description\": \"If an incoming record has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Field Behavior\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"db-record-sink-unmatched-field-behavior\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All Splits will be routed to the splits relationship\",\n-                                \"name\": \"splits\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The original file\",\n-                                \"name\": \"original\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The FlowFile with its attributes is stored in memory, not the content of the FlowFile. If many splits are generated due to the size of the content, or how the content is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"binary\",\n-                            \"content\",\n-                            \"split\"\n+                            \"connection\",\n+                            \"database\",\n+                            \"db\",\n+                            \"jdbc\",\n+                            \"record\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SplitContent\",\n-                        \"typeDescription\": \"Splits incoming FlowFiles by a specified byte sequence\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.record.sink.db.DatabaseRecordSink\",\n+                        \"typeDescription\": \"Provides a service to write records using a configured database connection.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-dropbox-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-dropbox-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"JsonPath Expression\": {\n-                                \"description\": \"A JsonPath expression that indicates the array element to split into JSON/scalar fragments.\",\n-                                \"displayName\": \"JsonPath Expression\",\n+                            \"access-token\": {\n+                                \"description\": \"Access Token of the user's Dropbox app. See Additional Details for more information about Access Token generation.\",\n+                                \"displayName\": \"Access Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JsonPath Expression\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"access-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Max String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n-                                \"displayName\": \"Max String Length\",\n+                            \"app-key\": {\n+                                \"description\": \"App Key of the user's Dropbox app. See Additional Details for more information.\",\n+                                \"displayName\": \"App Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max String Length\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"app-key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Null Value Representation\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"empty string\",\n-                                        \"value\": \"empty string\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"the string 'null'\",\n-                                        \"value\": \"the string 'null'\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"empty string\",\n-                                \"description\": \"Indicates the desired representation of JSON Path expressions resulting in a null value.\",\n-                                \"displayName\": \"Null Value Representation\",\n+                            \"app-secret\": {\n+                                \"description\": \"App Secret of the user's Dropbox app. See Additional Details for more information.\",\n+                                \"displayName\": \"App Secret\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null Value Representation\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"app-secret\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n+                            },\n+                            \"refresh-token\": {\n+                                \"description\": \"Refresh Token of the user's Dropbox app. See Additional Details for more information about Refresh Token generation.\",\n+                                \"displayName\": \"Refresh Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"refresh-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON or the specified path does not exist), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All segments of the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"split\"\n+                                \"artifact\": \"nifi-dropbox-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The entirety of the FlowFile's content (as a JsonNode object) is read into memory, in addition to all of the generated FlowFiles representing the split JSON. If many splits are generated due to the size of the JSON, or how the JSON is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"json\",\n-                            \"jsonpath\",\n-                            \"split\"\n+                            \"credentials\",\n+                            \"dropbox\",\n+                            \"provider\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SplitJson\",\n-                        \"typeDescription\": \"Splits a JSON File into multiple, separate FlowFiles for an array element specified by a JsonPath expression. Each generated FlowFile is comprised of an element of the specified array and transferred to relationship 'split,' with the original file transferred to the 'original' relationship. If the specified JsonPath is not found or does not evaluate to an array element, the original file is routed to 'failure' and no files are generated.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.services.dropbox.StandardDropboxCredentialService\",\n+                        \"typeDescription\": \"Defines credentials for Dropbox processors.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-workday-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-workday-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Record Reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Web Client Service Provider\": {\n+                                \"description\": \"Web client which is used to communicate with the Workday API.\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"Web Client Service Provider\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Workday Password\": {\n+                                \"description\": \"The password provided for authentication of Workday requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n+                                \"displayName\": \"Workday Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Workday Password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Workday Report URL\": {\n+                                \"description\": \"HTTP remote URL of Workday report including a scheme of http or https, as well as a hostname or IP address with optional port and path elements.\",\n+                                \"displayName\": \"Workday Report URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Workday Report URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Workday Username\": {\n+                                \"description\": \"The username provided for authentication of Workday requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n+                                \"displayName\": \"Workday Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Workday Username\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                            \"record-writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.27.0\"\n                                 }\n-                            },\n-                            \"Records Per Split\": {\n-                                \"description\": \"Specifies how many records should be written to each 'split' or 'segment' FlowFile\",\n-                                \"displayName\": \"Records Per Split\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Records Per Split\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The individual 'segments' of the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"splits\"\n+                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Upon successfully splitting an input FlowFile, the original FlowFile will be sent to this relationship.\",\n+                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n                                 \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"log\",\n-                            \"logs\",\n-                            \"schema\",\n-                            \"split\",\n-                            \"text\"\n+                            \"Workday\",\n+                            \"report\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SplitRecord\",\n-                        \"typeDescription\": \"Splits up an input FlowFile that is in a record-oriented data format into multiple smaller FlowFiles\",\n+                        \"type\": \"org.apache.nifi.processors.workday.GetWorkdayReport\",\n+                        \"typeDescription\": \"A processor which can interact with a configurable Workday Report. The processor can forward the content without modification, or you can transform it by providing the specific Record Reader and Record Writer services based on your needs. You can also remove fields by defining schema in the Record Writer. Supported Workday report formats are: csv, simplexml, json\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer for the FlowFiles routed to the 'splits' Relationship.\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile. This is added to FlowFiles that are routed to the 'splits' Relationship.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n+                                \"description\": \"The Java exception class raised when the processor fails\",\n+                                \"name\": \"getworkdayreport.java.exception.class\"\n                             },\n                             {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"The Java exception message raised when the processor fails\",\n+                                \"name\": \"getworkdayreport.java.exception.message\"\n                             },\n                             {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Source / Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n+                                \"description\": \"The number of records in an outgoing FlowFile. This is only populated on the 'success' relationship when Record Reader and Writer is set.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-aws-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-proxy-configuration-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-proxy-configuration-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Header Line Count\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of lines that should be considered part of the header; the header lines will be duplicated to all split files\",\n-                                \"displayName\": \"Header Line Count\",\n+                            \"proxy-server-host\": {\n+                                \"description\": \"Proxy server hostname or ip-address.\",\n+                                \"displayName\": \"Proxy Server Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Header Line Count\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-server-host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Header Line Marker Characters\": {\n-                                \"description\": \"The first character(s) on the line of the datafile which signifies a header line. This value is ignored when Header Line Count is non-zero. The first line not containing the Header Line Marker Characters and all subsequent lines are considered non-header\",\n-                                \"displayName\": \"Header Line Marker Characters\",\n+                            \"proxy-server-port\": {\n+                                \"description\": \"Proxy server port number.\",\n+                                \"displayName\": \"Proxy Server Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Header Line Marker Characters\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-server-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Line Split Count\": {\n-                                \"description\": \"The number of lines that will be added to each split file, excluding header lines. A value of zero requires Maximum Fragment Size to be set, and line count will not be considered in determining splits.\",\n-                                \"displayName\": \"Line Split Count\",\n+                            \"proxy-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type.\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Line Split Count\",\n+                                \"name\": \"proxy-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Fragment Size\": {\n-                                \"description\": \"The maximum size of each split file, including header lines. NOTE: in the case where a single line exceeds this property (including headers, if applicable), that line will be output in a split of its own which exceeds this Maximum Fragment Size setting.\",\n-                                \"displayName\": \"Maximum Fragment Size\",\n+                            \"proxy-user-name\": {\n+                                \"description\": \"The name of the proxy client for user authentication.\",\n+                                \"displayName\": \"Proxy User Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Fragment Size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-user-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remove Trailing Newlines\": {\n+                            \"proxy-user-password\": {\n+                                \"description\": \"The password of the proxy client for user authentication.\",\n+                                \"displayName\": \"Proxy User Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-user-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"socks-version\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"SOCKS4\",\n+                                        \"value\": \"SOCKS4\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"SOCKS5\",\n+                                        \"value\": \"SOCKS5\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to remove newlines at the end of each split file. This should be false if you intend to merge the split files later. If this is set to 'true' and a FlowFile is generated that contains only 'empty lines' (i.e., consists only of \\\\r and \\\\n characters), the FlowFile will not be emitted. Note, however, that if header lines are specified, the resultant FlowFile will never be empty as it will consist of the header lines, so a FlowFile may be emitted that contains only the header lines.\",\n-                                \"displayName\": \"Remove Trailing Newlines\",\n+                                \"defaultValue\": \"SOCKS5\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SOCKS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Proxy Type\",\n+                                        \"propertyName\": \"proxy-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"SOCKS Protocol Version\",\n+                                \"displayName\": \"SOCKS Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remove Trailing Newlines\",\n+                                \"name\": \"socks-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If a file cannot be split for some reason, the original file will be routed to this destination and nothing will be routed elsewhere\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original input file will be routed to this destination when it has been successfully split into 1 or more files\",\n-                                \"name\": \"original\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The split files will be routed to this destination when an input file is successfully split into 1 or more split files\",\n-                                \"name\": \"splits\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The FlowFile with its attributes is stored in memory, not the content of the FlowFile. If many splits are generated due to the size of the content, or how the content is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"split\",\n-                            \"text\"\n+                            \"Proxy\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SplitText\",\n-                        \"typeDescription\": \"Splits a text file into multiple smaller text files on line boundaries limited by maximum number of lines or total size of fragment. Each output split file will contain no more than the configured number of lines or bytes. If both Line Split Count and Maximum Fragment Size are specified, the split occurs at whichever limit is reached first. If the first line of a fragment exceeds the Maximum Fragment Size, that line will be output in a single split file which exceeds the configured maximum size limit. This component also allows one to specify that each split should include a header lines. Header lines can be computed by either specifying the amount of lines that should constitute a header or by using header marker to match against the read lines. If such match happens then the corresponding line will be treated as header. Keep in mind that upon the first failure of header marker match, no more matches will be performed and the rest of the data will be parsed as regular lines for a given split. If after computation of the header there are no more data, the resulting split will consists of only header lines.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of lines of text from the original FlowFile that were copied to this FlowFile\",\n-                                \"name\": \"text.line.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of bytes from the original FlowFile that were copied to this FlowFile, including header, if applicable, which is duplicated in each split FlowFile\",\n-                                \"name\": \"fragment.size\"\n-                            },\n-                            {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.proxy.StandardProxyConfigurationService\",\n+                        \"typeDescription\": \"Provides a set of configurations for different NiFi components to use a proxy server.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-registry-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-registry-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds a named schema using the JSON string representation of an Avro schema\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Schema name\",\n+                                \"value\": \"Schema Content\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Split Depth\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Indicates the XML-nesting depth to start splitting XML fragments. A depth of 1 means split the root's children, whereas a depth of 2 means split the root's children's children and so forth.\",\n-                                \"displayName\": \"Split Depth\",\n+                            \"avro-reg-validated-field-names\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to validate the field names in the Avro schema based on Avro naming rules. If set to true, all field names must be valid Avro names, which must begin with [A-Za-z_], and subsequently contain only [A-Za-z0-9_]. If set to false, no validation will be performed on the field names.\",\n+                                \"displayName\": \"Validate Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Split Depth\",\n+                                \"name\": \"avro-reg-validated-field-names\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid XML), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All segments of the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"split\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The entirety of the FlowFile's content (as a Document object) is read into memory, in addition to all of the generated FlowFiles representing the split XML. A Document object can take approximately 10 times as much memory as the size of the XML. For example, a 1 MB XML document may use 10 MB of memory. If many splits are generated due to the size of the XML, a two-phase approach may be necessary to avoid excessive use of memory.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"split\",\n-                            \"xml\"\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\",\n+                            \"registry\",\n+                            \"schema\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SplitXml\",\n-                        \"typeDescription\": \"Splits an XML File into multiple separate FlowFiles, each comprising a child or descendant of the original root element\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.schemaregistry.services.AvroSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a service for registering and accessing schemas. You can register a schema as a dynamic property where 'name' represents the schema name and 'value' represents the textual representation of the actual schema following the syntax and semantics of Avro's Schema format.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-registry-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"30 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n+                                \"description\": \"Adds a named schema using the JSON string representation of a JSON schema\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Schema Name\",\n+                                \"value\": \"Schema Content\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"File Location\": {\n+                            \"JSON Schema Version\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"State is stored locally. Each node in a cluster will tail a different file.\",\n-                                        \"displayName\": \"Local\",\n-                                        \"value\": \"Local\"\n+                                        \"description\": \"Draft Version 4\",\n+                                        \"displayName\": \"Draft 4\",\n+                                        \"value\": \"DRAFT_4\"\n                                     },\n                                     {\n-                                        \"description\": \"State is located on a remote resource. This Processor will store state across the cluster so that it can be run on Primary Node Only and a new Primary Node can pick up where the last one left off.\",\n-                                        \"displayName\": \"Remote\",\n-                                        \"value\": \"Remote\"\n+                                        \"description\": \"Draft Version 6\",\n+                                        \"displayName\": \"Draft 6\",\n+                                        \"value\": \"DRAFT_6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Draft Version 7\",\n+                                        \"displayName\": \"Draft 7\",\n+                                        \"value\": \"DRAFT_7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Draft Version 2019-09\",\n+                                        \"displayName\": \"Draft 2019-09\",\n+                                        \"value\": \"DRAFT_2019_09\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Draft Version 2020-12\",\n+                                        \"displayName\": \"Draft 2020-12\",\n+                                        \"value\": \"DRAFT_2020_12\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Local\",\n-                                \"description\": \"Specifies where the state is located either local or cluster so that state can be stored appropriately in order to ensure that all data is consumed without duplicating data upon restart of NiFi\",\n-                                \"displayName\": \"State Location\",\n+                                \"defaultValue\": \"DRAFT_2020_12\",\n+                                \"description\": \"The JSON schema specification\",\n+                                \"displayName\": \"JSON Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Location\",\n+                                \"name\": \"JSON Schema Version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"File to Tail\": {\n-                                \"description\": \"Path of the file to tail in case of single file mode. If using multifile mode, regular expression to find files to tail in the base directory. In case recursivity is set to true, the regular expression will be used to match the path starting from the base directory (see additional details for examples).\",\n-                                \"displayName\": \"File(s) to Tail\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.JsonSchemaRegistry\",\n+                                \"version\": \"1.27.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"json\",\n+                            \"registry\",\n+                            \"schema\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.schemaregistry.services.StandardJsonSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a service for registering and accessing JSON schemas. One can register a schema as a dynamic property where 'name' represents the schema name and 'value' represents the textual representation of the actual schema following the syntax and semantics of the JSON Schema format. Empty schemas and schemas only consisting of whitespace are not acceptable schemas.The registry is heterogeneous registry as it can store schemas of different schema draft versions. By default the registry is configured to store schemas of Draft 2020-12. When a schema is added, the version which is currently is set, is what the schema is saved as.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-ambari-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-ambari-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"This reporting task is deprecated and will be removed in NiFi 2.x.\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Application ID\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The Application ID to be included in the metrics sent to Ambari\",\n+                                \"displayName\": \"Application ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"File to Tail\",\n+                                \"name\": \"Application ID\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Initial Start Position\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Start with the oldest data that matches the Rolling Filename Pattern and then begin reading from the File to Tail\",\n-                                        \"displayName\": \"Beginning of Time\",\n-                                        \"value\": \"Beginning of Time\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Start with the beginning of the File to Tail. Do not ingest any data that has already been rolled over\",\n-                                        \"displayName\": \"Beginning of File\",\n-                                        \"value\": \"Beginning of File\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Start with the data at the end of the File to Tail. Do not ingest any data thas has already been rolled over or any data in the File to Tail that has already been written.\",\n-                                        \"displayName\": \"Current Time\",\n-                                        \"value\": \"Current Time\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Beginning of File\",\n-                                \"description\": \"When the Processor first begins to tail data, this property specifies where the Processor should begin reading data. Once data has been ingested from a file, the Processor will continue from the last point from which it has received data.\",\n-                                \"displayName\": \"Initial Start Position\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"The Hostname of this NiFi instance to be included in the metrics sent to Ambari\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Initial Start Position\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Line Start Pattern\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Single file\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Tailing mode\",\n-                                        \"propertyName\": \"tail-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"A Regular Expression to match against the start of a log line. If specified, any line that matches the expression, and any following lines, will be buffered until another line matches the Expression. In doing this, we can avoid splitting apart multi-line messages in the file. This assumes that the data is in UTF-8 format.\",\n-                                \"displayName\": \"Line Start Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Line Start Pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Buffer Size\": {\n-                                \"defaultValue\": \"64 KB\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Line Start Pattern\",\n-                                        \"propertyName\": \"Line Start Pattern\"\n-                                    }\n-                                ],\n-                                \"description\": \"When using the Line Start Pattern, there may be situations in which the data in the file being tailed never matches the Regular Expression. This would result in the processor buffering all data from the tailed file, which can quickly exhaust the heap. To avoid this, the Processor will buffer only up to this amount of data before flushing the buffer, even if it means ingesting partial data from the file.\",\n-                                \"displayName\": \"Max Buffer Size\",\n+                            \"Metrics Collector URL\": {\n+                                \"defaultValue\": \"http://localhost:6188/ws/v1/timeline/metrics\",\n+                                \"description\": \"The URL of the Ambari Metrics Collector Service\",\n+                                \"displayName\": \"Metrics Collector URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Buffer Size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Metrics Collector URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Post-Rollover Tail Period\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"When a file is rolled over, the processor will continue tailing the rolled over file until it has not been modified for this amount of time. This allows for another process to rollover a file, and then flush out any buffered data. Note that when this value is set, and the tailed file rolls over, the new file will not be tailed until the old file has not been modified for the configured amount of time. Additionally, when using this capability, in order to avoid data duplication, this period must be set longer than the Processor's Run Schedule, and the Processor must not be stopped after the file being tailed has been rolled over and before the data has been fully consumed. Otherwise, the data may be duplicated, as the entire file may be written out as the contents of a single FlowFile.\",\n-                                \"displayName\": \"Post-Rollover Tail Period\",\n+                            \"Process Group ID\": {\n+                                \"description\": \"If specified, the reporting task will send metrics about this process group only. If not, the root process group is used and global metrics are sent.\",\n+                                \"displayName\": \"Process Group ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Post-Rollover Tail Period\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Process Group ID\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"Rolling Filename Pattern\": {\n-                                \"description\": \"If the file to tail \\\"rolls over\\\" as would be the case with log files, this filename pattern will be used to identify files that have rolled over so that if NiFi is restarted, and the file has rolled over, it will be able to pick up where it left off. This pattern supports wildcard characters * and ?, it also supports the notation ${filename} to specify a pattern based on the name of the file (without extension), and will assume that the files that have rolled over live in the same directory as the file being tailed. The same glob pattern will be used for all files.\",\n-                                \"displayName\": \"Rolling Filename Pattern\",\n+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ambari\",\n+                            \"metrics\",\n+                            \"reporting\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.reporting.ambari.AmbariReportingTask\",\n+                        \"typeDescription\": \"Publishes metrics from NiFi to Ambari Metrics Service (AMS). Due to how the Ambari Metrics Service works, this reporting task should be scheduled to run every 60 seconds. Each iteration it will send the metrics from the previous iteration, and calculate the current metrics to be sent on next iteration. Scheduling this reporting task at a frequency other than 60 seconds may produce unexpected results.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-ssl-context-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-ssl-context-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Keystore Filename\": {\n+                                \"description\": \"The fully-qualified filename of the Keystore\",\n+                                \"displayName\": \"Keystore Filename\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Rolling Filename Pattern\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Keystore Filename\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"pre-allocated-buffer-size\": {\n-                                \"defaultValue\": \"65536 B\",\n-                                \"description\": \"Sets the amount of memory that is pre-allocated for each tailed file.\",\n-                                \"displayName\": \"Pre-Allocated Buffer Size\",\n+                            \"Keystore Password\": {\n+                                \"description\": \"The password for the Keystore\",\n+                                \"displayName\": \"Keystore Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"pre-allocated-buffer-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Keystore Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"reread-on-nul\": {\n+                            \"Keystore Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"BCFKS\",\n+                                        \"value\": \"BCFKS\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"PKCS12\",\n+                                        \"value\": \"PKCS12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JKS\",\n+                                        \"value\": \"JKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this option is set to 'true', when a NUL character is read, the processor will yield and try to read the same part again later. (Note: Yielding may delay the processing of other files tailed by this processor, not just the one with the NUL character.) The purpose of this flag is to allow users to handle cases where reading a file may return temporary NUL values. NFS for example may send file contents out of order. In this case the missing parts are temporarily replaced by NUL values. CAUTION! If the file contains legitimate NUL values, setting this flag causes this processor to get stuck indefinitely. For this reason users should refrain from using this feature if they can help it and try to avoid having the target file on a file system where reads are unreliable.\",\n-                                \"displayName\": \"Reread when NUL encountered\",\n+                                \"description\": \"The Type of the Keystore\",\n+                                \"displayName\": \"Keystore Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reread-on-nul\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"tail-base-directory\": {\n-                                \"description\": \"Base directory used to look for files to tail. This property is required when using Multifile mode.\",\n-                                \"displayName\": \"Base directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"tail-base-directory\",\n+                                \"name\": \"Keystore Type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"tail-mode\": {\n+                            \"SSL Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"In this mode, only the one file indicated in the 'Files to tail' property will be watched by the processor. In this mode, the file may not exist when starting the processor.\",\n-                                        \"displayName\": \"Single file\",\n-                                        \"value\": \"Single file\"\n+                                        \"description\": \"Negotiate latest protocol version based on platform supported versions\",\n+                                        \"displayName\": \"TLS\",\n+                                        \"value\": \"TLS\"\n                                     },\n                                     {\n-                                        \"description\": \"In this mode, the 'Files to tail' property accepts a regular expression and the processor will look for files in 'Base directory' to list the files to tail by the processor.\",\n-                                        \"displayName\": \"Multiple files\",\n-                                        \"value\": \"Multiple files\"\n+                                        \"description\": \"Require TLSv1.3 protocol version\",\n+                                        \"displayName\": \"TLSv1.3\",\n+                                        \"value\": \"TLSv1.3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Require TLSv1.2 protocol version\",\n+                                        \"displayName\": \"TLSv1.2\",\n+                                        \"value\": \"TLSv1.2\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Single file\",\n-                                \"description\": \"Mode to use: single file will tail only one file, multiple file will look for a list of file. In Multiple mode the Base directory is required.\",\n-                                \"displayName\": \"Tailing mode\",\n+                                \"defaultValue\": \"TLS\",\n+                                \"description\": \"TLS Protocol Version for encrypted connections. Supported versions depend on the specific version of Java used.\",\n+                                \"displayName\": \"TLS Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"tail-mode\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Protocol\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"tailfile-lookup-frequency\": {\n-                                \"defaultValue\": \"10 minutes\",\n-                                \"description\": \"Only used in Multiple files mode. It specifies the minimum duration the processor will wait before listing again the files to tail.\",\n-                                \"displayName\": \"Lookup frequency\",\n+                            \"Truststore Filename\": {\n+                                \"description\": \"The fully-qualified filename of the Truststore\",\n+                                \"displayName\": \"Truststore Filename\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"tailfile-lookup-frequency\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Truststore Filename\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"tailfile-maximum-age\": {\n-                                \"defaultValue\": \"24 hours\",\n-                                \"description\": \"Only used in Multiple files mode. It specifies the necessary minimum duration to consider that no new messages will be appended in a file regarding its last modification date. This should not be set too low to avoid duplication of data in case new messages are appended at a lower frequency.\",\n-                                \"displayName\": \"Maximum age\",\n+                            \"Truststore Password\": {\n+                                \"description\": \"The password for the Truststore\",\n+                                \"displayName\": \"Truststore Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"tailfile-maximum-age\",\n+                                \"name\": \"Truststore Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"tailfile-recursive-lookup\": {\n+                            \"Truststore Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"BCFKS\",\n+                                        \"value\": \"BCFKS\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"PKCS12\",\n+                                        \"value\": \"PKCS12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JKS\",\n+                                        \"value\": \"JKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"When using Multiple files mode, this property defines if files must be listed recursively or not in the base directory.\",\n-                                \"displayName\": \"Recursive lookup\",\n+                                \"description\": \"The Type of the Truststore\",\n+                                \"displayName\": \"Truststore Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"tailfile-recursive-lookup\",\n-                                \"required\": true,\n+                                \"name\": \"Truststore Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"key-password\": {\n+                                \"description\": \"The password for the key. If this is not specified, but the Keystore Filename, Password, and Type are specified, then the Keystore Password will be assumed to be the same as the Key Password.\",\n+                                \"displayName\": \"Key Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Stores state about where in the Tailed File it left off so that on restart it does not have to duplicate data. State is stored either local or clustered depend on the <File Location> property.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\",\n-                                \"LOCAL\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles are routed to this Relationship.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                \"version\": \"1.27.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"file\",\n-                            \"log\",\n-                            \"source\",\n-                            \"tail\",\n-                            \"text\"\n+                            \"certificate\",\n+                            \"jks\",\n+                            \"keystore\",\n+                            \"p12\",\n+                            \"pkcs\",\n+                            \"pkcs12\",\n+                            \"secure\",\n+                            \"ssl\",\n+                            \"tls\",\n+                            \"truststore\"\n                         ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.TailFile\",\n-                        \"typeDescription\": \"\\\"Tails\\\" a file, or a list of files, ingesting data from the file as it is written to the file. The file is expected to be textual. Data is ingested only when a new line is encountered (carriage return or new-line character or combination). If the file to tail is periodically \\\"rolled over\\\", as is generally the case with log files, an optional Rolling Filename Pattern can be used to retrieve data from files that have rolled over, even if the rollover occurred while NiFi was not running (provided that the data still exists upon restart of NiFi). It is generally advisable to set the Run Schedule to a few seconds, rather than running with the default value of 0 secs, as this Processor will consume a lot of resources if scheduled very aggressively. At this time, this Processor does not support ingesting files that have been compressed when 'rolled over'.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Path of the original file the flow file comes from.\",\n-                                \"name\": \"tailfile.original.path\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.ssl.StandardRestrictedSSLContextService\",\n+                        \"typeDescription\": \"Restricted implementation of the SSLContextService. Provides the ability to configure keystore and/or truststore properties once and reuse that configuration throughout the application, but only allows a restricted set of TLS/SSL protocols to be chosen (no SSL protocols are supported). The set of protocols selectable will evolve over time as new protocols emerge and older protocols are deprecated. This service is recommended over StandardSSLContextService if a component doesn't expect to communicate with legacy systems since it is unlikely that legacy systems will support these protocols.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-ssl-context-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These XSLT parameters are passed to the transformer\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"An XSLT transform parameter name\",\n-                                \"value\": \"An XSLT transform parameter value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"XSLT file name\": {\n-                                \"description\": \"Provides the name (including full path) of the XSLT file to apply to the FlowFile XML content.One of the 'XSLT file name' and 'XSLT Lookup' properties must be defined.\",\n-                                \"displayName\": \"XSLT file name\",\n+                            \"Keystore Filename\": {\n+                                \"description\": \"The fully-qualified filename of the Keystore\",\n+                                \"displayName\": \"Keystore Filename\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"XSLT file name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Keystore Filename\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Maximum number of stylesheets to cache. Zero disables the cache.\",\n-                                \"displayName\": \"Cache size\",\n+                            \"Keystore Password\": {\n+                                \"description\": \"The password for the Keystore\",\n+                                \"displayName\": \"Keystore Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Keystore Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"cache-ttl-after-last-access\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"The cache TTL (time-to-live) or how long to keep stylesheets in the cache after last access.\",\n-                                \"displayName\": \"Cache TTL after last access\",\n+                            \"Keystore Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BCFKS\",\n+                                        \"value\": \"BCFKS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PKCS12\",\n+                                        \"value\": \"PKCS12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JKS\",\n+                                        \"value\": \"JKS\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Type of the Keystore\",\n+                                \"displayName\": \"Keystore Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-ttl-after-last-access\",\n-                                \"required\": true,\n+                                \"name\": \"Keystore Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"indent-output\": {\n+                            \"SSL Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Negotiate latest SSL or TLS protocol version based on platform supported versions\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Negotiate latest TLS protocol version based on platform supported versions\",\n+                                        \"displayName\": \"TLS\",\n+                                        \"value\": \"TLS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Require TLSv1.3 protocol version\",\n+                                        \"displayName\": \"TLSv1.3\",\n+                                        \"value\": \"TLSv1.3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Require TLSv1.2 protocol version\",\n+                                        \"displayName\": \"TLSv1.2\",\n+                                        \"value\": \"TLSv1.2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Require TLSv1.1 protocol version\",\n+                                        \"displayName\": \"TLSv1.1\",\n+                                        \"value\": \"TLSv1.1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Require TLSv1 protocol version\",\n+                                        \"displayName\": \"TLSv1\",\n+                                        \"value\": \"TLSv1\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to indent the output.\",\n-                                \"displayName\": \"Indent\",\n+                                \"defaultValue\": \"TLS\",\n+                                \"description\": \"SSL or TLS Protocol Version for encrypted connections. Supported versions include insecure legacy options and depend on the specific version of Java used.\",\n+                                \"displayName\": \"TLS Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"indent-output\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Protocol\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"secure-processing\": {\n+                            \"Truststore Filename\": {\n+                                \"description\": \"The fully-qualified filename of the Truststore\",\n+                                \"displayName\": \"Truststore Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Truststore Filename\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Truststore Password\": {\n+                                \"description\": \"The password for the Truststore\",\n+                                \"displayName\": \"Truststore Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Truststore Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Truststore Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"BCFKS\",\n+                                        \"value\": \"BCFKS\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"PKCS12\",\n+                                        \"value\": \"PKCS12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JKS\",\n+                                        \"value\": \"JKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to mitigate various XML-related attacks like XXE (XML External Entity) attacks.\",\n-                                \"displayName\": \"Secure processing\",\n+                                \"description\": \"The Type of the Truststore\",\n+                                \"displayName\": \"Truststore Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"secure-processing\",\n-                                \"required\": true,\n+                                \"name\": \"Truststore Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"xslt-controller\": {\n-                                \"description\": \"Controller lookup used to store XSLT definitions. One of the 'XSLT file name' and 'XSLT Lookup' properties must be defined. WARNING: note that the lookup controller service should not be used to store large XSLT files.\",\n-                                \"displayName\": \"XSLT Lookup\",\n+                            \"key-password\": {\n+                                \"description\": \"The password for the key. If this is not specified, but the Keystore Filename, Password, and Type are specified, then the Keystore Password will be assumed to be the same as the Key Password.\",\n+                                \"displayName\": \"Key Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"xslt-controller\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"xslt-controller-key\": {\n-                                \"description\": \"Key used to retrieve the XSLT definition from the XSLT lookup controller. This property must be set when using the XSLT controller property.\",\n-                                \"displayName\": \"XSLT Lookup key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"xslt-controller-key\",\n+                                \"name\": \"key-password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid XML), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"transform\",\n-                            \"xml\",\n-                            \"xslt\"\n+                            \"certificate\",\n+                            \"jks\",\n+                            \"keystore\",\n+                            \"p12\",\n+                            \"pkcs\",\n+                            \"pkcs12\",\n+                            \"secure\",\n+                            \"ssl\",\n+                            \"tls\",\n+                            \"truststore\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.TransformXml\",\n-                        \"typeDescription\": \"Applies the provided XSLT file to the FlowFile XML payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the XSL transform fails, the original FlowFile is routed to the 'failure' relationship\",\n+                        \"type\": \"org.apache.nifi.ssl.StandardSSLContextService\",\n+                        \"typeDescription\": \"Standard implementation of the SSLContextService. Provides the ability to configure keystore and/or truststore properties once and reuse that configuration throughout the application. This service can be used to communicate with both legacy and modern systems. If you only need to communicate with non-legacy systems, then the StandardRestrictedSSLContextService is recommended as it only allows a specific set of SSL protocols to be chosen.\",\n                         \"version\": \"1.27.0\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-standard-shared-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jslt-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-jslt-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"File Filter\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"Only files contained in the archive whose names match the given regular expression will be extracted (tar/zip only)\",\n-                                \"displayName\": \"File Filter\",\n+                            \"jslt-transform-cache-size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Compiling a JSLT Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n+                                \"displayName\": \"Transform Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n+                                \"name\": \"jslt-transform-cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Packaging Format\": {\n+                            \"jslt-transform-pretty_print\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"use mime.type attribute\",\n-                                        \"value\": \"use mime.type attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"tar\",\n-                                        \"value\": \"tar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"zip\",\n-                                        \"value\": \"zip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-stream-v3\",\n-                                        \"value\": \"flowfile-stream-v3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-stream-v2\",\n-                                        \"value\": \"flowfile-stream-v2\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-tar-v1\",\n-                                        \"value\": \"flowfile-tar-v1\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"use mime.type attribute\",\n-                                \"description\": \"The Packaging Format used to create the file\",\n-                                \"displayName\": \"Packaging Format\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Apply pretty-print formatting to the output of the JSLT transform\",\n+                                \"displayName\": \"Pretty Print\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Packaging Format\",\n+                                \"name\": \"jslt-transform-pretty_print\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password used for decrypting Zip archives encrypted with ZipCrypto or AES. Configuring a password disables support for alternative Zip compression algorithms.\",\n-                                \"displayName\": \"Password\",\n+                            \"jslt-transform-result-filter\": {\n+                                \"defaultValue\": \". != null and . != {} and . != []\",\n+                                \"description\": \"A filter for output JSON results using a JSLT expression. This property supports changing the default filter, which removes JSON objects with null values, empty objects and empty arrays from the output JSON. This JSLT must return true for each JSON object to be included and false for each object to be removed. Using a filter value of \\\"true\\\" to disables filtering.\",\n+                                \"displayName\": \"Transform Result Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"jslt-transform-result-filter\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"allow-stored-entries-wdd\": {\n+                            \"jslt-transform-transformation\": {\n+                                \"description\": \"JSLT Transformation for transform of JSON data. Any NiFi Expression Language present will be evaluated first to get the final transform to be applied. The JSLT Tutorial provides an overview of supported expressions: https://github.com/schibsted/jslt/blob/master/tutorial.md\",\n+                                \"displayName\": \"JSLT Transformation\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"jslt-transform-transformation\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"jslt-transform-transformation-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Apply transformation to entire FlowFile content JSON\",\n+                                        \"displayName\": \"Entire FlowFile\",\n+                                        \"value\": \"ENTIRE_FLOWFILE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"zip\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Packaging Format\",\n-                                        \"propertyName\": \"Packaging Format\"\n+                                        \"description\": \"Apply transformation each JSON Object in an array\",\n+                                        \"displayName\": \"Each JSON Object\",\n+                                        \"value\": \"EACH_OBJECT\"\n                                     }\n                                 ],\n-                                \"description\": \"Some zip archives contain stored entries with data descriptors which by spec should not happen.  If this property is true they will be read anyway.  If false and such an entry is discovered the zip will fail to process.\",\n-                                \"displayName\": \"Allow Stored Entries With Data Descriptor\",\n+                                \"defaultValue\": \"ENTIRE_FLOWFILE\",\n+                                \"description\": \"Whether to apply the JSLT transformation to the entire FlowFile contents or each JSON object in the root-level array\",\n+                                \"displayName\": \"Transformation Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"allow-stored-entries-wdd\",\n+                                \"name\": \"jslt-transform-transformation-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the <Packaging Format> property is set to use mime.type attribute, this attribute is used to determine the FlowFile's MIME Type. In this case, if the attribute is set to application/tar, the TAR Packaging Format will be used. If the attribute is set to application/zip, the ZIP Packaging Format will be used. If the attribute is set to application/flowfile-v3 or application/flowfile-v2 or application/flowfile-v1, the appropriate FlowFile Packaging Format will be used. If this attribute is missing, the FlowFile will be routed to 'failure'. Otherwise, if the attribute's value is not one of those mentioned above, the FlowFile will be routed to 'success' without being unpacked. Use the File Filter property only extract files matching a specific regular expression.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n-                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Unpacked FlowFiles are sent to this relationship\",\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFile is sent to this relationship when it cannot be unpacked for some reason\",\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON), it will be routed to this relationship\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile is sent to this relationship after it has been successfully unpacked\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"Unpack\",\n-                            \"archive\",\n-                            \"flowfile-stream\",\n-                            \"flowfile-stream-v3\",\n-                            \"tar\",\n-                            \"un-merge\",\n-                            \"zip\"\n+                            \"jslt\",\n+                            \"json\",\n+                            \"transform\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.UnpackContent\",\n-                        \"typeDescription\": \"Unpacks the content of FlowFiles that have been packaged with one of several different Packaging Formats, emitting one to many FlowFiles for each input FlowFile. Supported formats are TAR, ZIP, and FlowFile Stream packages.\",\n+                        \"type\": \"org.apache.nifi.processors.jslt.JSLTTransformJSON\",\n+                        \"typeDescription\": \"Applies a JSLT transformation to the FlowFile JSON payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the JSLT transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"If the FlowFile is successfully unpacked, its MIME Type is no longer known, so the mime.type attribute is set to application/octet-stream.\",\n+                                \"description\": \"Always set to application/json\",\n                                 \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"All unpacked FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the unpacked FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of unpacked FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile. Extensions of .tar, .zip or .pkg are removed because the MergeContent processor automatically adds those extensions if it is used to rebuild the original FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the unpacked file was last modified (tar only).\",\n-                                \"name\": \"file.lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was created. This attribute holds always the same value as file.lastModifiedTime (tar only).\",\n-                                \"name\": \"file.creationTime\"\n-                            },\n-                            {\n-                                \"description\": \"The owner of the unpacked file (tar only)\",\n-                                \"name\": \"file.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The group owner of the unpacked file (tar only)\",\n-                                \"name\": \"file.group\"\n-                            },\n-                            {\n-                                \"description\": \"The read/write/execute permissions of the unpacked file (tar only)\",\n-                                \"name\": \"file.permissions\"\n-                            },\n-                            {\n-                                \"description\": \"The encryption method for entries in Zip archives\",\n-                                \"name\": \"file.encryptionMethod\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-opentelemetry-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-opentelemetry-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"25 ms\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"counter-name\": {\n-                                \"description\": \"The name of the counter you want to set the value of - supports expression language like ${counterName}\",\n-                                \"displayName\": \"Counter Name\",\n+                            \"Address\": {\n+                                \"defaultValue\": \"0.0.0.0\",\n+                                \"description\": \"Internet Protocol Address on which to listen for OTLP Export Service Requests. The default value enables listening on all addresses.\",\n+                                \"displayName\": \"Address\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"counter-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Address\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delta\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Adjusts the counter by the specified delta for each flow file received. May be a positive or negative integer.\",\n-                                \"displayName\": \"Delta\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Maximum number of OTLP request resource elements included in each FlowFile produced\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"delta\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client Authentication\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"WANT\",\n+                                \"description\": \"Client authentication policy for TLS communication with HTTPS\",\n+                                \"displayName\": \"Client Authentication\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client Authentication\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"4317\",\n+                                \"description\": \"TCP port number on which to listen for OTLP Export Service Requests over HTTP and gRPC\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Queue Capacity\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Maximum number of OTLP request resource elements that can be received and queued\",\n+                                \"displayName\": \"Queue Capacity\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Queue Capacity\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"SSL Context Service enables TLS communication for HTTPS\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            },\n+                            \"Worker Threads\": {\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"Number of threads responsible for decoding and queuing incoming OTLP Export Service Requests\",\n+                                \"displayName\": \"Worker Threads\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Worker Threads\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The name of the counter to update/get.\",\n-                                \"name\": \"counterName\"\n-                            }\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Counter was updated/retrieved\",\n+                                \"description\": \"Export Service Requests containing OTLP Telemetry\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"counter\",\n-                            \"debug\",\n-                            \"instrumentation\"\n+                            \"OTLP\",\n+                            \"OTel\",\n+                            \"OpenTelemetry\",\n+                            \"logs\",\n+                            \"metrics\",\n+                            \"telemetry\",\n+                            \"traces\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.UpdateCounter\",\n-                        \"typeDescription\": \"This processor allows users to set specific counters and key points in their flow. It is useful for debugging and basic counting functions.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n+                        \"type\": \"org.apache.nifi.processors.opentelemetry.ListenOTLP\",\n+                        \"typeDescription\": \"Collect OpenTelemetry messages over HTTP or gRPC. Supports standard Export Service Request messages for logs, metrics, and traces. Implements OpenTelemetry OTLP Specification 1.0.0 with OTLP/gRPC and OTLP/HTTP. Provides protocol detection using the HTTP Content-Type header.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Content-Type set to application/json\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"OpenTelemetry Resource Type: LOGS, METRICS, or TRACES\",\n+                                \"name\": \"resource.type\"\n+                            },\n+                            {\n+                                \"description\": \"Count of resource elements included in messages\",\n+                                \"name\": \"resource.count\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-standard-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-compress-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-compress-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -123557,1795 +124100,1277 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"db-type\": {\n+                            \"Input Compression Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n+                                        \"description\": \"No Compression\",\n+                                        \"displayName\": \"no compression\",\n+                                        \"value\": \"no compression\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n+                                        \"description\": \"Use the [mime.type] attribute from the input FlowFile to determine the format\",\n+                                        \"displayName\": \"use mime.type attribute\",\n+                                        \"value\": \"use mime.type attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n+                                        \"description\": \"GZIP\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n+                                        \"description\": \"Deflate\",\n+                                        \"displayName\": \"deflate\",\n+                                        \"value\": \"deflate\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n+                                        \"description\": \"BZIP2\",\n+                                        \"displayName\": \"bzip2\",\n+                                        \"value\": \"bzip2\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n+                                        \"description\": \"XZ-LZMA2\",\n+                                        \"displayName\": \"xz-lzma2\",\n+                                        \"value\": \"xz-lzma2\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n+                                        \"description\": \"LZMA\",\n+                                        \"displayName\": \"lzma\",\n+                                        \"value\": \"lzma\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n+                                        \"description\": \"Snappy\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy-Framed\",\n+                                        \"displayName\": \"snappy-framed\",\n+                                        \"value\": \"snappy-framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZ4\",\n+                                        \"displayName\": \"lz4-framed\",\n+                                        \"value\": \"lz4-framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ZSTD\",\n+                                        \"displayName\": \"zstd\",\n+                                        \"value\": \"zstd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Brotli\",\n+                                        \"displayName\": \"brotli\",\n+                                        \"value\": \"brotli\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses.\",\n-                                \"displayName\": \"Database Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"The service for reading incoming flow files. The reader is only used to determine the schema of the records, the actual records will not be processed.\",\n-                                \"displayName\": \"Record Reader\",\n+                                \"defaultValue\": \"no compression\",\n+                                \"description\": \"The strategy to use for decompressing input FlowFiles\",\n+                                \"displayName\": \"Input Compression Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"Input Compression Strategy\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"updatedatabasetable-catalog-name\": {\n-                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n-                                \"displayName\": \"Catalog Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-catalog-name\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-create-table\": {\n+                            \"Output Compression Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Create a table with the given schema if it does not already exist\",\n-                                        \"displayName\": \"Create If Not Exists\",\n-                                        \"value\": \"Create If Not Exists\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"0\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"If the target does not already exist, log an error and route the flowfile to failure\",\n-                                        \"displayName\": \"Fail If Not Exists\",\n-                                        \"value\": \"Fail If Not Exists\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Fail If Not Exists\",\n-                                \"description\": \"Specifies how to process the target table when it does not exist (create it, fail, e.g.).\",\n-                                \"displayName\": \"Create Table Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-create-table\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"updatedatabasetable-dbcp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection(s) to the database\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-dbcp-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"updatedatabasetable-primary-keys\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1\",\n+                                        \"value\": \"1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Create If Not Exists\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Create Table Strategy\",\n-                                        \"propertyName\": \"updatedatabasetable-create-table\"\n-                                    }\n-                                ],\n-                                \"description\": \"A comma-separated list of record field names that uniquely identifies a row in the database. This property is only used if the specified table needs to be created, in which case the Primary Key Fields will be used to specify the primary keys of the newly-created table. IMPORTANT: Primary Key Fields must match the record field names exactly unless 'Quote Column Identifiers' is false and the database allows for case-insensitive column names. In practice it is best to specify Primary Key Fields that exactly match the record field names, and those will become the column names in the created table.\",\n-                                \"displayName\": \"Primary Key Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-primary-keys\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"updatedatabasetable-query-timeout\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Sets the number of seconds the driver will wait for a query to execute. A value of 0 means no timeout. NOTE: Non-zero values may not be supported by the driver.\",\n-                                \"displayName\": \"Query Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-query-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"updatedatabasetable-quoted-column-identifiers\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2\",\n+                                        \"value\": \"2\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"3\",\n+                                        \"value\": \"3\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables and/or forcing the record field names to match the column names exactly.\",\n-                                \"displayName\": \"Quote Column Identifiers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-quoted-column-identifiers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"updatedatabasetable-quoted-table-identifiers\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"4\",\n+                                        \"value\": \"4\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"5\",\n+                                        \"value\": \"5\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"6\",\n+                                        \"value\": \"6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"7\",\n+                                        \"value\": \"7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"8\",\n+                                        \"value\": \"8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"9\",\n+                                        \"value\": \"9\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name and/or forcing the value of the Table Name property to match the target table name exactly.\",\n-                                \"displayName\": \"Quote Table Identifiers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-quoted-table-identifiers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"updatedatabasetable-record-writer\": {\n+                                \"defaultValue\": \"1\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"zstd\",\n+                                            \"use mime.type attribute\",\n+                                            \"deflate\",\n+                                            \"brotli\",\n+                                            \"gzip\",\n+                                            \"xz-lzma2\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Update Field Names\",\n-                                        \"propertyName\": \"updatedatabasetable-update-field-names\"\n+                                        \"propertyDisplayName\": \"Output Compression Strategy\",\n+                                        \"propertyName\": \"Output Compression Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer should use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types. If Create Table Strategy is set 'Create If Not Exists', the Record Writer's output format must match the Record Reader's format in order for the data to be placed in the created table location. Note that this property is only used if 'Update Field Names' is set to true and the field names do not all match the column names exactly. If no update is needed for any field names (or 'Update Field Names' is false), the Record Writer is not used and instead the input FlowFile is routed to success or failure without modification.\",\n-                                \"displayName\": \"Record Writer\",\n+                                \"description\": \"The compression level for output FlowFiles for supported formats. A lower value results in faster processing but less compression; a value of 0 indicates no (that is, simple archiving) for gzip or minimal for xz-lzma2 compression. Higher levels can mean much larger memory usage such as the case with levels 7-9 for xz-lzma/2 so be careful relative to heap size.\",\n+                                \"displayName\": \"Output Compression Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"updatedatabasetable-schema-name\": {\n-                                \"description\": \"The name of the database schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly.\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"updatedatabasetable-table-name\": {\n-                                \"description\": \"The name of the database table to update. If the table does not exist, then it will either be created or an error thrown, depending on the value of the Create Table property.\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-table-name\",\n+                                \"name\": \"Output Compression Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-translate-field-names\": {\n+                            \"Output Compression Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"No Compression\",\n+                                        \"displayName\": \"no compression\",\n+                                        \"value\": \"no compression\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"GZIP\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Deflate\",\n+                                        \"displayName\": \"deflate\",\n+                                        \"value\": \"deflate\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BZIP2\",\n+                                        \"displayName\": \"bzip2\",\n+                                        \"value\": \"bzip2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"XZ-LZMA2\",\n+                                        \"displayName\": \"xz-lzma2\",\n+                                        \"value\": \"xz-lzma2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZMA\",\n+                                        \"displayName\": \"lzma\",\n+                                        \"value\": \"lzma\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy-Hadoop\",\n+                                        \"displayName\": \"snappy-hadoop\",\n+                                        \"value\": \"snappy-hadoop\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy-Framed\",\n+                                        \"displayName\": \"snappy-framed\",\n+                                        \"value\": \"snappy-framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZ4\",\n+                                        \"displayName\": \"lz4-framed\",\n+                                        \"value\": \"lz4-framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ZSTD\",\n+                                        \"displayName\": \"zstd\",\n+                                        \"value\": \"zstd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Brotli\",\n+                                        \"displayName\": \"brotli\",\n+                                        \"value\": \"brotli\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, the Processor will attempt to translate field names into the corresponding column names for the table specified, for the purposes of determining whether the field name exists as a column in the target table. NOTE: If the target table does not exist and is to be created, this property is ignored and the field names will be used as-is. If false, the field names must match the column names exactly, or the column may not be found and instead an error my be reported that the column already exists.\",\n-                                \"displayName\": \"Translate Field Names\",\n+                                \"defaultValue\": \"no compression\",\n+                                \"description\": \"The strategy to use for compressing output FlowFiles\",\n+                                \"displayName\": \"Output Compression Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-translate-field-names\",\n+                                \"name\": \"Output Compression Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-update-field-names\": {\n+                            \"Output Filename Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Retain the filename attribute value from the input FlowFile\",\n+                                        \"displayName\": \"Original\",\n+                                        \"value\": \"ORIGINAL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Remove the filename extension when decompressing and add a new extension for compressed output FlowFiles\",\n+                                        \"displayName\": \"Updated\",\n+                                        \"value\": \"UPDATED\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"This property indicates whether to update the output schema such that the field names are set to the exact column names from the specified table. This should be used if the incoming record field names may not match the table's column names in terms of upper- and lower-case. For example, this property should be set to true if the output FlowFile is destined for Oracle e.g., which expects the field names to match the column names exactly. NOTE: The value of the 'Translate Field Names' property is ignored when updating field names; instead they are updated to match the column name as returned by the database.\",\n-                                \"displayName\": \"Update Field Names\",\n+                                \"defaultValue\": \"UPDATED\",\n+                                \"description\": \"Processing strategy for filename attribute on output FlowFiles\",\n+                                \"displayName\": \"Output Filename Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-update-field-names\",\n+                                \"name\": \"Output Filename Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If the Decompression Format is set to 'use mime.type attribute', this attribute is used to determine the decompression type. Otherwise, this attribute is ignored.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile containing records routed to this relationship after the record has been successfully transmitted to the database.\",\n+                                \"description\": \"FlowFiles will be transferred to the success relationship on compression modification success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile containing records routed to this relationship if the record could not be transmitted to the database.\",\n+                                \"description\": \"FlowFiles will be transferred to the failure relationship on compression modification errors\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"CPU\"\n+                            },\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"alter\",\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"metadata\",\n-                            \"table\",\n-                            \"update\"\n+                            \"brotli\",\n+                            \"bzip2\",\n+                            \"compress\",\n+                            \"content\",\n+                            \"deflate\",\n+                            \"gzip\",\n+                            \"lz4-framed\",\n+                            \"lzma\",\n+                            \"recompress\",\n+                            \"snappy\",\n+                            \"snappy framed\",\n+                            \"snappy-hadoop\",\n+                            \"xz-lzma2\",\n+                            \"zstd\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.UpdateDatabaseTable\",\n-                        \"typeDescription\": \"This processor uses a JDBC connection and incoming records to generate any database table changes needed to support the incoming records. It expects a 'flat' record layout, meaning none of the top-level record fields has nested fields that are intended to become columns themselves.\",\n+                        \"type\": \"org.apache.nifi.processors.compress.ModifyCompression\",\n+                        \"typeDescription\": \"Changes the compression algorithm used to compress the contents of a FlowFile by decompressing the contents of FlowFiles using a user-specified compression algorithm and recompressing the contents using the specified compression format properties. This processor operates in a very memory efficient way so very large objects well beyond the heap size are generally fine to process\",\n                         \"version\": \"1.27.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This attribute is written on the flow files routed to the 'success' and 'failure' relationships, and contains the target table name.\",\n-                                \"name\": \"output.table\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is written on the flow files routed to the 'success' and 'failure' relationships, and contains the path on the file system to the table (or partition location if the table is partitioned).\",\n-                                \"name\": \"output.path\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer, only if a Record Writer is specified and Update Field Names is 'true'.\",\n+                                \"description\": \"The appropriate MIME Type is set based on the value of the Compression Format property. If the Compression Format is 'no compression' this attribute is removed as the MIME Type is no longer known.\",\n                                 \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the number of records in the FlowFile, only if a Record Writer is specified and Update Field Names is 'true'.\",\n-                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-flow-registry-client-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-redis-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-redis-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Allows users to specify values to use to replace fields in the record that match the RecordPath.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A RecordPath.\",\n-                                \"value\": \"The value to use to replace fields in the record that match the RecordPath\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Cluster Max Redirects\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The maximum number of redirects that can be performed when clustered.\",\n+                                \"displayName\": \"Cluster Max Redirects\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"Cluster Max Redirects\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Communication Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The timeout to use when attempting to communicate with Redis.\",\n+                                \"displayName\": \"Communication Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"Communication Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"replacement-value-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The value entered for a Property (after Expression Language has been evaluated) is the desired value to update the Record Fields with. Expression Language may reference variables 'field.name', 'field.type', and 'field.value' to access information about the field and the value of the field being evaluated.\",\n-                                        \"displayName\": \"Literal Value\",\n-                                        \"value\": \"literal-value\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The value entered for a Property (after Expression Language has been evaluated) is not the literal value to use but rather is a Record Path that should be evaluated against the Record, and the result of the RecordPath will be used to update the Record. Note that if this option is selected, and the Record Path results in multiple values for a given Record, the input FlowFile will be routed to the 'failure' Relationship.\",\n-                                        \"displayName\": \"Record Path Value\",\n-                                        \"value\": \"record-path-value\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"literal-value\",\n-                                \"description\": \"Specifies how to interpret the configured replacement values\",\n-                                \"displayName\": \"Replacement Value Strategy\",\n+                            \"Connection String\": {\n+                                \"description\": \"The connection string for Redis. In a standalone instance this value will be of the form hostname:port. In a sentinel instance this value will be the comma-separated list of sentinels, such as host1:port1,host2:port2,host3:port3. In a clustered instance this value will be the comma-separated list of cluster masters, such as host1:port,host2:port,host3:port.\",\n+                                \"displayName\": \"Connection String\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"replacement-value-strategy\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Connection String\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ConvertRecord\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"log\",\n-                            \"logs\",\n-                            \"record\",\n-                            \"schema\",\n-                            \"text\",\n-                            \"update\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.UpdateRecord\",\n-                        \"typeDescription\": \"Updates the contents of a FlowFile that contains Record-oriented data (i.e., data that can be read via a RecordReader and written by a RecordWriter). This Processor requires that at least one user-defined Property be added. The name of the Property should indicate a RecordPath that determines the field that should be updated. The value of the Property is either a replacement value (optionally making use of the Expression Language) or is itself a RecordPath that extracts a value from the Record. Whether the Property value is determined to be a RecordPath or a literal value depends on the configuration of the <Replacement Value Strategy> Property.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"This attribute provides the current row index and is only available inside the literal value expression.\",\n-                                \"name\": \"record.index\"\n                             },\n-                            {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"validate-csv-delimiter\": {\n-                                \"defaultValue\": \",\",\n-                                \"description\": \"Character used as 'delimiter' in the incoming data. Example: ,\",\n-                                \"displayName\": \"Delimiter character\",\n+                            \"Database Index\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The database index to be used by connections created from this connection pool. See the databases property in redis.conf, by default databases 0-15 will be available.\",\n+                                \"displayName\": \"Database Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-delimiter\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Database Index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-eol\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"description\": \"Symbols used as 'end of line' in the incoming data. Example: \\\\n\",\n-                                \"displayName\": \"End of line symbols\",\n+                            \"Password\": {\n+                                \"description\": \"The password used to authenticate to the Redis server. See the 'requirepass' property in redis.conf.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-eol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"validate-csv-header\": {\n+                            \"Pool - Block When Exhausted\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"True if the incoming flow file contains a header to ignore, false otherwise.\",\n-                                \"displayName\": \"Header\",\n+                                \"description\": \"Whether or not clients should block and wait when trying to obtain a connection from the pool when the pool has no available connections. Setting this to false means an error will occur immediately when a client requests a connection and none are available.\",\n+                                \"displayName\": \"Pool - Block When Exhausted\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"validate-csv-header\",\n+                                \"name\": \"Pool - Block When Exhausted\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-quote\": {\n-                                \"defaultValue\": \"\\\"\",\n-                                \"description\": \"Character used as 'quote' in the incoming data. Example: \\\"\",\n-                                \"displayName\": \"Quote character\",\n+                            \"Pool - Max Idle\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of idle connections that can be held in the pool, or a negative value if there is no limit.\",\n+                                \"displayName\": \"Pool - Max Idle\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-quote\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Pool - Max Idle\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-schema\": {\n-                                \"description\": \"The schema to be used for validation. Is expected a comma-delimited string representing the cell processors to apply. The following cell processors are allowed in the schema definition: [ParseBigDecimal, ParseBool, ParseChar, ParseDate, ParseDouble, ParseInt, ParseLong, Optional, DMinMax, Equals, ForbidSubStr, LMinMax, NotNull, Null, RequireHashCode, RequireSubStr, Strlen, StrMinMax, StrNotNullOrEmpty, StrRegEx, Unique, UniqueHashCode, IsIncludedIn]. Note: cell processors cannot be nested except with Optional.\",\n-                                \"displayName\": \"Schema\",\n+                            \"Pool - Max Total\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of connections that can be allocated by the pool (checked out to clients, or idle awaiting checkout). A negative value indicates that there is no limit.\",\n+                                \"displayName\": \"Pool - Max Total\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-schema\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Pool - Max Total\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"In case an error is found, the input CSV file will be split into two FlowFiles: one routed to the 'valid' relationship containing all the correct lines and one routed to the 'invalid' relationship containing all the incorrect lines. Take care if choosing this option while using Unique cell processors in schema definition:the first occurrence will be considered valid and the next ones as invalid.\",\n-                                        \"displayName\": \"Line by line validation\",\n-                                        \"value\": \"Line by line validation\"\n-                                    },\n-                                    {\n-                                        \"description\": \"As soon as an error is found in the CSV file, the validation will stop and the whole flow file will be routed to the 'invalid' relationship. This option offers best performances.\",\n-                                        \"displayName\": \"FlowFile validation\",\n-                                        \"value\": \"FlowFile validation\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FlowFile validation\",\n-                                \"description\": \"Strategy to apply when routing input files to output relationships.\",\n-                                \"displayName\": \"Validation strategy\",\n+                            \"Pool - Max Wait Time\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for an available connection when Block When Exhausted is set to true.\",\n+                                \"displayName\": \"Pool - Max Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"validate-csv-strategy\",\n+                                \"name\": \"Pool - Max Wait Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-violations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the validation.error.message attribute would include the list of all the violations for the first invalid line. Note that setting this property to true would slightly decrease the performances as all columns would be validated. If false, a line is invalid as soon as a column is found violating the specified constraint and only this violation for the first invalid line will be included in the validation.error.message attribute.\",\n-                                \"displayName\": \"Include all violations\",\n+                            \"Pool - Min Evictable Idle Time\": {\n+                                \"defaultValue\": \"60 seconds\",\n+                                \"description\": \"The minimum amount of time an object may sit idle in the pool before it is eligible for eviction.\",\n+                                \"displayName\": \"Pool - Min Evictable Idle Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"validate-csv-violations\",\n+                                \"name\": \"Pool - Min Evictable Idle Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are successfully validated against the schema are routed to this relationship\",\n-                                \"name\": \"valid\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n-                                \"name\": \"invalid\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"csv\",\n-                            \"schema\",\n-                            \"validation\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ValidateCsv\",\n-                        \"typeDescription\": \"Validates the contents of FlowFiles against a user-specified CSV schema. Take a look at the additional documentation of this processor for some schema examples.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If line by line validation, number of valid lines extracted from the source data\",\n-                                \"name\": \"count.valid.lines\"\n-                            },\n-                            {\n-                                \"description\": \"If line by line validation, number of invalid lines extracted from the source data\",\n-                                \"name\": \"count.invalid.lines\"\n-                            },\n-                            {\n-                                \"description\": \"If line by line validation, total number of lines in the source data\",\n-                                \"name\": \"count.total.lines\"\n                             },\n-                            {\n-                                \"description\": \"For flow files routed to invalid, message of the first validation error\",\n-                                \"name\": \"validation.error.message\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Schema configuration can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"JSON Schema\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCHEMA_CONTENT_PROPERTY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"Schema Access Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A URL or file path to the JSON schema or the actual JSON schema content\",\n-                                \"displayName\": \"JSON Schema\",\n+                            \"Pool - Min Idle\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The target for the minimum number of idle connections to maintain in the pool. If the configured value of Min Idle is greater than the configured value for Max Idle, then the value of Max Idle will be used instead.\",\n+                                \"displayName\": \"Pool - Min Idle\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON Schema\",\n+                                \"name\": \"Pool - Min Idle\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"JSON Schema Registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCHEMA_NAME_PROPERTY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"Schema Access Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the JSON Schema Registry\",\n-                                \"displayName\": \"JSON Schema Registry\",\n+                            \"Pool - Num Tests Per Eviction Run\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The number of connections to tests per eviction attempt. A negative value indicates to test all connections.\",\n+                                \"displayName\": \"Pool - Num Tests Per Eviction Run\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON Schema Registry\",\n+                                \"name\": \"Pool - Num Tests Per Eviction Run\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.JsonSchemaRegistry\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"JSON Schema Version\": {\n+                            \"Pool - Test On Borrow\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Draft Version 4\",\n-                                        \"displayName\": \"Draft 4\",\n-                                        \"value\": \"DRAFT_4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Draft Version 6\",\n-                                        \"displayName\": \"Draft 6\",\n-                                        \"value\": \"DRAFT_6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Draft Version 7\",\n-                                        \"displayName\": \"Draft 7\",\n-                                        \"value\": \"DRAFT_7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Draft Version 2019-09\",\n-                                        \"displayName\": \"Draft 2019-09\",\n-                                        \"value\": \"DRAFT_2019_09\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Draft Version 2020-12\",\n-                                        \"displayName\": \"Draft 2020-12\",\n-                                        \"value\": \"DRAFT_2020_12\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DRAFT_2020_12\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCHEMA_CONTENT_PROPERTY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"Schema Access Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The JSON schema specification\",\n-                                \"displayName\": \"JSON Schema Version\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not connections should be tested upon borrowing from the pool.\",\n+                                \"displayName\": \"Pool - Test On Borrow\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON Schema Version\",\n+                                \"name\": \"Pool - Test On Borrow\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Schema Access Strategy\": {\n+                            \"Pool - Test On Create\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured JSON Schema Registry Service.\",\n-                                        \"displayName\": \"Schema Name Property\",\n-                                        \"value\": \"SCHEMA_NAME_PROPERTY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"A URL or file path to the JSON schema or the actual JSON schema is specified by the 'JSON Schema' Property. No matter how the JSON schema is specified, it must be a valid JSON schema\",\n-                                        \"displayName\": \"JSON Schema Property\",\n-                                        \"value\": \"SCHEMA_CONTENT_PROPERTY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SCHEMA_CONTENT_PROPERTY\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not connections should be tested upon creation.\",\n+                                \"displayName\": \"Pool - Test On Create\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Access Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Schema Name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCHEMA_NAME_PROPERTY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"Schema Access Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Schema Name\",\n+                                \"name\": \"Pool - Test On Create\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are successfully validated against the schema are routed to this relationship\",\n-                                \"name\": \"valid\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n-                                \"name\": \"invalid\"\n                             },\n-                            {\n-                                \"description\": \"FlowFiles that cannot be read as JSON are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Validating JSON requires reading FlowFile content into memory\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"JSON\",\n-                            \"schema\",\n-                            \"validation\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ValidateJson\",\n-                        \"typeDescription\": \"Validates the contents of FlowFiles against a configurable JSON Schema. See json-schema.org for specification standards. This Processor does not support input containing multiple JSON objects, such as newline-delimited JSON. If the input FlowFile contains newline-delimited JSON, only the first line will be validated.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the flow file is routed to the invalid relationship , this attribute will contain the error message resulting from the validation failure.\",\n-                                \"name\": \"json.validation.errors\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"allow-extra-fields\": {\n+                            \"Pool - Test On Return\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If the incoming data has fields that are not present in the schema, this property determines whether or not the Record is valid. If true, the Record is still valid. If false, the Record will be invalid due to the extra fields.\",\n-                                \"displayName\": \"Allow Extra Fields\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not connections should be tested upon returning to the pool.\",\n+                                \"displayName\": \"Pool - Test On Return\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"allow-extra-fields\",\n+                                \"name\": \"Pool - Test On Return\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"coerce-types\": {\n+                            \"Pool - Test While Idle\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, the processor will coerce every field to the type specified in the Reader's schema. If the value of a field cannot be coerced to the type, the field will be skipped (will not be read from the input data), thus will not appear in the output. If not enabled, then every field will appear in the output but their types may differ from what is specified in the schema. For details please see the Additional Details page of the processor's Help. This property controls how the data is read by the specified Record Reader.\",\n-                                \"displayName\": \"Force Types From Reader's Schema\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not connections should be tested while idle.\",\n+                                \"displayName\": \"Pool - Test While Idle\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"coerce-types\",\n+                                \"name\": \"Pool - Test While Idle\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"invalid-record-writer\": {\n-                                \"description\": \"If specified, this Controller Service will be used to write out any records that are invalid. If not specified, the writer specified by the \\\"Record Writer\\\" property will be used with the schema used to read the input records. This is useful, for example, when the configured Record Writer cannot write data that does not adhere to its schema (as is the case with Avro) or when it is desirable to keep invalid records in their original format while converting valid records to another format.\",\n-                                \"displayName\": \"Record Writer for Invalid Records\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"invalid-record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"maximum-validation-details-length\": {\n-                                \"defaultValue\": \"1024\",\n-                                \"description\": \"Specifies the maximum number of characters that validation details value can have. Any characters beyond the max will be truncated. This property is only used if 'Validation Details Attribute Name' is set\",\n-                                \"displayName\": \"Maximum Validation Details Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"maximum-validation-details-length\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records. Regardless of the Controller Service schema access configuration, the schema that is used to validate record is used to write the valid results.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Pool - Time Between Eviction Runs\": {\n+                                \"defaultValue\": \"30 seconds\",\n+                                \"description\": \"The amount of time between attempting to evict idle connections from the pool.\",\n+                                \"displayName\": \"Pool - Time Between Eviction Runs\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"Pool - Time Between Eviction Runs\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.27.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"Redis Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The schema to validate the data against is determined by asking the configured Record Reader for its schema\",\n-                                        \"displayName\": \"Use Reader's Schema\",\n-                                        \"value\": \"reader-schema\"\n+                                        \"description\": \"A single standalone Redis instance.\",\n+                                        \"displayName\": \"Standalone\",\n+                                        \"value\": \"Standalone\"\n                                     },\n                                     {\n-                                        \"description\": \"The schema to validate the data against is determined by looking at the 'Schema Name' Property and looking up the schema in the configured Schema Registry\",\n-                                        \"displayName\": \"Use Schema Name Property\",\n-                                        \"value\": \"schema-name-property\"\n+                                        \"description\": \"Redis Sentinel which provides high-availability. Described further at https://redis.io/topics/sentinel\",\n+                                        \"displayName\": \"Sentinel\",\n+                                        \"value\": \"Sentinel\"\n                                     },\n                                     {\n-                                        \"description\": \"The schema to validate the data against is determined by looking at the 'Schema Text' Property and parsing the schema as an Avro schema\",\n-                                        \"displayName\": \"Use Schema Text Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"Clustered Redis which provides sharding and replication. Described further at https://redis.io/topics/cluster-spec\",\n+                                        \"displayName\": \"Cluster\",\n+                                        \"value\": \"Cluster\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"reader-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that should be used to validate records\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"Standalone\",\n+                                \"description\": \"The type of Redis being communicated with - standalone, sentinel, or clustered.\",\n+                                \"displayName\": \"Redis Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"Redis Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry. This is necessary only if the Schema Access Strategy is set to \\\"Use 'Schema Name' Property\\\".\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                            \"Sentinel Master\": {\n+                                \"description\": \"The name of the sentinel master, require when Mode is set to Sentinel\",\n+                                \"displayName\": \"Sentinel Master\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Sentinel Master\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"strict-type-checking\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If the incoming data has a Record where a field is not of the correct type, this property determines how to handle the Record. If true, the Record will be considered invalid. If false, the Record will be considered valid and the field will be coerced into the correct type (if possible, according to the type coercion supported by the Record Writer). This property controls how the data is validated against the validation schema.\",\n-                                \"displayName\": \"Strict Type Checking\",\n+                            \"Sentinel Password\": {\n+                                \"description\": \"The password used to authenticate to the Redis Sentinel server. See the 'requirepass' and 'sentinel sentinel-pass' properties in sentinel.conf.\",\n+                                \"displayName\": \"Sentinel Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"strict-type-checking\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Sentinel Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Sentinel Username\": {\n+                                \"description\": \"The username used to authenticate to the Redis sentinel server.\",\n+                                \"displayName\": \"Sentinel Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Sentinel Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"validation-details-attribute-name\": {\n-                                \"description\": \"If specified, when a validation error occurs, this attribute name will be used to leave the details. The number of characters will be limited by the property 'Maximum Validation Details Length'.\",\n-                                \"displayName\": \"Validation Details Attribute Name\",\n+                            \"Username\": {\n+                                \"description\": \"The username used to authenticate to the Redis server.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"validation-details-attribute-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Records that are valid according to the schema will be routed to this relationship\",\n-                                \"name\": \"valid\"\n-                            },\n-                            {\n-                                \"description\": \"Records that are not valid according to the schema will be routed to this relationship\",\n-                                \"name\": \"invalid\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"If the records cannot be read, validated, or written, for any reason, the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-redis-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"record\",\n-                            \"schema\",\n-                            \"validate\"\n+                            \"cache\",\n+                            \"redis\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ValidateRecord\",\n-                        \"typeDescription\": \"Validates the Records of an incoming FlowFile against a given schema. All records that adhere to the schema are routed to the \\\"valid\\\" relationship while records that do not adhere to the schema are routed to the \\\"invalid\\\" relationship. It is therefore possible for a single incoming FlowFile to be split into two individual FlowFiles if some records are valid according to the schema and others are not. Any FlowFile that is routed to the \\\"invalid\\\" relationship will emit a ROUTE Provenance Event with the Details field populated to explain why records were invalid. In addition, to gain further explanation of why records were invalid, DEBUG-level logging can be enabled for the \\\"org.apache.nifi.processors.standard.ValidateRecord\\\" logger.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile routed to a relationship\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.redis.service.RedisConnectionPoolService\",\n+                        \"typeDescription\": \"A service that provides connections to Redis.\",\n+                        \"version\": \"1.27.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-redis-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Schema configuration can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Schema File\": {\n-                                \"description\": \"The file path or URL to the XSD Schema file that is to be used for validation. If this property is blank, only XML syntax/structure will be validated.\",\n-                                \"displayName\": \"Schema File\",\n+                            \"redis-cache-ttl\": {\n+                                \"defaultValue\": \"0 secs\",\n+                                \"description\": \"Indicates how long the data should exist in Redis. Setting '0 secs' would mean the data would exist forever\",\n+                                \"displayName\": \"TTL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Schema File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"redis-cache-ttl\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"XML Source Attribute\": {\n-                                \"description\": \"The name of the attribute containing XML to be validated. If this property is blank, the FlowFile content will be validated.\",\n-                                \"displayName\": \"XML Source Attribute\",\n+                            \"redis-connection-pool\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Redis Connection Pool\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"XML Source Attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"redis-connection-pool\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-redis-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully validated against the schema, if provided, or verified to be well-formed XML are routed to this relationship\",\n-                                \"name\": \"valid\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"version\": \"1.27.0\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that are not valid according to the specified schema or contain invalid XML are routed to this relationship\",\n-                                \"name\": \"invalid\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"redis\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.redis.service.RedisDistributedMapCacheClientService\",\n+                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Redis as the backing cache. This service relies on the WATCH, MULTI, and EXEC commands in Redis, which are not fully supported when Redis is clustered. As a result, this service can only be used with a Redis Connection Pool that is configured for standalone or sentinel mode. Sentinel mode can be used to provide high-availability configurations.\",\n+                        \"version\": \"1.27.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-redis-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"e0c4461\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"redis-cache-ttl\": {\n+                                \"defaultValue\": \"0 secs\",\n+                                \"description\": \"Indicates how long the data should exist in Redis. Setting '0 secs' would mean the data would exist forever\",\n+                                \"displayName\": \"TTL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"redis-cache-ttl\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"redis-connection-pool\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Redis Connection Pool\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"redis-connection-pool\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-redis-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"While this processor supports processing XML within attributes, it is strongly discouraged to hold large amounts of data in attributes. In general, attribute values should be as small as possible and hold no more than a couple hundred characters.\",\n-                                \"resource\": \"MEMORY\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"1.27.0\"\n                             }\n                         ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"schema\",\n-                            \"validation\",\n-                            \"xml\",\n-                            \"xsd\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"redis\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ValidateXml\",\n-                        \"typeDescription\": \"Validates XML contained in a FlowFile. By default, the XML is contained in the FlowFile content. If the 'XML Source Attribute' property is set, the XML to be validated is contained in the specified attribute. It is not recommended to use attributes to hold large XML documents; doing so could adversely affect system performance. Full schema validation is performed if the processor is configured with the XSD schema details. Otherwise, the only validation performed is to ensure the XML syntax is correct and well-formed, e.g. all opening tags are properly closed.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the flow file is routed to the invalid relationship the attribute will contain the error message resulting from the validation failure.\",\n-                                \"name\": \"validatexml.invalid.error\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.redis.service.SimpleRedisDistributedMapCacheClientService\",\n+                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Redis as the backing cache. This service is intended to be used when a non-atomic DistributedMapCacheClient is required.\",\n+                        \"version\": \"1.27.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.27.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-cdc-mysql-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cdc-mysql-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"e0c4461\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"attribute-copy-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"When cached attributes are copied onto released FlowFiles, they replace any matching attributes.\",\n-                                        \"displayName\": \"Replace if present\",\n-                                        \"value\": \"replace\"\n-                                    },\n+                            \"SSL Context Service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Attributes on released FlowFiles are not overwritten by copied cached attributes.\",\n-                                        \"displayName\": \"Keep original\",\n-                                        \"value\": \"keeporiginal\"\n+                                        \"dependentValues\": [\n+                                            \"PREFERRED\",\n+                                            \"VERIFY_IDENTITY\",\n+                                            \"REQUIRED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SSL Mode\",\n+                                        \"propertyName\": \"SSL Mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"keeporiginal\",\n-                                \"description\": \"Specifies how to handle attributes copied from FlowFiles entering the Notify processor\",\n-                                \"displayName\": \"Attribute Copy Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-copy-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"distributed-cache-service\": {\n-                                \"description\": \"The Controller Service that is used to check for release signals from a corresponding Notify processor\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                                \"description\": \"SSL Context Service supporting encrypted socket communication\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-cache-service\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.27.0\"\n                                 }\n                             },\n-                            \"expiration-duration\": {\n-                                \"defaultValue\": \"10 min\",\n-                                \"description\": \"Indicates the duration after which waiting FlowFiles will be routed to the 'expired' relationship\",\n-                                \"displayName\": \"Expiration Duration\",\n+                            \"SSL Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Connect without TLS\",\n+                                        \"displayName\": \"DISABLED\",\n+                                        \"value\": \"DISABLED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Connect with TLS when server support enabled, otherwise connect without TLS\",\n+                                        \"displayName\": \"PREFERRED\",\n+                                        \"value\": \"PREFERRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Connect with TLS or fail when server support not enabled\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Connect with TLS or fail when server support not enabled. Verify server hostname matches presented X.509 certificate names or fail when not matched\",\n+                                        \"displayName\": \"VERIFY_IDENTITY\",\n+                                        \"value\": \"VERIFY_IDENTITY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DISABLED\",\n+                                \"description\": \"SSL Mode used when SSL Context Service configured supporting certificate verification options\",\n+                                \"displayName\": \"SSL Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"expiration-duration\",\n+                                \"name\": \"SSL Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"releasable-flowfile-count\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the releasable FlowFile count. This specifies how many FlowFiles can be released when a target count reaches target signal count. Zero (0) has a special meaning, any number of FlowFiles can be released as long as signal count matches target.\",\n-                                \"displayName\": \"Releasable FlowFile Count\",\n+                            \"capture-change-mysql-db-name-pattern\": {\n+                                \"description\": \"A regular expression (regex) for matching databases (or schemas, depending on your RDBMS' terminology) against the list of CDC events. The regex must match the database name as it is stored in the RDBMS. If the property is not set, the database name will not be used to filter the CDC events. NOTE: DDL events, even if they affect different databases, are associated with the database used by the session to execute the DDL. This means if a connection is made to one database, but the DDL is issued against another, then the connected database will be the one matched against the specified pattern.\",\n+                                \"displayName\": \"Database/Schema Name Pattern\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"releasable-flowfile-count\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"capture-change-mysql-db-name-pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"release-signal-id\": {\n-                                \"description\": \"A value that specifies the key to a specific release signal cache. To decide whether the FlowFile that is being processed by the Wait processor should be sent to the 'success' or the 'wait' relationship, the processor checks the signals in the cache specified by this key.\",\n-                                \"displayName\": \"Release Signal Identifier\",\n+                            \"capture-change-mysql-dist-map-cache-client\": {\n+                                \"description\": \"This is a legacy property that is no longer used to store table information, the processor will handle the table information (column names, types, etc.)\",\n+                                \"displayName\": \"Distributed Map Cache Client - unused\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"release-signal-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"capture-change-mysql-dist-map-cache-client\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.27.0\"\n+                                }\n                             },\n-                            \"signal-counter-name\": {\n-                                \"description\": \"Within the cache (specified by the Release Signal Identifier) the signals may belong to different counters. If this property is specified, the processor checks the number of signals in the cache that belong to this particular counter. If not specified, the processor checks the total number of signals in the cache.\",\n-                                \"displayName\": \"Signal Counter Name\",\n+                            \"capture-change-mysql-driver-class\": {\n+                                \"defaultValue\": \"com.mysql.jdbc.Driver\",\n+                                \"description\": \"The class name of the MySQL database driver class\",\n+                                \"displayName\": \"MySQL Driver Class Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"signal-counter-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-driver-class\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"target-signal-count\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of signals that need to be in the cache (specified by the Release Signal Identifier) in order for the FlowFile processed by the Wait processor to be sent to the \\u2018success\\u2019 relationship. If the number of signals in the cache has reached this number, the FlowFile is routed to the 'success' relationship and the number of signals in the cache is decreased by this value. If Signal Counter Name is specified, this processor checks a particular counter, otherwise checks against the total number of signals in the cache.\",\n-                                \"displayName\": \"Target Signal Count\",\n+                            \"capture-change-mysql-driver-locations\": {\n+                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the MySQL driver JAR and its dependencies (if any). For example '/var/tmp/mysql-connector-java-5.1.38-bin.jar'\",\n+                                \"displayName\": \"MySQL Driver Location(s)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"target-signal-count\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-driver-locations\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"wait-buffer-count\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Specify the maximum number of incoming FlowFiles that can be buffered to check whether it can move forward. The more buffer can provide the better performance, as it reduces the number of interactions with cache service by grouping FlowFiles by signal identifier. Only a signal identifier can be processed at a processor execution.\",\n-                                \"displayName\": \"Wait Buffer Count\",\n+                            \"capture-change-mysql-hosts\": {\n+                                \"description\": \"A list of hostname (and optional port) entries corresponding to nodes in a MySQL cluster. The entries should be comma separated using a colon (if the port is to be specified) such as host1:port,host2:port,....  For example mysql.myhost.com:3306. The port need not be specified, when omitted the default MySQL port value of 3306 will be used. This processor will attempt to connect to the hosts in the list in order. If one node goes down and failover is enabled for the cluster, then the processor will connect to the active node (assuming its node entry is specified in this property).\",\n+                                \"displayName\": \"MySQL Nodes\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"wait-buffer-count\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-hosts\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"wait-mode\": {\n+                            \"capture-change-mysql-include-begin-commit\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Transfer a FlowFile to the 'wait' relationship when whose release signal has not been notified yet. This mode allows other incoming FlowFiles to be enqueued by moving FlowFiles into the wait relationship. It is recommended to set a prioritizer (for instance First In First Out) on the 'wait' relationship.\",\n-                                        \"displayName\": \"Transfer to wait relationship\",\n-                                        \"value\": \"wait\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Transfer a FlowFile to the upstream connection where it comes from when whose release signal has not been notified yet. This mode helps keeping upstream connection being full so that the upstream source processor will not be scheduled while back-pressure is active and limit incoming FlowFiles. \",\n-                                        \"displayName\": \"Keep in the upstream connection\",\n-                                        \"value\": \"keep\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"wait\",\n-                                \"description\": \"Specifies how to handle a FlowFile waiting for a notify signal\",\n-                                \"displayName\": \"Wait Mode\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether to emit events corresponding to a BEGIN or COMMIT event in the binary log. Set to true if the BEGIN/COMMIT events are necessary in the downstream flow, otherwise set to false, which suppresses generation of these events and can increase flow performance.\",\n+                                \"displayName\": \"Include Begin/Commit Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"wait-mode\",\n+                                \"name\": \"capture-change-mysql-include-begin-commit\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"wait-penalty-duration\": {\n-                                \"description\": \"If configured, after a signal identifier got processed but did not meet the release criteria, the signal identifier is penalized and FlowFiles having the signal identifier will not be processed again for the specified period of time, so that the signal identifier will not block others to be processed. This can be useful for use cases where a Wait processor is expected to process multiple signal identifiers, and each signal identifier has multiple FlowFiles, and also the order of releasing FlowFiles is important within a signal identifier. The FlowFile order can be configured with Prioritizers. IMPORTANT: There is a limitation of number of queued signals can be processed, and Wait processor may not be able to check all queued signal ids. See additional details for the best practice.\",\n-                                \"displayName\": \"Wait Penalty Duration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"wait-penalty-duration\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.Notify\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile that has exceeded the configured Expiration Duration will be routed to this relationship\",\n-                                \"name\": \"expired\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile with a matching release signal in the cache will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile with no matching release signal in the cache will be routed to this relationship\",\n-                                \"name\": \"wait\"\n-                            },\n-                            {\n-                                \"description\": \"When the cache cannot be reached, or if the Release Signal Identifier evaluates to null or empty, FlowFiles will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"hold\",\n-                            \"map\",\n-                            \"release\",\n-                            \"signal\",\n-                            \"wait\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.Wait\",\n-                        \"typeDescription\": \"Routes incoming FlowFiles to the 'wait' relationship until a matching release signal is stored in the distributed cache from a corresponding Notify processor. When a matching release signal is identified, a waiting FlowFile is routed to the 'success' relationship. The release signal entry is then removed from the cache. The attributes of the FlowFile that produced the release signal are copied to the waiting FlowFile if the Attribute Cache Regex property of the corresponding Notify processor is set properly. If there are multiple release signals in the cache identified by the Release Signal Identifier, and the Notify processor is configured to copy the FlowFile attributes to the cache, then the FlowFile passing the Wait processor receives the union of the attributes of the FlowFiles that produced the release signals in the cache (identified by Release Signal Identifier). Waiting FlowFiles will be routed to 'expired' if they exceed the Expiration Duration. If you need to wait for more than one signal, specify the desired number of signals via the 'Target Signal Count' property. This is particularly useful with processors that split a source FlowFile into multiple fragments, such as SplitText. In order to wait for all fragments to be processed, connect the 'original' relationship to a Wait processor, and the 'splits' relationship to a corresponding Notify processor. Configure the Notify and Wait processors to use the '${fragment.identifier}' as the value of 'Release Signal Identifier', and specify '${fragment.count}' as the value of 'Target Signal Count' in the Wait processor.It is recommended to use a prioritizer (for instance First In First Out) when using the 'wait' relationship as a loop.\",\n-                        \"version\": \"1.27.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All FlowFiles will have an attribute 'wait.start.timestamp', which sets the initial epoch timestamp when the file first entered this processor.  This is used to determine the expiration time of the FlowFile.  This attribute is not written when the FlowFile is transferred to failure, expired or success\",\n-                                \"name\": \"wait.start.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The name of each counter for which at least one signal has been present in the cache since the last time the cache was empty gets copied to the current FlowFile as an attribute.\",\n-                                \"name\": \"wait.counter.<counterName>\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Show Deltas\": {\n+                            \"capture-change-mysql-include-ddl-events\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not to show the difference in values between the current status and the previous status\",\n-                                \"displayName\": \"Show Deltas\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether to emit events corresponding to Data Definition Language (DDL) events such as ALTER TABLE, TRUNCATE TABLE, e.g. in the binary log. Set to true if the DDL events are desired/necessary in the downstream flow, otherwise set to false, which suppresses generation of these events and can increase flow performance.\",\n+                                \"displayName\": \"Include DDL Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Show Deltas\",\n+                                \"name\": \"capture-change-mysql-include-ddl-events\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"reporting-granularity\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The stats that are reported will reflect up to the last 5 minutes' worth of processing, which will coincide with the stats that are shown in the UI.\",\n-                                        \"displayName\": \"Five Minutes\",\n-                                        \"value\": \"five-minutes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The stats that are reported will be an average of the value per second, gathered over the last 5 minutes. This is essentially obtained by dividing the stats that are shown in the UI by 300 (300 seconds in 5 minutes), with the exception of when NiFi has been running for less than 5 minutes. In that case, the stats will be divided by the amount of time NiFi has been running.\",\n-                                        \"displayName\": \"One Second\",\n-                                        \"value\": \"one-second\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"five-minutes\",\n-                                \"description\": \"When reporting information, specifies the granularity of the metrics to report\",\n-                                \"displayName\": \"Reporting Granularity\",\n+                            \"capture-change-mysql-init-binlog-filename\": {\n+                                \"description\": \"Specifies an initial binlog filename to use if this processor's State does not have a current binlog filename. If a filename is present in the processor's State or \\\"Use GTID\\\" property is set to false, this property is ignored. This can be used along with Initial Binlog Position to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the Variable Registry and/or environment properties.\",\n+                                \"displayName\": \"Initial Binlog Filename\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reporting-granularity\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-init-binlog-filename\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"log\",\n-                            \"stats\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.controller.ControllerStatusReportingTask\",\n-                        \"typeDescription\": \"Logs the 5-minute stats that are shown in the NiFi Summary Page for Processors and Connections, as well optionally logging the deltas between the previous iteration and the current iteration. Processors' stats are logged using the org.apache.nifi.controller.ControllerStatusReportingTask.Processors logger, while Connections' stats are logged using the org.apache.nifi.controller.ControllerStatusReportingTask.Connections logger. These can be configured in the NiFi logging configuration to log to different files, if desired.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Directory Display Name\": {\n-                                \"defaultValue\": \"Un-Named\",\n-                                \"description\": \"The name to display for the directory in alerts.\",\n-                                \"displayName\": \"Directory Display Name\",\n+                            },\n+                            \"capture-change-mysql-init-binlog-position\": {\n+                                \"description\": \"Specifies an initial offset into a binlog (specified by Initial Binlog Filename) to use if this processor's State does not have a current binlog filename. If a filename is present in the processor's State or \\\"Use GTID\\\" property is false, this property is ignored. This can be used along with Initial Binlog Filename to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the Variable Registry and/or environment properties.\",\n+                                \"displayName\": \"Initial Binlog Position\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Directory Display Name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-init-binlog-position\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Directory Location\": {\n-                                \"description\": \"The directory path of the partition to be monitored.\",\n-                                \"displayName\": \"Directory Location\",\n+                            \"capture-change-mysql-init-gtid\": {\n+                                \"description\": \"Specifies an initial GTID to use if this processor's State does not have a current GTID. If a GTID is present in the processor's State or \\\"Use GTID\\\" property is set to false, this property is ignored. This can be used to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the Variable Registry and/or environment properties.\",\n+                                \"displayName\": \"Initial Binlog GTID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Directory Location\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-init-gtid\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-init-seq-id\": {\n+                                \"description\": \"Specifies an initial sequence identifier to use if this processor's State does not have a current sequence identifier. If a sequence identifier is present in the processor's State, this property is ignored. Sequence identifiers are monotonically increasing integers that record the order of flow files generated by the processor. They can be used with the EnforceOrder processor to guarantee ordered delivery of CDC events.\",\n+                                \"displayName\": \"Initial Sequence ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-init-seq-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-max-wait-time\": {\n+                                \"defaultValue\": \"30 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a connection to be established, zero means there is effectively no limit.\",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-max-wait-time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Threshold\": {\n-                                \"defaultValue\": \"80%\",\n-                                \"description\": \"The threshold at which a bulletin will be generated to indicate that the disk usage of the partition on which the directory found is of concern\",\n-                                \"displayName\": \"Threshold\",\n+                            \"capture-change-mysql-name-pattern\": {\n+                                \"description\": \"A regular expression (regex) for matching CDC events affecting matching tables. The regex must match the table name as it is stored in the database. If the property is not set, no events will be filtered based on table name.\",\n+                                \"displayName\": \"Table Name Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Threshold\",\n-                                \"required\": true,\n+                                \"name\": \"capture-change-mysql-name-pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"disk\",\n-                            \"monitoring\",\n-                            \"repo\",\n-                            \"storage\",\n-                            \"warning\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.controller.MonitorDiskUsage\",\n-                        \"typeDescription\": \"Checks the amount of storage space available for the specified directory and warns (via a log message and a System-Level Bulletin) if the partition on which it lives exceeds some configurable threshold of storage space\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Memory Pool\": {\n+                            },\n+                            \"capture-change-mysql-password\": {\n+                                \"description\": \"Password to access the MySQL cluster\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"capture-change-mysql-retrieve-all-records\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PS Eden Space\",\n-                                        \"value\": \"PS Eden Space\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PS Survivor Space\",\n-                                        \"value\": \"PS Survivor Space\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PS Old Gen\",\n-                                        \"value\": \"PS Old Gen\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PS Old Gen\",\n-                                \"description\": \"The name of the JVM Memory Pool to monitor. The allowed values for Memory Pools are platform and JVM dependent and may vary for different versions of Java and from published documentation. This reporting task will become invalidated if configured to use a Memory Pool that is not available on the currently running host platform and JVM\",\n-                                \"displayName\": \"Memory Pool\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether to get all available CDC events, regardless of the current binlog filename and/or position. If binlog filename and position values are present in the processor's State, this property's value is ignored. This allows for 4 different configurations: 1) If binlog data is available in processor State, that is used to determine the start location and the value of Retrieve All Records is ignored. 2) If no binlog data is in processor State, then Retrieve All Records set to true means start at the beginning of the binlog history. 3) If no binlog data is in processor State and Initial Binlog Filename/Position are not set, then Retrieve All Records set to false means start at the end of the binlog history. 4) If no binlog data is in processor State and Initial Binlog Filename/Position are set, then Retrieve All Records set to false means start at the specified initial binlog file/position. To reset the behavior, clear the processor state (refer to the State Management section of the processor's documentation).\",\n+                                \"displayName\": \"Retrieve All Records\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Memory Pool\",\n+                                \"name\": \"capture-change-mysql-retrieve-all-records\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Reporting Interval\": {\n-                                \"description\": \"Indicates how often this reporting task should report bulletins while the memory utilization exceeds the configured threshold\",\n-                                \"displayName\": \"Reporting Interval\",\n+                            \"capture-change-mysql-server-id\": {\n+                                \"description\": \"The client connecting to the MySQL replication group is actually a simplified replica (server), and the Server ID value must be unique across the whole replication group (i.e. different from any other Server ID being used by any primary or replica). Thus, each instance of CaptureChangeMySQL must have a Server ID unique across the replication group. If the Server ID is not specified, it defaults to 65535.\",\n+                                \"displayName\": \"Server ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reporting Interval\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-server-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Usage Threshold\": {\n-                                \"defaultValue\": \"65%\",\n-                                \"description\": \"Indicates the threshold at which warnings should be generated. This can be a percentage or a Data Size\",\n-                                \"displayName\": \"Usage Threshold\",\n+                            \"capture-change-mysql-state-update-interval\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"DEPRECATED. This property is no longer used and exists solely for backward compatibility purposes. Indicates how often to update the processor's state with binlog file/position values. A value of zero means that state will only be updated when the processor is stopped or shutdown. If at some point the processor state does not contain the desired binlog values, the last flow file emitted will contain the last observed values, and the processor can be returned to that state by using the Initial Binlog File, Initial Binlog Position, and Initial Sequence ID properties.\",\n+                                \"displayName\": \"State Update Interval\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Usage Threshold\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-state-update-interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"garbage collection\",\n-                            \"gc\",\n-                            \"heap\",\n-                            \"jvm\",\n-                            \"memory\",\n-                            \"monitor\",\n-                            \"warning\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.controller.MonitorMemory\",\n-                        \"typeDescription\": \"Checks the amount of Java Heap available in the JVM for a particular JVM Memory Pool. If the amount of space used exceeds some configurable threshold, will warn (via a log message and System-Level Bulletin) that the memory pool is exceeding this threshold.\",\n-                        \"version\": \"1.27.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"e0c4461\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The fully-qualified name of the host on which Ganglia is running\",\n-                                \"displayName\": \"Hostname\",\n+                            },\n+                            \"capture-change-mysql-use-gtid\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether to use Global Transaction ID (GTID) for binlog tracking. If set to true, processor's state of binlog file name and position is ignored. The main benefit of using GTID is to have much reliable failover than using binlog filename/position.\",\n+                                \"displayName\": \"Use Binlog GTID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"capture-change-mysql-use-gtid\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8649\",\n-                                \"description\": \"The Port on which Ganglia is listening for incoming connections\",\n-                                \"displayName\": \"Port\",\n+                            \"capture-change-mysql-username\": {\n+                                \"description\": \"Username to access the MySQL cluster\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Send JVM Metrics\": {\n+                            \"events-per-flowfile-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"This strategy causes at most the number of events specified in the 'Number of Events Per FlowFile' property to be written per FlowFile. If the processor is stopped before the specified number of events has been written (or the event queue becomes empty), the fewer number of events will still be written as a FlowFile before stopping.\",\n+                                        \"displayName\": \"Max Events Per FlowFile\",\n+                                        \"value\": \"MAX_EVENTS_PER_FLOWFILE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"This strategy causes each event from a transaction (from BEGIN to COMMIT) to be written to a FlowFile\",\n+                                        \"displayName\": \"One Transaction Per FlowFile\",\n+                                        \"value\": \"ONE_TRANSACTION_PER_FLOWFILE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not JVM Metrics should be gathered and sent, in addition to NiFi-specific metrics\",\n-                                \"displayName\": \"Send JVM Metrics\",\n+                                \"defaultValue\": \"MAX_EVENTS_PER_FLOWFILE\",\n+                                \"description\": \"Specifies the strategy to use when writing events to FlowFile(s), such as 'Max Events Per FlowFile'\",\n+                                \"displayName\": \"Event Processing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send JVM Metrics\",\n+                                \"name\": \"events-per-flowfile-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"number-of-events-per-flowfile\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"MAX_EVENTS_PER_FLOWFILE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Event Processing Strategy\",\n+                                        \"propertyName\": \"events-per-flowfile-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies how many events should be written to a single FlowFile. If the processor is stopped before the specified number of events has been written,the events will still be written as a FlowFile before stopping.\",\n+                                \"displayName\": \"Events Per FlowFile\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"number-of-events-per-flowfile\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Information such as a 'pointer' to the current CDC event in the database is stored by this processor, such that it can continue from the same location if restarted.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ganglia\",\n-                            \"stats\"\n+                            \"cdc\",\n+                            \"event\",\n+                            \"jdbc\",\n+                            \"mysql\",\n+                            \"sql\",\n+                            \"transaction\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.ganglia.StandardGangliaReporter\",\n-                        \"typeDescription\": \"Reports metrics to Ganglia so that Ganglia can be used for external monitoring of the application. Metrics reported include JVM Metrics (optional); the following 5-minute NiFi statistics: FlowFiles Received, Bytes Received, FlowFiles Sent, Bytes Sent, Bytes Read, Bytes Written, Total Task Duration; and the current values for FlowFiles Queued, Bytes Queued, and number of Active Threads.\",\n-                        \"version\": \"1.27.0\"\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.cdc.mysql.processors.CaptureChangeMySQL\",\n+                        \"typeDescription\": \"Retrieves Change Data Capture (CDC) events from a MySQL database. CDC Events include INSERT, UPDATE, DELETE operations. Events are output as either a group of a specified number of events (the default is 1 so each event becomes its own flow file) or grouped as a full transaction (BEGIN to COMMIT). All events are ordered by the time at which the operation occurred. NOTE: If the processor is stopped before the specified number of events have been written to a flow file, the partial flow file will be output in order to maintain the consistency of the event stream.\",\n+                        \"version\": \"1.27.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"A sequence identifier (i.e. strictly increasing integer value) specifying the order of the CDC event flow file relative to the other event flow file(s).\",\n+                                \"name\": \"cdc.sequence.id\"\n+                            },\n+                            {\n+                                \"description\": \"A string indicating the type of CDC event that occurred, including (but not limited to) 'begin', 'insert', 'update', 'delete', 'ddl' and 'commit'.\",\n+                                \"name\": \"cdc.event.type\"\n+                            },\n+                            {\n+                                \"description\": \"The processor outputs flow file content in JSON format, and sets the mime.type attribute to application/json\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n                     }\n-                ]\n+                ],\n+                \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.27.0\"\n         }\n     ],\n     \"identifier\": \"apache-nifi\",\n     \"schedulingDefaults\": {\n"}]}]}
